HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
J0 d7 L7 o6 C% J8 Y
$ D6 F! e" U7 K public Object buildActions () {
0 E# c1 Q% T+ T super.buildActions();& Y% O! G$ B/ @( Y
p% O6 u% t6 k4 A; @$ j // Create the list of simulation actions. We put these in
" o5 ^' i! p0 P$ l c // an action group, because we want these actions to be
* R2 b: P7 a# m" T6 |" v // executed in a specific order, but these steps should
0 \. x) i# D: U // take no (simulated) time. The M(foo) means "The message
7 T9 p4 Q# O8 s* E' u0 [ R // called <foo>". You can send a message To a particular; @! X& s- i/ ]! `6 b8 B: V K; l
// object, or ForEach object in a collection.8 g# {1 R7 Y6 C
; g* k9 K+ J$ U! D1 w/ ~/ Z) B* Y
// Note we update the heatspace in two phases: first run0 ?9 J/ T- [3 F) {, {( ~
// diffusion, then run "updateWorld" to actually enact the9 ` ^, J4 G3 i& q
// changes the heatbugs have made. The ordering here is
% h, Y) o5 i. u# U$ E" T' A0 ^ // significant!
0 ]" u! U) G2 P5 M1 s " L( N+ M( _! E9 m* T
// Note also, that with the additional
: \/ _ ~' K+ L1 r, K // `randomizeHeatbugUpdateOrder' Boolean flag we can- |. {0 q* p; b, i- ]5 |* \( K
// randomize the order in which the bugs actually run1 s( X1 l, \, [$ \! J) f
// their step rule. This has the effect of removing any
) ~4 ?9 N8 L/ ]2 k5 ` u // systematic bias in the iteration throught the heatbug
. W! Z2 [! Q# O3 l# {0 y6 n // list from timestep to timestep
8 B" v+ y/ b! \/ J# P) C
* j' U0 B* A8 P+ O+ h* X // By default, all `createActionForEach' modelActions have, Q1 g; I8 K/ B1 [( v
// a default order of `Sequential', which means that the
8 b0 w: Q" g6 m4 D: h // order of iteration through the `heatbugList' will be
; @# B- `3 {1 L, B8 O/ g2 b // identical (assuming the list order is not changed% `$ `+ i& J0 n8 V; j+ e
// indirectly by some other process).
/ d, S. k! _, k
8 s p+ `2 n) q9 X( N# k modelActions = new ActionGroupImpl (getZone ());
$ W/ O% W ~, h% |1 U# V% C* i) a* \2 D# Q" O: O; o5 N$ {2 B. s5 f
try {! Q+ t3 K% g+ l/ {' b. w
modelActions.createActionTo$message
+ `2 n3 c" W4 }5 y- x (heat, new Selector (heat.getClass (), "stepRule", false));+ j( K+ u/ q% k
} catch (Exception e) {
8 H7 A; n, |: z System.err.println ("Exception stepRule: " + e.getMessage ()); x4 o8 o! z. @$ N) k* X
}
/ S8 E( v% D" f& k* S" N1 X
+ p# l/ ], f% ^$ o- H3 H0 ^; I try {
$ J) W6 e H8 e8 v E7 U* \ Heatbug proto = (Heatbug) heatbugList.get (0);
8 s& j& y3 B0 L5 ]- T+ t3 l Selector sel = & ~ x+ N# l1 `
new Selector (proto.getClass (), "heatbugStep", false);
, L2 M$ h5 w. o9 ?' h# o actionForEach =
9 g! ?/ G7 T% {8 ?/ z8 R( K' d modelActions.createFActionForEachHomogeneous$call
5 c3 g" F4 V( O. Z" T (heatbugList,
' N7 W/ @/ `" _2 W4 s% z; Y new FCallImpl (this, proto, sel,
1 ]' q, j+ L) n/ f/ F0 l7 Z new FArgumentsImpl (this, sel)));* a5 z' L8 Z# |; z+ O
} catch (Exception e) {4 f: n+ @: a( z9 ^) T
e.printStackTrace (System.err);
" s' [5 e/ [0 r. F' i }% I, n! Z" h" L; W8 c( f, G: w1 X
& D) |% p. G, h# W syncUpdateOrder ();+ a4 B! o1 _3 o+ |) [; A: V
& @( j2 ^1 m$ L. x3 C. q
try {: [$ h- H3 i* x$ U, i K
modelActions.createActionTo$message 9 t, G9 [" a" Y; k6 L, }
(heat, new Selector (heat.getClass (), "updateLattice", false));3 e+ I% F: j* T# }
} catch (Exception e) {4 n% A, { Y! X& @
System.err.println("Exception updateLattice: " + e.getMessage ()); H& l( i; u' V: H( \
}
* d5 Z2 {# g3 e! l" I/ r5 \ T ' t( ]& q' W$ o4 B# B
// Then we create a schedule that executes the% P) G% R7 N. f0 ?, H& J3 p0 z
// modelActions. modelActions is an ActionGroup, by itself it4 j: @% M, ]8 E% l6 C0 I% ~; T
// has no notion of time. In order to have it executed in4 h& D9 \8 `. g
// time, we create a Schedule that says to use the3 _/ b2 N# K5 M; }3 y
// modelActions ActionGroup at particular times. This
2 G @+ G2 L$ N! ~" s& G* { // schedule has a repeat interval of 1, it will loop every+ Y4 s+ A) S+ Z% ? d* h+ o
// time step. The action is executed at time 0 relative to
2 C4 G, J5 r5 W( T: z // the beginning of the loop.: [% Z7 z% G# C% _6 p) f
( l! k$ n& d) K; z- C. ~* j // This is a simple schedule, with only one action that is
1 R" q2 ^: J5 c% e ? e# N a // just repeated every time. See jmousetrap for more
H. h1 v) R6 Z7 Q3 { // complicated schedules.
* X/ o4 W1 X4 X7 e, G # U! X) u) \4 w# i* h7 B% E
modelSchedule = new ScheduleImpl (getZone (), 1);% R3 j$ n( d8 l, h
modelSchedule.at$createAction (0, modelActions);
3 P M9 @: O7 l$ d1 c% Z
+ E; y* R* ]4 F! w1 k5 h8 t3 E$ M; s return this;
( A3 k; I' v5 `- B( ~! m } |