HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" `/ a; s' q" a
. w: l2 t: h9 i8 z8 S( X public Object buildActions () {
0 S6 T' b7 m! m super.buildActions();
$ }: r: h% ]' `' | : j3 M6 q0 [8 o# T) }
// Create the list of simulation actions. We put these in
O1 p8 \+ _1 p0 Y! j# b // an action group, because we want these actions to be
% T" y3 `! w9 V: y, z // executed in a specific order, but these steps should
6 S- q' o! m4 ` // take no (simulated) time. The M(foo) means "The message
' O' ?: k6 k! f5 R // called <foo>". You can send a message To a particular) z) Y E8 p- u* j; j
// object, or ForEach object in a collection.$ H- F; h5 S1 y) W" L
+ S3 h' Y8 E( u3 M
// Note we update the heatspace in two phases: first run
+ D5 _' G* X/ G // diffusion, then run "updateWorld" to actually enact the
; }- T; O+ C) R% f4 v // changes the heatbugs have made. The ordering here is9 W7 x. z+ h# k5 z3 k
// significant!
( x5 p @, ?" W7 }9 M
$ b; u. I+ [! r) ~! D6 H) \ // Note also, that with the additional
: N3 U1 t" h: z r" f% c // `randomizeHeatbugUpdateOrder' Boolean flag we can
, H }; F/ g9 T, n4 K' C // randomize the order in which the bugs actually run
& j; m& p& ~1 A" t& R. V // their step rule. This has the effect of removing any1 q7 H+ H) u6 A" n% q( s' F. ^
// systematic bias in the iteration throught the heatbug. ]( e$ C$ Z2 V6 P6 ?6 ?2 x
// list from timestep to timestep7 K: J9 ]+ c! A
; v6 v: z, X$ ~& F1 A1 H) i) W // By default, all `createActionForEach' modelActions have0 q6 [- t8 Q) u' c% ^4 o' N; R
// a default order of `Sequential', which means that the3 v' u1 s! |( t# T/ a
// order of iteration through the `heatbugList' will be
1 n- M( M( q: C, M1 r // identical (assuming the list order is not changed$ G: n& W$ Q7 Y d7 s
// indirectly by some other process).6 |! C! S3 b4 e; T
/ v- Z; ^ o2 h; h. e9 T7 |# S Q modelActions = new ActionGroupImpl (getZone ());1 c" E: n0 I h0 z7 G+ P7 [+ W' f/ q6 G% {+ V
2 A& i8 r# C+ [& V try {9 {! ^) R2 w r \) j, D
modelActions.createActionTo$message. i4 l0 y. F: Q3 A+ H
(heat, new Selector (heat.getClass (), "stepRule", false));9 ]$ p3 }! }" W9 \
} catch (Exception e) {7 i7 }1 e. J! k8 k' Z
System.err.println ("Exception stepRule: " + e.getMessage ());
2 n( N3 y9 o, H& U; ^ }9 S* c1 H% d. O2 f
9 o! E% t, M: z8 t$ Z O- A try {" A* W# `, p# F" P$ S
Heatbug proto = (Heatbug) heatbugList.get (0);
. F1 v7 ] @* |7 V3 \; @ Selector sel =
: z, X: p4 v- a new Selector (proto.getClass (), "heatbugStep", false);
0 q4 ]) S( v; a- p# E/ s/ d actionForEach =
' T* F* q9 E$ V2 J) u modelActions.createFActionForEachHomogeneous$call' d1 A! m) x% Z6 g! `
(heatbugList,1 M' d2 j" x9 P0 x& i
new FCallImpl (this, proto, sel,1 P% ~6 k/ d3 d3 L S
new FArgumentsImpl (this, sel)));
) n# ?- H4 a4 h! U, o } catch (Exception e) {
9 c) m; S X" B e.printStackTrace (System.err);8 e2 k+ b1 o- ^* A
} G5 t& Q* C/ q2 [* |& c
5 _4 w' H- N" I6 ^+ e0 ~ syncUpdateOrder ();6 J8 g2 z% G" B
+ p. `, w r+ P, z
try {
6 \. T9 S f t& K" X1 l modelActions.createActionTo$message : U# U% B l3 L0 P* K: {4 r0 d# g" c
(heat, new Selector (heat.getClass (), "updateLattice", false)); q- V0 W. d* p9 \ v1 I* t2 K
} catch (Exception e) {
& |5 W. l( l+ }$ K5 d2 G, ]- ?) h3 l( ? System.err.println("Exception updateLattice: " + e.getMessage ());' p4 h; `4 G0 z) d
}
3 M1 j4 b! \3 M% j+ @ ) q G- Q* N2 Y' P
// Then we create a schedule that executes the" J2 l, a& e9 A4 z6 |- F
// modelActions. modelActions is an ActionGroup, by itself it
" Z/ t# N& j+ R7 q // has no notion of time. In order to have it executed in
1 v% x2 j. h7 d3 ?+ J // time, we create a Schedule that says to use the
8 K ~/ A# ^ @) ^ // modelActions ActionGroup at particular times. This
. w% M1 C a9 E( V5 \' r \; ]3 f% t // schedule has a repeat interval of 1, it will loop every" R1 {+ R1 f \9 \
// time step. The action is executed at time 0 relative to; F4 u6 e/ y$ W" U& A3 z( ~; d" i
// the beginning of the loop.
& }: a! r( M* M" F. O: F5 M4 A2 r J# V: b, w U
// This is a simple schedule, with only one action that is
- W2 }" I* a4 ^$ \! ]% q% \# V2 H // just repeated every time. See jmousetrap for more2 W/ D! I0 L W% n, A, R
// complicated schedules.9 @( V. y" ^# o! [5 a' n
, ]% L: A# p, f/ }6 y
modelSchedule = new ScheduleImpl (getZone (), 1);
3 Q0 \/ o+ d" y8 G# X' G8 m6 C modelSchedule.at$createAction (0, modelActions);- w* _4 ?* i' ^+ T
/ s# p8 e B* F; F; S8 ^% F* m k return this;
' ~2 b* v9 f7 V" p: U } |