HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- `6 X2 [( }: u0 Z- ?; H
$ F5 R/ Z8 h- u' S, }* }7 m2 o- d public Object buildActions () {
: W( m: |) b; O8 |: _5 e' y+ U# s super.buildActions();
- U9 z$ l4 y" ~9 A5 H
3 E' x0 }; C; k' @0 \. \0 m, Z5 n // Create the list of simulation actions. We put these in
$ S8 k$ h; i4 L // an action group, because we want these actions to be
6 J/ y* u5 v: ^7 C- b // executed in a specific order, but these steps should2 t& {7 Z- N' k3 I9 D. m1 H2 y' ^
// take no (simulated) time. The M(foo) means "The message
: Y# Y }& w7 d // called <foo>". You can send a message To a particular- u0 Z% f) ^0 W4 y9 {5 T
// object, or ForEach object in a collection.
' q/ w6 t# {( \, N. k* L% O + a8 [9 N- `2 U0 x7 |) P# M
// Note we update the heatspace in two phases: first run
, n" W6 k- Z, n2 Q // diffusion, then run "updateWorld" to actually enact the
5 }" h' u$ f0 w4 A+ b2 A' S // changes the heatbugs have made. The ordering here is$ o$ N9 g3 ]6 h: z. H& o. b. X
// significant!" ?9 d4 w! N- E& t( i j% t
2 b2 j. k0 E3 L3 x0 H, l7 | // Note also, that with the additional
8 ^1 p" q# o! k1 X4 { // `randomizeHeatbugUpdateOrder' Boolean flag we can2 M$ t) l! z. x0 {
// randomize the order in which the bugs actually run( Q0 C# j, o, r5 \& ~- ^
// their step rule. This has the effect of removing any5 n2 H5 j, J* ]2 d6 s
// systematic bias in the iteration throught the heatbug
) _1 D, z' I0 \' g% @. t- U // list from timestep to timestep
4 W7 s+ d# c2 X) E' e6 j- Y
1 C+ I# q7 S0 g4 a- I) T% O // By default, all `createActionForEach' modelActions have
( h' u- E+ y$ w' T // a default order of `Sequential', which means that the2 N$ q+ Z3 [* I6 [0 {2 I
// order of iteration through the `heatbugList' will be- ?, a4 ^+ Z( r( m8 r7 C% m8 _% |
// identical (assuming the list order is not changed7 Q9 E! \" _) }; U- D" e0 A6 B
// indirectly by some other process).
% B' v+ I d- ~$ N8 A ! ]0 ?$ |: G- R9 K- j6 @$ a
modelActions = new ActionGroupImpl (getZone ());
# r. t8 E" l. E- T, l
$ T9 p3 q) }6 D6 l try {$ m* g: X8 V; \) b! i- l# t
modelActions.createActionTo$message$ p( Y& D( J ]5 \
(heat, new Selector (heat.getClass (), "stepRule", false));
( S& e n/ C* F5 n } catch (Exception e) {7 R' }& H1 f* Q; ?
System.err.println ("Exception stepRule: " + e.getMessage ());
- \/ n3 x. f, o" K& w }$ y' ~5 K& J% {) z) u
" r2 r4 \1 z% ]3 {) M/ g try {0 B2 h2 h# c% [. d
Heatbug proto = (Heatbug) heatbugList.get (0);
, s6 N' d: o# k Selector sel =
4 }8 o3 Y" y& ~( h( r new Selector (proto.getClass (), "heatbugStep", false);
7 O9 w: D' t Z( o u' W actionForEach =3 Q+ A8 |" W2 ]' ^2 U5 ^
modelActions.createFActionForEachHomogeneous$call v; P! z3 u: c1 k# u9 V Q _
(heatbugList,
1 A8 f- O; V& l5 [ new FCallImpl (this, proto, sel,7 q1 O! J7 k9 B: A- k1 I
new FArgumentsImpl (this, sel)));
, y6 u% ?# k6 `) t } catch (Exception e) {
( q8 W4 q1 a- J" T1 ]6 x. y e.printStackTrace (System.err);6 J) p7 b% g. L7 A9 o4 M% B" Z
}
- ]8 a" d3 j- G3 w
* F& i' D, \ ~; B syncUpdateOrder ();
1 o) T& c! X* H* l U# K# g
. {+ Z7 k: h. H1 }# P try {4 [. _2 W) V- G; D5 L/ g
modelActions.createActionTo$message
* l. D, M% T; V' S7 P6 p (heat, new Selector (heat.getClass (), "updateLattice", false));" \# T8 t+ B; ^ z- \6 z* h( K
} catch (Exception e) {% Z7 H* U6 Q) u J# B6 K9 Q
System.err.println("Exception updateLattice: " + e.getMessage ());7 p* L% p+ z3 ^' ]/ z$ f0 M" d1 s
}- o2 d! o; [. F
' v$ O5 Y7 ` d7 A0 \! b9 s
// Then we create a schedule that executes the
, [/ i8 I5 t D) I // modelActions. modelActions is an ActionGroup, by itself it
1 i/ v" W! k/ a1 \+ F. m, B n // has no notion of time. In order to have it executed in4 c" G7 M+ q/ U1 S" a& Z. e
// time, we create a Schedule that says to use the
4 z3 h% S* R! d8 |1 T$ j) T# l- k // modelActions ActionGroup at particular times. This
" r+ W5 Q8 }1 |( D5 @ // schedule has a repeat interval of 1, it will loop every5 p7 L- ^0 z3 i& Z9 P0 S
// time step. The action is executed at time 0 relative to
: o% g9 G% i4 I# q- Y7 |9 ^3 H E // the beginning of the loop.
8 z: B6 z2 U: | ^( C4 G
# P$ M; i7 n! p // This is a simple schedule, with only one action that is
9 O/ K6 p6 Y6 P; [5 `$ L // just repeated every time. See jmousetrap for more
9 E5 B4 ^/ @0 R4 @& ? // complicated schedules.
: p5 I D5 S$ D) @. ^4 y) B2 i( q% y 0 S' L4 q+ X0 `* o$ |' y
modelSchedule = new ScheduleImpl (getZone (), 1);
8 X4 @% {- b/ b% k5 m modelSchedule.at$createAction (0, modelActions);; t* T' N: \) K* n
+ L! v5 x* t w, w, }$ x4 U
return this;
/ N2 C% n) |( F9 t; G: z } |