HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 l3 s7 ^8 F; X; \
1 k+ b1 G5 Q5 R0 n' ]9 R public Object buildActions () {, {; r! o' Q8 w7 l
super.buildActions();
+ V0 d5 p' z( v3 X4 x9 c
9 ?. S4 V0 Y: M( a7 f9 \ // Create the list of simulation actions. We put these in
@1 n9 |% Z7 \/ U // an action group, because we want these actions to be
' W5 @% x8 p! f! A // executed in a specific order, but these steps should( u5 C3 _# \0 ]+ t. A" f
// take no (simulated) time. The M(foo) means "The message7 y& D( S7 f' t- ?6 w& h( ]- T
// called <foo>". You can send a message To a particular' F- z P5 V) }; m; z
// object, or ForEach object in a collection.
9 g6 \7 i; X, Z" w # L2 }; K) Q1 B3 p" B) {
// Note we update the heatspace in two phases: first run: a! S$ b! L* k3 F) Y
// diffusion, then run "updateWorld" to actually enact the4 m' B# T/ I4 X8 k R: T' i0 h
// changes the heatbugs have made. The ordering here is
: ~' G1 l; q; e u4 j# t // significant!2 D8 H! Q4 ], }6 y( N# g b
/ f' R# _6 l0 p2 z; r/ I1 v. N
// Note also, that with the additional7 w1 S/ ^; W2 _/ y. F2 I
// `randomizeHeatbugUpdateOrder' Boolean flag we can. @) M' B: {) r+ x3 [( n
// randomize the order in which the bugs actually run: I1 Z' g; X7 K" `1 g
// their step rule. This has the effect of removing any$ E& n0 o+ J$ ^2 F& }9 \
// systematic bias in the iteration throught the heatbug/ ^1 r5 L$ M& T& Z V5 W
// list from timestep to timestep, r i% C% P: y0 w3 h+ O
; R' ^- h8 u6 S* q; W
// By default, all `createActionForEach' modelActions have
0 \& z( d# U9 K // a default order of `Sequential', which means that the3 L; u n9 f( ]# _
// order of iteration through the `heatbugList' will be
. ^7 C7 w6 t! V // identical (assuming the list order is not changed
7 ^# m9 |' [, s ]6 Y4 v& Q // indirectly by some other process).. O7 l) c1 b3 m% v+ d* f) W9 f. m
, n. A3 t: a. w* W) B5 y modelActions = new ActionGroupImpl (getZone ());
# S4 T; M+ }8 R! w2 D# f) U
' O, M* A0 N# v; |8 S try {( y* J; |6 F/ e; \
modelActions.createActionTo$message
3 h6 x8 U" ^ m8 D2 u3 {8 T% n0 y (heat, new Selector (heat.getClass (), "stepRule", false));" F) O2 G% ]7 T3 `; J8 r
} catch (Exception e) {
$ I+ h: x; `. V System.err.println ("Exception stepRule: " + e.getMessage ());+ K L9 l- k3 n1 \0 l3 Y
}! M0 C G% U/ z* K
8 E8 C& q) \- ]! q try {1 }: l: G4 r& w2 Z- X' r1 ?9 e- F
Heatbug proto = (Heatbug) heatbugList.get (0);
9 u4 p& K7 d! i0 R4 J7 o Selector sel = 2 H3 Z; X- l G$ a' R' t/ T7 _( e2 `
new Selector (proto.getClass (), "heatbugStep", false);
8 U" I& A Y& v l+ C2 w actionForEach =& Y3 \* F `( W* F$ t3 a
modelActions.createFActionForEachHomogeneous$call( x0 {5 ]7 p, G. n
(heatbugList,
. l* y& g/ V! m" b new FCallImpl (this, proto, sel,
3 L' K. P# E, |- S( s5 E9 k! ?7 | new FArgumentsImpl (this, sel)));
1 D& X! ?) l' o' U3 s } catch (Exception e) {% p. ? C# K: w
e.printStackTrace (System.err);* N, W* r: K& ^+ R4 {
}& {0 h% s5 [$ B: e6 W& D1 C
5 g4 o) I, `! K6 Y2 C. v8 P B syncUpdateOrder ();
. H. t; {$ K# c* x+ T8 g( Z
) W; X O! Z& W+ c try {+ s8 P" k1 {$ N- ~5 I% e: E
modelActions.createActionTo$message
$ [! L, W8 ]: H( l3 j (heat, new Selector (heat.getClass (), "updateLattice", false));: |; v" F( @7 h. r1 C9 Q
} catch (Exception e) {% _7 r/ o& A; v4 Z- v H9 B
System.err.println("Exception updateLattice: " + e.getMessage ());/ ~5 U1 [# w) K! d4 ~
}
8 ?. U( Y5 H# ?8 ~$ O ; f0 O6 `. D9 P
// Then we create a schedule that executes the
" g1 N4 A @) }1 }! A8 O // modelActions. modelActions is an ActionGroup, by itself it0 i. s1 {/ P" j# x
// has no notion of time. In order to have it executed in
$ Y6 \0 U( t" @7 I' e0 H0 C // time, we create a Schedule that says to use the
5 \9 P" _4 d5 A5 W // modelActions ActionGroup at particular times. This" E' N7 Y0 C. K1 I# `* n! F
// schedule has a repeat interval of 1, it will loop every
) U* a% J/ c! Z2 c* I; \# M* Z. E# I // time step. The action is executed at time 0 relative to2 ~0 _ P0 M( B% l$ Y# h. G
// the beginning of the loop.
0 s, d! P2 n w! q$ Q( F9 |0 Y! N
9 }) T0 Q& Z" |! R' E$ {( r // This is a simple schedule, with only one action that is1 d s. K1 y- i: J& A6 {# d
// just repeated every time. See jmousetrap for more
+ ^, r# s) ^1 p) N- f // complicated schedules.1 l9 m. O# j. I# X6 J, `
: _# e. h8 H$ v; d1 q
modelSchedule = new ScheduleImpl (getZone (), 1);/ v( z& e( b5 _1 @: Y' X8 |( v
modelSchedule.at$createAction (0, modelActions);& v0 V- y" e6 c9 N8 G
4 g! S5 L$ U% _4 x& @
return this;
8 @" ?$ p1 s8 v a } |