HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 U) s' B( T. c) H
' l, `1 K, V- r* U, j7 C/ i9 W) ] public Object buildActions () {
( i2 w! W* o# Y super.buildActions();
% s, E' [3 r5 d) d4 K8 r
7 D7 \! P% }/ p6 g& c2 n( L3 ? // Create the list of simulation actions. We put these in
" v+ l. \. X. Y3 C! I: Y // an action group, because we want these actions to be
" T8 s- _0 I+ j o4 Z8 e, i // executed in a specific order, but these steps should
* I% y; P5 z8 _5 b // take no (simulated) time. The M(foo) means "The message7 i, U+ {. z' s) ^* J7 j8 _* l
// called <foo>". You can send a message To a particular4 V G( @/ V, ?% A2 i
// object, or ForEach object in a collection.
4 \& y3 J+ O( C' w3 R
& q: Q: j" s6 e8 M4 c5 e' y d // Note we update the heatspace in two phases: first run
$ q5 ~; _/ j' L: p# j3 ]9 H) t1 k // diffusion, then run "updateWorld" to actually enact the
0 o. ~ T7 N. q. l8 x9 z8 ?, a // changes the heatbugs have made. The ordering here is0 a. x+ {. m, |% z
// significant!
. }+ c5 n7 Q" k N1 Y
" t+ c2 X/ P8 m: [ // Note also, that with the additional9 {' R |0 z8 v' q5 {& u2 G n7 ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 ~. k( d* A5 u! W: I( a
// randomize the order in which the bugs actually run
- _* |1 k* ^; X! v // their step rule. This has the effect of removing any( T- @' \6 q0 F5 Q2 Q
// systematic bias in the iteration throught the heatbug
g( F2 M3 K1 k) X! w: N // list from timestep to timestep
( P& f( b, s9 l
" f; K& q" _% \& ?2 w2 M // By default, all `createActionForEach' modelActions have
& } K8 W! s* N. d // a default order of `Sequential', which means that the4 n0 O6 x$ a* g/ U
// order of iteration through the `heatbugList' will be& ]' b! ~4 r/ K$ p
// identical (assuming the list order is not changed
) |5 d! i$ t4 M5 v! q // indirectly by some other process).4 i+ H! y/ v9 p& \: `: d' Y7 M
9 {6 T% S! f* |8 o6 w& V
modelActions = new ActionGroupImpl (getZone ());) Y5 R4 d, r6 [6 V" E+ t7 h
. E# L6 l! m5 n0 _6 U
try {+ V' g' V- X0 J; T! p& b: \
modelActions.createActionTo$message' A. q9 p- a! U( V& c m1 M5 H+ f
(heat, new Selector (heat.getClass (), "stepRule", false));+ q) A3 ?# m) q4 w
} catch (Exception e) {# |2 \+ n' o; Q- K" @) i; D
System.err.println ("Exception stepRule: " + e.getMessage ());
: i: q' n8 A* m5 H# s9 c7 x }
Y5 q, g! g6 I: ]+ M& Y% Q- u3 h+ {/ G( ^/ ?- @4 _1 ?
try {6 j7 ^; P" u3 C3 D
Heatbug proto = (Heatbug) heatbugList.get (0);5 C" O) x" m2 |& z2 e$ M
Selector sel = 6 M% W) M! R% [2 A W) L
new Selector (proto.getClass (), "heatbugStep", false);
- z& Z5 W- ]) T1 |. x actionForEach =
* }3 U H2 y7 ^9 r& F I modelActions.createFActionForEachHomogeneous$call
3 L. @( n- O$ J2 Q/ B5 |) Z: u, h (heatbugList,
) F' n$ J9 N4 y6 } new FCallImpl (this, proto, sel,6 h \6 N9 ?- ?' g
new FArgumentsImpl (this, sel)));1 U3 H9 g9 w+ P6 `4 d
} catch (Exception e) {
' v" H2 ^. @: T" e X) u2 P e.printStackTrace (System.err);
, W% [9 p& N! E8 U4 Q3 ? }0 p$ o/ J. e3 M
% g3 K; J) p5 [6 B+ j: Z% E% U7 ^' N% q
syncUpdateOrder ();3 B# y$ F9 i# f! G! I& O+ Q3 l
. D- N Y# Z3 S, x% B/ p: w try {
9 f4 j. v9 l! U" d i: z modelActions.createActionTo$message
3 e6 ~" i1 s7 D% _& @# u, A. i" | (heat, new Selector (heat.getClass (), "updateLattice", false));
F8 @( A, r D! R6 v } catch (Exception e) {' \7 @( I: W1 t
System.err.println("Exception updateLattice: " + e.getMessage ());
+ w" [6 ?8 Y% ?7 H& I2 K) n8 \, ]1 H }9 ^2 l# e+ Q# b/ r
- `" {! O. n5 b! k( Y8 h
// Then we create a schedule that executes the& G2 N3 T2 k8 j3 g6 N
// modelActions. modelActions is an ActionGroup, by itself it
2 P, S: c) w% Z. `8 t // has no notion of time. In order to have it executed in
+ o6 j+ Z4 f. A& i# d( o0 u# v# U // time, we create a Schedule that says to use the
+ u) P9 Z' k: ?9 q // modelActions ActionGroup at particular times. This2 [0 U/ _9 D2 p# w4 N& Y( Q
// schedule has a repeat interval of 1, it will loop every
" x# o C( ~) \1 H5 B5 \ // time step. The action is executed at time 0 relative to; A; A% U" m; V
// the beginning of the loop.
7 T& {+ A! x9 h7 K+ a3 Q' s" ?8 w; d- Z) K* H
// This is a simple schedule, with only one action that is% }5 e4 {' }5 w0 M# y
// just repeated every time. See jmousetrap for more1 I7 G: a3 h* Y; q
// complicated schedules.6 Q8 @5 v/ A0 u: b
6 }! l; s- n7 @( w0 u' @' {
modelSchedule = new ScheduleImpl (getZone (), 1);
. O/ K& F9 {* J/ z modelSchedule.at$createAction (0, modelActions);0 t; X& j7 ?/ l* o& s( R9 |8 x
% s( w( Y7 }# L) L6 S/ e return this;& U4 n' ^) ~* B# V/ ]# r9 W
} |