HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ k& w" {( u; L
8 C0 u2 e# j* U, l: {
public Object buildActions () {6 x8 J) O1 ^0 k1 A
super.buildActions();
* w+ j5 Q' d" s, B2 d! h! Q, U! B : x9 ^9 W6 O) z
// Create the list of simulation actions. We put these in+ K* k2 [7 F+ H& f, B6 H% g
// an action group, because we want these actions to be
2 R5 |* s7 H& U' D( `% b // executed in a specific order, but these steps should/ X' r9 B; X( |, m8 T
// take no (simulated) time. The M(foo) means "The message6 T6 `7 ~6 s4 y' y
// called <foo>". You can send a message To a particular# V8 q1 v% ?( O1 }' J' Z) ?' g
// object, or ForEach object in a collection.
) D5 R: l& O x+ G
& i2 Z$ @1 u+ _6 D! [& X8 T // Note we update the heatspace in two phases: first run8 R F, n5 Y2 r' w
// diffusion, then run "updateWorld" to actually enact the; r7 ? S' Y8 k
// changes the heatbugs have made. The ordering here is
0 n( `4 N; o: E; \# N6 w // significant!; I# C7 E! g, u: \2 }, F
; F: G$ O5 _$ D- w1 C( y5 n) q // Note also, that with the additional3 g, q I1 a- W5 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can* c O, Z+ U# a
// randomize the order in which the bugs actually run4 R/ N' N- e @% j
// their step rule. This has the effect of removing any
) v+ g5 H, Q8 J, ` // systematic bias in the iteration throught the heatbug4 n: ]( v7 r' E/ w: I/ }3 L/ j& n
// list from timestep to timestep% @- F" U( [* a/ |
, F& [3 N2 Y: q$ H4 n, V // By default, all `createActionForEach' modelActions have) K1 @8 F; {; Q8 T% g3 u: r
// a default order of `Sequential', which means that the1 R: n, u! a0 r* E% y
// order of iteration through the `heatbugList' will be
8 t& h0 {- h; B+ N4 t# m+ Z4 P // identical (assuming the list order is not changed
0 I. l2 m$ X: w3 Z# e // indirectly by some other process).5 \8 I! d! A. M3 ^
1 r @! X/ B4 Q/ o' {8 U modelActions = new ActionGroupImpl (getZone ());5 J. ?: h- [3 t' h: l9 q% }
4 S8 X3 \" M5 R5 V
try {
1 _. }6 X; }! _! B r modelActions.createActionTo$message% G; G! a" Z/ ]" u3 g+ V
(heat, new Selector (heat.getClass (), "stepRule", false));7 c, w ~) t- k$ H9 S4 L
} catch (Exception e) {
. @9 L% Z+ ]4 p7 p System.err.println ("Exception stepRule: " + e.getMessage ());
) m! a; z- V/ ^+ @6 k }
5 c5 Y$ Z2 z& `. Y, H( K r: l a' I, `" T
try {
6 [% H6 P# R8 F* J4 M q. y Heatbug proto = (Heatbug) heatbugList.get (0);3 m" i# n3 p7 |: v6 h4 p$ w
Selector sel = * h6 k/ u% W7 D: n/ E4 e
new Selector (proto.getClass (), "heatbugStep", false);9 a6 }7 v2 J0 h
actionForEach =
$ [1 R3 N s* ^5 e modelActions.createFActionForEachHomogeneous$call2 g& L4 i0 c- }) l4 x' M
(heatbugList,
, K' J! T; J5 s/ K6 M4 A. Q: p new FCallImpl (this, proto, sel,) u# _7 P2 ] g; F! o# ?
new FArgumentsImpl (this, sel)));( Z- ?* @. i) u: U" w: M, {
} catch (Exception e) {1 m8 F9 T6 Q2 d; o1 x7 U" S
e.printStackTrace (System.err);4 ^( y" U f$ H5 q. h- [: X9 c/ a( T1 I
}- C" |1 Z' E: g6 {# N+ I4 h" Y
1 `" E/ Y* u; l! e1 U
syncUpdateOrder ();
i* D4 T& S9 a) s, `
: ~) \7 ]( ?+ Y" F# | L try {# ]5 m0 |: A$ T: ^. t R
modelActions.createActionTo$message 3 N" H$ _0 }" f
(heat, new Selector (heat.getClass (), "updateLattice", false));- K& J+ o6 b2 ?9 A
} catch (Exception e) {
/ K u9 w! J3 M System.err.println("Exception updateLattice: " + e.getMessage ());
- x( N0 o/ J$ p6 I" h }
, i! y8 f, c6 \; U3 G$ _ % V1 b, w3 Y9 N3 j' W; x
// Then we create a schedule that executes the0 c B$ m- X: p! f2 k0 q
// modelActions. modelActions is an ActionGroup, by itself it
. z. T# \1 d0 _! X- O0 o // has no notion of time. In order to have it executed in7 O: z, R- r" ]0 S" Z' O
// time, we create a Schedule that says to use the
# `5 _5 _# J; C4 b" M6 d5 P // modelActions ActionGroup at particular times. This0 ?6 F) `. o$ s9 f8 H/ L6 }
// schedule has a repeat interval of 1, it will loop every
' o- x% _ `5 ~ // time step. The action is executed at time 0 relative to1 P+ z: l( M2 s K
// the beginning of the loop.
$ Q" D- m5 u; r( o/ ~8 }
" r# Y# n- T) q) j( `+ N$ s // This is a simple schedule, with only one action that is4 T& R7 Y7 V1 V7 o& |/ l5 k5 |4 }* ^
// just repeated every time. See jmousetrap for more
7 g V' l4 j# c: ?& p // complicated schedules.
! |* W; \* |; T. M; N& r+ t# |' g
2 C" Z: r; x& E, J0 f modelSchedule = new ScheduleImpl (getZone (), 1);( L% h8 B2 y: W
modelSchedule.at$createAction (0, modelActions);
( ?$ e" H7 Y1 S 6 @4 o! O# X% R+ T6 K* |
return this;
1 z& u7 `" x7 Y# ] } |