HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' F, u( _, I" ~( U/ F1 Z
) L2 [" P: u2 m/ ^1 b, O# p public Object buildActions () {
# G$ Q7 m) f0 v) N9 d super.buildActions();* w3 X7 p% R8 w5 P
/ P6 `. [. \* q$ Z% d8 L // Create the list of simulation actions. We put these in) R& i8 l# _# J$ [0 U# I! m9 n8 ~% V
// an action group, because we want these actions to be2 V- E% a r l) a: D6 m2 c
// executed in a specific order, but these steps should2 e/ ^# `; w9 e4 N4 ]; Q: O& i3 z" ~
// take no (simulated) time. The M(foo) means "The message
9 d5 y) E( k8 P: T, f5 @% l0 T2 Y // called <foo>". You can send a message To a particular/ w9 }( k6 N+ \% Y5 W! J
// object, or ForEach object in a collection.( F/ V7 a; U$ ^1 N
! B: L% l% [- ^9 a2 ?6 \8 k I
// Note we update the heatspace in two phases: first run: a3 w8 E$ U7 J, {
// diffusion, then run "updateWorld" to actually enact the
$ [/ b! c) h, T% ?% |% y7 q // changes the heatbugs have made. The ordering here is
: `) H: M" ]3 Z // significant!( X7 R! J' r/ q6 U( K0 A6 o! q
$ D: i) V# ^% h1 H // Note also, that with the additional% ?. V0 ~0 N& @+ ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can) _& R3 |7 |7 `: n `" }
// randomize the order in which the bugs actually run& v; K# w) d3 [0 L; G1 Q" ?6 W
// their step rule. This has the effect of removing any
) ?0 s2 m0 r1 N. Q# P+ S* q // systematic bias in the iteration throught the heatbug7 a2 h# c" c" Y
// list from timestep to timestep |, x {: g% k
. Y- g6 v* ?5 r+ k // By default, all `createActionForEach' modelActions have
7 s+ y. N0 {2 ~- z" f& n3 c // a default order of `Sequential', which means that the
) o4 z0 |" {9 @ // order of iteration through the `heatbugList' will be
* r1 L- i+ M8 A8 n) I# O, i // identical (assuming the list order is not changed/ A& ^+ w1 R3 O2 Z3 X
// indirectly by some other process).9 V/ n2 \5 N& Y
" c/ M0 J# O. V/ ^
modelActions = new ActionGroupImpl (getZone ());$ V1 }; H; e. F5 \4 G
$ k0 i7 _! h! X# R- @
try {- [' r5 C1 i8 N
modelActions.createActionTo$message. z) P3 T' Y8 M2 Q7 y
(heat, new Selector (heat.getClass (), "stepRule", false));9 y* j5 n+ _# Z7 M. S& B7 G5 H3 A
} catch (Exception e) {
: s2 N6 M0 y/ ~# }: a+ \ System.err.println ("Exception stepRule: " + e.getMessage ());
' K& x" S4 G- B3 F6 L/ r" U }
3 W$ ?- \9 w8 r' x3 n7 S( X* y {% }. `" a R! a3 u7 d- x" I
try {0 V- i3 a9 s2 B" w6 ^1 L+ j) P
Heatbug proto = (Heatbug) heatbugList.get (0);8 h+ h; `7 ?* R
Selector sel =
" L; j/ b9 P8 `" e; N8 c8 r0 W2 O new Selector (proto.getClass (), "heatbugStep", false);7 f( i( B5 V) Y ]5 T
actionForEach =
1 D' F" u5 C/ m% W' \ modelActions.createFActionForEachHomogeneous$call
5 G! R2 ]! G9 e/ H; i (heatbugList,) P6 @, K7 L/ A" U
new FCallImpl (this, proto, sel,* D# r7 j( c3 y# g; C% Y5 B$ B
new FArgumentsImpl (this, sel)));
) l& `7 O. G8 T( q$ D } catch (Exception e) {2 i# m; |( w) g! q- N! U
e.printStackTrace (System.err);7 q' q( O! L: C' | Y$ R- ?. D
}
- A' {! G, q8 T) O+ k/ l0 d9 x! p. a* G7 t
& n6 x% \" W( O8 F% K syncUpdateOrder ();
8 o5 K% F% y0 C& U5 F
+ G0 i! d6 W* M/ q8 v& j' W try {0 S% }) G. I) S' m2 {
modelActions.createActionTo$message
3 y& ]5 n, x) V, y0 W O1 M (heat, new Selector (heat.getClass (), "updateLattice", false));* y9 e- U6 e4 V
} catch (Exception e) {7 \' B1 o4 V0 m% y+ @; ~
System.err.println("Exception updateLattice: " + e.getMessage ());, Z( F) g' ? ]8 d
}
( `8 L' b1 y; e" S7 l . K5 P9 P. A/ q4 g$ `, Z
// Then we create a schedule that executes the
2 E; J& a4 I$ {+ H // modelActions. modelActions is an ActionGroup, by itself it) D6 S( k3 K4 ^; |0 a, O# E
// has no notion of time. In order to have it executed in1 ?4 W1 W/ X6 k u( @
// time, we create a Schedule that says to use the: _; h: \& k/ i
// modelActions ActionGroup at particular times. This
0 f& F* q+ H" Y; U" }, r // schedule has a repeat interval of 1, it will loop every# J$ I; i( `, G( x, i2 I& V
// time step. The action is executed at time 0 relative to
+ n2 N: }( Y# \ // the beginning of the loop.6 o% j y( n( K# w1 ?8 F( u
6 I" C. C5 Z6 ]( I b6 X+ Y, r
// This is a simple schedule, with only one action that is
& B' U* `5 A# ^/ [5 U' j* Y // just repeated every time. See jmousetrap for more
3 u3 p/ w, i: s // complicated schedules.
6 q" Z& O) [4 Z9 w8 v + u' F7 @ K' \* i# J& Q1 x1 g6 D
modelSchedule = new ScheduleImpl (getZone (), 1);, [/ N/ y1 A+ p( c4 y8 O7 d
modelSchedule.at$createAction (0, modelActions);
) i# b9 C. M( r$ d j$ z8 Y' U$ |% v. F e
( U6 m7 Y+ K3 T% S return this;. { G) W3 l7 L3 O( r0 s' U! Z6 Z
} |