HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# D$ S% \3 m/ j7 e% i( V5 m& Q
# n: e+ y1 Q! \. e# z7 d public Object buildActions () {
- J1 d9 z" t8 E# h- T4 ^2 c. g super.buildActions();
% X( B" R/ d0 C% c" h6 O3 [8 u% M6 J
3 m9 N/ `. C: Y2 q2 E; k // Create the list of simulation actions. We put these in
) @. r7 a0 H2 j0 _6 O4 p // an action group, because we want these actions to be: H1 I. P5 D9 T+ \# J- P
// executed in a specific order, but these steps should
Z% K5 W9 @8 l) K! R) Q; s+ w // take no (simulated) time. The M(foo) means "The message4 S$ W$ I) W( \7 c
// called <foo>". You can send a message To a particular: g9 s ]6 j- Y- \
// object, or ForEach object in a collection.' W* M" O3 q6 x
* w! E0 J+ _0 c5 m4 O" p" o& A // Note we update the heatspace in two phases: first run9 b, u/ a1 H( |2 q8 t+ t- s+ @
// diffusion, then run "updateWorld" to actually enact the
' [( N/ `, R( n' J3 y // changes the heatbugs have made. The ordering here is2 S( L X' Z l
// significant!, Q' R- I6 @" Y- v$ \$ z) x
! ^( B2 I/ T ]$ F // Note also, that with the additional9 E* m4 V* h2 V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 _; t0 O1 {- K$ ? // randomize the order in which the bugs actually run
]4 z, o0 _/ w // their step rule. This has the effect of removing any- t# v7 [7 h; a
// systematic bias in the iteration throught the heatbug
0 W1 _* A2 K7 v/ C, C // list from timestep to timestep4 V, n$ U+ H* @. h+ S; v( l
4 U3 E- s/ `5 {$ H
// By default, all `createActionForEach' modelActions have
; K o5 p+ X$ [2 K6 [0 v& q$ k2 b9 b& p // a default order of `Sequential', which means that the
1 _: B7 W5 X7 a' v4 u/ R X8 a/ O/ P. r // order of iteration through the `heatbugList' will be0 a( N, |/ l& c" T7 a
// identical (assuming the list order is not changed
8 d% _! E3 f& R# B4 a // indirectly by some other process).' y ]* y. C2 i, c
# P% d( {: h) c k6 O. ~& N% H- |
modelActions = new ActionGroupImpl (getZone ());
& k% |8 v3 {/ Q7 g! L! x* K1 |% F) _
try {$ P; N. c1 I5 y6 z* u3 M8 s+ B
modelActions.createActionTo$message
2 J a6 W/ r5 i) u7 C (heat, new Selector (heat.getClass (), "stepRule", false));
9 H) j: V! ]: r8 A } catch (Exception e) {
. ?3 I, e0 n: p. M7 w! ~ System.err.println ("Exception stepRule: " + e.getMessage ());2 l( K. O7 K6 d! t' ?8 u8 W
}4 c' z$ f* X* ~ y k5 }0 C# s/ T8 r& Q' A
; ] L* d1 T! m8 p9 c* w6 b
try {
; z+ x6 l0 c- ^4 l3 c7 C Heatbug proto = (Heatbug) heatbugList.get (0);' b. I" r: N" ?( ~3 v" n( c
Selector sel =
& p2 m7 Y2 q4 w4 L& {! h& V new Selector (proto.getClass (), "heatbugStep", false);2 I b/ z0 V$ m9 r3 B0 p; X8 B; ^
actionForEach =
: z; O; E: S, _- Q/ T5 f+ @4 C* X modelActions.createFActionForEachHomogeneous$call
: L* _: W3 T* x7 i! x9 I (heatbugList,
6 O; h* V4 a9 g# P, l9 Y new FCallImpl (this, proto, sel,) g7 I' u f- i6 E3 E$ T3 i7 O1 t8 e( s
new FArgumentsImpl (this, sel)));) h, q8 _# D O6 ~
} catch (Exception e) {! ?3 N+ Y c4 j
e.printStackTrace (System.err);* f- E; r4 a+ t
}3 v$ S8 u0 u! d$ |
# ^2 H: x# f- y, b syncUpdateOrder ();* y7 t- z9 w3 ^
; m( H2 H r0 t: U) S$ m" a
try {
7 z3 R. T5 |( H3 W1 Q- J } modelActions.createActionTo$message
8 ]4 d! i0 i8 E @ (heat, new Selector (heat.getClass (), "updateLattice", false));+ {$ R' }3 }9 n+ U0 b2 N
} catch (Exception e) {
Z8 Z+ G! `" K System.err.println("Exception updateLattice: " + e.getMessage ());
# c/ K9 h/ ?; |; n: ~7 r4 [9 r }
; `& g O x* w8 y. L# n5 j3 C / _% A! o/ P. U1 Y* z
// Then we create a schedule that executes the
% p, |2 G" F5 Y" q8 K6 q9 g4 y // modelActions. modelActions is an ActionGroup, by itself it5 U% j# y8 p/ m9 C3 d/ s2 q
// has no notion of time. In order to have it executed in
0 A. j% V% ~+ n6 y8 D/ u4 [% D& D // time, we create a Schedule that says to use the
3 G% T- B8 i; e% `( k& | // modelActions ActionGroup at particular times. This
6 M+ f6 z9 m6 P9 O- U // schedule has a repeat interval of 1, it will loop every' P9 p+ j# M" z' U
// time step. The action is executed at time 0 relative to
4 y# O$ ^" Y6 V: C // the beginning of the loop.6 E( t* R2 @1 n; D; }0 E. V* _
u9 N! b; r+ V5 a // This is a simple schedule, with only one action that is) `" h- i0 ^) j+ Y
// just repeated every time. See jmousetrap for more
7 F' L( E& T. [6 m1 M! n% X // complicated schedules.+ y( M" ` z' A' K% A8 X$ N
& I0 v3 Y, B5 T& e! @6 q
modelSchedule = new ScheduleImpl (getZone (), 1);
. a% T- y( _. U modelSchedule.at$createAction (0, modelActions);
* L1 E- o) I% p/ ^7 o4 o
9 C1 ^ |+ Q2 W2 Y" F return this;
* b/ L3 w M: w1 n6 C) T% m } |