HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. v* b9 f0 e6 R/ y
0 B2 d2 Q6 D4 I. ^& F8 l public Object buildActions () {, U" U4 M6 @ `+ a/ J
super.buildActions();
- F/ q9 z# l' o5 l( W
' _3 J+ k4 `) |1 ]8 K0 h& N // Create the list of simulation actions. We put these in
/ C# g$ g1 S0 l; t9 e! B2 Q // an action group, because we want these actions to be
Y' w5 L& |" j# B // executed in a specific order, but these steps should% o, W$ z3 r* J- O/ F
// take no (simulated) time. The M(foo) means "The message
1 Q7 R0 m' \6 m // called <foo>". You can send a message To a particular3 y2 F7 r2 [& L5 A
// object, or ForEach object in a collection.
/ R" f, i$ o4 [( c7 J# l. a
2 T1 I* [. t. [ { // Note we update the heatspace in two phases: first run3 }- K4 ^% k* A$ P
// diffusion, then run "updateWorld" to actually enact the: @/ b7 a4 c" I) H
// changes the heatbugs have made. The ordering here is# T7 f0 [/ |5 Q; K
// significant!. Z8 x0 n; K+ D0 X# q. E
9 c3 q2 }! d8 K7 \/ I: j; b
// Note also, that with the additional9 v& j* s2 g! [( c+ m9 g! M5 \
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 U% |8 V7 A6 L5 ?+ m
// randomize the order in which the bugs actually run2 b5 r' o* K$ ^* Z: R2 O
// their step rule. This has the effect of removing any
! y3 M8 s: z) C5 ^ // systematic bias in the iteration throught the heatbug8 P" T3 D( l0 H+ b5 Q
// list from timestep to timestep' [% j X. k. S/ J+ W# _) ?
8 o0 I; I( Y& a3 Z
// By default, all `createActionForEach' modelActions have
/ x) \7 O3 @) U- v( T$ i+ a" s // a default order of `Sequential', which means that the
) }& N& k. C- s Y // order of iteration through the `heatbugList' will be
( k5 h/ C8 B' n* H+ q9 }( }9 W // identical (assuming the list order is not changed
* ^8 l( I" s" g$ Q% N& l // indirectly by some other process).6 J/ `% @3 T7 u1 u
! I4 \$ y( I% w8 M9 `# k! W
modelActions = new ActionGroupImpl (getZone ());
: R* X7 W0 B0 c4 G6 F. M$ a9 M$ [) e- K3 Y6 [5 o6 Y. s. _
try { x* c$ B R) v a* S, V2 t& w# m
modelActions.createActionTo$message6 l8 _4 U8 a$ w0 ~) h4 ]
(heat, new Selector (heat.getClass (), "stepRule", false));$ o+ |7 G& }$ D0 X0 J, i
} catch (Exception e) {% R* I( r8 P0 l( V' Y
System.err.println ("Exception stepRule: " + e.getMessage ());
5 L; W6 F6 L1 N6 z! r& w' a: X' } } V: s0 N% x3 ]' L
1 T+ y* Q% r5 t o" l try {
$ S( h% E: p( D- f7 W5 C$ T1 C Heatbug proto = (Heatbug) heatbugList.get (0);: r2 h( t) a$ ~: S5 G2 i+ d
Selector sel =
7 h% @0 ~8 }. {: g i2 {/ g new Selector (proto.getClass (), "heatbugStep", false);8 i6 A+ g& f% S, [( w
actionForEach =
' z K7 w! Y3 H, a) |% P6 B& Z modelActions.createFActionForEachHomogeneous$call* y6 _: T: E' t! q3 H5 x/ G2 o) j
(heatbugList,7 B7 E" x0 B9 a9 z
new FCallImpl (this, proto, sel,1 p2 g" X0 f& ~: w
new FArgumentsImpl (this, sel)));& P' }. U/ e) L4 R9 f- c2 ^7 U2 x
} catch (Exception e) {8 i! i0 l9 {1 X$ ^
e.printStackTrace (System.err);8 Y; }- D9 r9 L" ]3 W) E
} P1 U; x# y- W) u
! s: U# V2 y) g* D
syncUpdateOrder ();+ g0 }3 n0 L6 D$ E/ R* z
# |0 ]% z+ t ?, a try {
. _, H/ Y( X4 Z( C. S modelActions.createActionTo$message
# c: U0 J; l& k" f" t' H# f/ ]& r, Q (heat, new Selector (heat.getClass (), "updateLattice", false));
; g3 L" h; J( c' ^- a/ x } catch (Exception e) {$ J6 { _+ ~6 L- Y# e6 O6 B
System.err.println("Exception updateLattice: " + e.getMessage ());
6 U1 m4 a: B: `6 H0 t) ? } X' @% M/ Y3 k& @' } @+ j, ]
. r! o" H: ]# Q% X1 P# }* b // Then we create a schedule that executes the* X* Z9 y7 i! X6 ]( i. d4 h
// modelActions. modelActions is an ActionGroup, by itself it
/ q$ s* ^+ G1 y$ H* ~ // has no notion of time. In order to have it executed in2 S n% H9 [- h, N
// time, we create a Schedule that says to use the
, @$ Z" N: r7 ^ // modelActions ActionGroup at particular times. This
5 D# `7 [3 Q% J; L+ \: b* X // schedule has a repeat interval of 1, it will loop every* z- _( Z" t4 f
// time step. The action is executed at time 0 relative to
0 A9 I- N7 Q x3 J% m3 P. b2 H // the beginning of the loop.$ n/ D {$ ~' z5 M* u
4 N1 Z+ K- \0 h ?: }# A, ~' W3 l: y // This is a simple schedule, with only one action that is V/ W1 S" _+ e/ [4 u
// just repeated every time. See jmousetrap for more' }8 x% c! S c i
// complicated schedules.
1 b" X6 @" f4 Q6 J- @ 3 C6 b, Y4 [5 o& H" c$ w" }
modelSchedule = new ScheduleImpl (getZone (), 1);4 ?" g4 Q8 q. S/ s' |
modelSchedule.at$createAction (0, modelActions);
( w4 L0 w3 O7 N W2 r3 y / {- y0 k2 I6 \# Y, A+ K8 n& y
return this;
' ^9 t: x. M- K: V" U1 c } |