HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 _0 D6 O2 M) h" D1 f- i5 h
& Y2 s' @ ?6 y7 l, B8 e public Object buildActions () {
, z9 G8 X5 l x7 x super.buildActions();
: t2 i/ B- J( u' F1 c4 j' H
. z5 w8 y \1 k // Create the list of simulation actions. We put these in2 ^( f! y5 L! T+ \8 `; Q
// an action group, because we want these actions to be
, U' f/ |0 m) G) q9 U V, S // executed in a specific order, but these steps should/ v Q$ X; R4 m- m8 z& w
// take no (simulated) time. The M(foo) means "The message
6 L! _, n a/ m5 Y7 r m // called <foo>". You can send a message To a particular
) x2 \ u. W2 b p4 d9 n" f( Y; p7 H // object, or ForEach object in a collection.
! q6 D! d- l8 z' W * l! P% n- I; p! z0 L) Q& O
// Note we update the heatspace in two phases: first run
7 u7 K! ] j) o* j+ ~' _ // diffusion, then run "updateWorld" to actually enact the+ y4 J* F& @5 c8 h
// changes the heatbugs have made. The ordering here is
+ O8 Q1 ~7 T5 N7 w! x; y( ~/ r5 k // significant!
0 S( P5 ~1 ^: N# F. q
* ^* [8 Q" D7 k4 l: u // Note also, that with the additional
' i( I/ ]/ c7 _: W // `randomizeHeatbugUpdateOrder' Boolean flag we can
# ]4 Y) B5 w% _ // randomize the order in which the bugs actually run
* a3 ^7 K3 y6 `$ ~' W% J" P/ r' W // their step rule. This has the effect of removing any- r6 ]8 J% p% f# o+ ~! ~: O
// systematic bias in the iteration throught the heatbug
) Y4 _$ q3 U' g0 X6 V# |0 s // list from timestep to timestep: G& A/ U* E7 L8 s3 z" ~8 y7 ]
- ~; F. N, n1 }+ F9 F // By default, all `createActionForEach' modelActions have
9 R- s5 O# i! ^ // a default order of `Sequential', which means that the
- {/ ?; w" C1 f- h // order of iteration through the `heatbugList' will be
$ v1 R+ f4 ?9 _( X // identical (assuming the list order is not changed
' C$ U' y2 b G U W$ a // indirectly by some other process).3 c& N% `. w' X$ h) B) s& \9 u
6 f# n U3 U; ]( b' L
modelActions = new ActionGroupImpl (getZone ());
' M5 W( l. R% @" ?1 I: l& P7 {9 Y6 ^; Z+ X' a1 D
try {! X' V9 l+ s- Y3 `* _/ C) u
modelActions.createActionTo$message
9 s7 U+ O9 A8 n: p7 f O7 p (heat, new Selector (heat.getClass (), "stepRule", false));
1 A1 u% K7 w+ j2 ` } catch (Exception e) {
3 S' x( M3 \& I, g. a System.err.println ("Exception stepRule: " + e.getMessage ());
y0 v% u) J0 r X7 |5 F8 R7 a }/ r7 n- c$ r; D5 ]
6 H5 l* t4 J$ H( r7 s X
try {
2 ~3 Z$ |: n; B) ?5 e5 C2 { Heatbug proto = (Heatbug) heatbugList.get (0);2 d8 s: H" n* x
Selector sel = / D; F1 Q; j5 W2 O" u* N Q+ `" i
new Selector (proto.getClass (), "heatbugStep", false);& @ O4 A3 t: O' T/ C
actionForEach =
- J/ `0 N! t* H9 n3 k modelActions.createFActionForEachHomogeneous$call8 @/ x! c6 l7 i' D* Q
(heatbugList,5 G$ [& v h/ E& J, z
new FCallImpl (this, proto, sel,
! q6 C( h# _8 \' s) T) G new FArgumentsImpl (this, sel)));
0 Y6 \9 S; O }8 t/ x K" W& U+ |3 P } catch (Exception e) {+ B" `! c% W9 T0 H/ g/ ]4 x, Q+ l
e.printStackTrace (System.err);
- r. {- j r$ a5 h, v }! `7 t1 Q% @$ }
0 @3 D! O" K! w( M
syncUpdateOrder ();) G. j v6 [: z# p/ Z# x5 E
" u7 O9 z+ M _5 ~, b# N try {
- n q; X. ]# I+ a; z, c modelActions.createActionTo$message 7 B, v8 ~8 l6 z( s3 e" D
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 v6 @4 l h& g* a$ J$ r- ^ } catch (Exception e) {2 O$ {$ n% O' X6 } [0 c$ ]
System.err.println("Exception updateLattice: " + e.getMessage ());5 ?' X6 `5 j9 Q9 U! W
}
- Z1 `. k$ c+ ?& ?% C
# y( D+ @5 T. Y( C! s& B // Then we create a schedule that executes the. j+ w9 B h! K; N* H' X) ?9 t `
// modelActions. modelActions is an ActionGroup, by itself it
3 Y) k: M6 l0 t8 t // has no notion of time. In order to have it executed in/ c+ M4 X: w- L) C
// time, we create a Schedule that says to use the6 P: W; M% T8 T+ `$ g/ \5 u
// modelActions ActionGroup at particular times. This. q& w5 {1 y5 ^* Q2 U C" H
// schedule has a repeat interval of 1, it will loop every
# e# b) E1 ^& r8 p // time step. The action is executed at time 0 relative to% \# ^% z( T0 @
// the beginning of the loop.
$ w/ L" p. c. Q/ t* G* i
9 l% U0 }. ^" ^7 A) z3 d- J // This is a simple schedule, with only one action that is2 \1 M" N f! u1 @- x7 ~0 x, T7 X
// just repeated every time. See jmousetrap for more
% t4 n. B. s! N) U5 r! e // complicated schedules.0 k' f5 o( D8 y( }
8 I+ d3 T* x9 X; ]' ]( n
modelSchedule = new ScheduleImpl (getZone (), 1);
: {4 ?3 `+ X9 b5 Q4 E7 N modelSchedule.at$createAction (0, modelActions); @+ e, e; C1 Q- K+ Y( v
1 a, W" v9 X* O$ J; X return this;
% S* I6 x' y3 [ h) c } |