HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ a2 Q9 j3 a1 \& I1 s
! m" B2 V) \) n+ S0 M% ?" L public Object buildActions () {6 M6 u' k2 U- b
super.buildActions();& z7 c3 Y# K, v$ @. t: g
! V# C1 N; o3 z( ^. t$ G
// Create the list of simulation actions. We put these in$ B0 U! o7 C# J& x) e! K v
// an action group, because we want these actions to be
/ P2 h2 u) r- N$ m' ` // executed in a specific order, but these steps should
" K$ f" e7 j* y& }/ r! j7 l // take no (simulated) time. The M(foo) means "The message
0 Q- j4 {$ |% R // called <foo>". You can send a message To a particular
5 F% O8 ]+ B5 @0 K- Y // object, or ForEach object in a collection.7 | q, J* Y! I, T
5 t- l# j& ~3 { // Note we update the heatspace in two phases: first run
: o% P a: A& w V // diffusion, then run "updateWorld" to actually enact the
: B/ O! E9 p% a7 Q2 Z1 b. l ^0 \ // changes the heatbugs have made. The ordering here is
! Z3 T) |/ v G# P; a* _ // significant!
7 p2 i4 z" b" l8 d' w 7 X+ I* ?5 l' B' S6 Y; k3 T8 e/ ?
// Note also, that with the additional! z1 U0 h0 h; J
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# ?9 U7 W- v/ w // randomize the order in which the bugs actually run. |1 c6 F# l/ [! x% Q
// their step rule. This has the effect of removing any
: ^4 d4 X8 R* D // systematic bias in the iteration throught the heatbug
, T) O- h1 {* q9 ]- n, S4 i // list from timestep to timestep
5 v4 G4 J/ l1 v! s! ^ ) V( S/ R: ^. X8 P, _: m" W5 X+ r
// By default, all `createActionForEach' modelActions have" k+ `2 Z8 z' s7 b8 Z+ m
// a default order of `Sequential', which means that the0 O, g; w4 H0 e5 V' C
// order of iteration through the `heatbugList' will be
) u: e; p( z n9 r% S8 Y3 F/ t // identical (assuming the list order is not changed6 R: J+ O; ^6 V' w. Z
// indirectly by some other process).% P& u3 g/ W0 ]' m r
. f( q$ t$ x5 s4 a modelActions = new ActionGroupImpl (getZone ());( |5 y8 n0 x# F) z: T
, C, X8 s/ X; Y X: ^) H* [ try {
' z' P% n( ^/ M% p+ B5 p, U/ E% e modelActions.createActionTo$message0 t, {" ], \- q5 V( [- Q# t
(heat, new Selector (heat.getClass (), "stepRule", false));
% F3 N$ ?( ~6 N0 K& X9 Z } catch (Exception e) {5 _: e" K1 M, N$ [0 K$ G& x
System.err.println ("Exception stepRule: " + e.getMessage ());
) l( S/ m6 u* `' V' @ }9 V1 B' Y; r, _+ n
+ R$ W! w- T9 c; b8 F7 A try {4 {! a0 x( j. g# Q8 j
Heatbug proto = (Heatbug) heatbugList.get (0);
) G" P0 d+ C2 \% Z+ m Selector sel = ! c+ m# ?6 C, P7 C R8 r4 W
new Selector (proto.getClass (), "heatbugStep", false);2 E0 C* h: S6 _ M _0 C$ W% ^
actionForEach =
+ |/ H9 |" M' b% R& c modelActions.createFActionForEachHomogeneous$call
- C+ G0 p; R, E& F$ |; J w (heatbugList,* W G% m6 J/ T# W8 ]$ h. j
new FCallImpl (this, proto, sel,
* ?' D+ S. v _" ]) e8 D r; X new FArgumentsImpl (this, sel)));/ p6 _9 y0 G7 C
} catch (Exception e) {
6 P, D: _. I n% ~* E. m e.printStackTrace (System.err);
. R- G# r1 i+ _ R }' I$ @. _: ~8 P2 ]+ x- n
$ Q# m5 ?0 Y E! t8 `" c8 Q+ {( D
syncUpdateOrder ();' P7 L( V, n/ r2 S/ }
3 k; l9 ]7 z5 B, G7 Q try {
& w( ], S$ |4 u, P0 _ V0 W modelActions.createActionTo$message
# C v! E2 ^3 o5 r (heat, new Selector (heat.getClass (), "updateLattice", false));( h; s4 J' w8 |, U& v) }
} catch (Exception e) {8 E2 ~! N: z% s: [& d. |
System.err.println("Exception updateLattice: " + e.getMessage ()); Q1 L+ N( ]. P5 U
}
; y5 g* q$ I, |3 V/ a; _( W' I
0 w( G5 S @# _5 f7 n5 O, w! c // Then we create a schedule that executes the
2 Z. j, P$ q# g; ~4 v // modelActions. modelActions is an ActionGroup, by itself it" A: {1 T4 H- m6 i. I
// has no notion of time. In order to have it executed in
0 T4 q7 ^6 m+ R/ ^+ T: j! J* z // time, we create a Schedule that says to use the
' X8 l$ u6 U7 m; U$ W4 H; ? // modelActions ActionGroup at particular times. This$ ?# N* n3 ~1 x) I
// schedule has a repeat interval of 1, it will loop every& c' t3 `2 p% K& Q$ n# P
// time step. The action is executed at time 0 relative to
( _. K- O6 B, i6 l; L // the beginning of the loop.
% M; M* M/ A! W: f: s. n9 B3 `) W# a3 B
// This is a simple schedule, with only one action that is
- t8 h5 k" \! R // just repeated every time. See jmousetrap for more
: s4 v% u1 e, }, z8 l // complicated schedules.& @5 d4 |, j! ?# c
6 w, M6 c/ i( e
modelSchedule = new ScheduleImpl (getZone (), 1);
& b7 P7 L4 H9 c g5 d' o- U- } modelSchedule.at$createAction (0, modelActions);1 i, P% x* q$ R9 f; l
: [6 ?# G5 @( b; H return this;
3 X6 P# K0 M5 k+ H% ] } |