HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' d ~3 Z( M3 m7 r; |' D
2 {6 S. I' w L0 @ public Object buildActions () {
$ k; G( h# Q$ O% i& O super.buildActions();* V0 T) o% W0 ?9 w7 _0 e: R
l4 s+ m* u" P2 x+ e: V // Create the list of simulation actions. We put these in* `( M, r6 g: J' d+ q) n& u
// an action group, because we want these actions to be/ u& E5 ]4 ~" y9 e9 {: S6 j
// executed in a specific order, but these steps should4 p" L8 z2 M; l' N7 h9 }8 P
// take no (simulated) time. The M(foo) means "The message
( \5 C& K7 W* G8 | // called <foo>". You can send a message To a particular
; i) L3 t2 X% ^, ` // object, or ForEach object in a collection.
r- i) G& k3 D e1 X( E # n' s6 c% b; }. ]
// Note we update the heatspace in two phases: first run$ {; z! f/ A9 S5 o: @* C
// diffusion, then run "updateWorld" to actually enact the' e% J4 `9 I3 Q8 ~2 z
// changes the heatbugs have made. The ordering here is8 u$ B3 {8 I8 Y: Q9 p- G2 b
// significant!
+ F' r, C) U$ E& s$ m
- P" c, G, Z6 I1 {) z // Note also, that with the additional
, E. W4 } t. B$ C* Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 G* z b4 v$ u6 a8 Y // randomize the order in which the bugs actually run) R g+ y, p( i1 J
// their step rule. This has the effect of removing any
8 g; q9 Z" Y+ c0 a( [ // systematic bias in the iteration throught the heatbug6 f# G3 O4 j6 S2 e1 Q* t
// list from timestep to timestep
% D' ?; g6 E$ j
% y9 J9 W$ i* f& ~! s( k // By default, all `createActionForEach' modelActions have
2 q# A8 q: D$ X) r5 ]' Z# R // a default order of `Sequential', which means that the, r7 t7 }( G& \5 I8 p$ a5 `% `4 `; ^
// order of iteration through the `heatbugList' will be
. _4 ?7 |' u" p2 X // identical (assuming the list order is not changed8 [2 e9 C+ q Q( m2 K' ]( ]
// indirectly by some other process).: ~7 Z1 ?. w5 k9 _
- L: G- P4 x4 k; }: W. P
modelActions = new ActionGroupImpl (getZone ());8 n2 O8 p# Z4 }. G: ]) j
b9 A) \* A+ J; D8 @# @- q3 W7 f2 g try {
9 L" ?, G0 C) S7 l modelActions.createActionTo$message6 I9 X9 B. z9 p6 D
(heat, new Selector (heat.getClass (), "stepRule", false));
8 B0 o8 {+ {3 X( e% x. P$ P/ W } catch (Exception e) {; [3 j2 ~- A) z: J
System.err.println ("Exception stepRule: " + e.getMessage ());6 ~$ D0 u: {9 N) j( g
}
7 ?" T8 [2 `! Y/ o9 Q) V" U+ k& V+ L
try {4 r* W* X+ s0 E; n, ^: S3 x0 y6 n
Heatbug proto = (Heatbug) heatbugList.get (0);
9 J" k: S* v' A+ ?) J Selector sel = [5 e+ O; v/ c) g1 G1 d% `
new Selector (proto.getClass (), "heatbugStep", false);1 B. ~7 c `9 C% Y+ c
actionForEach =2 Z0 l2 @! \4 Q" o" [/ H
modelActions.createFActionForEachHomogeneous$call! [7 s9 W& R: j
(heatbugList,$ D/ R' ^& q) n. O1 n
new FCallImpl (this, proto, sel,- b, l5 T" y0 Y/ a
new FArgumentsImpl (this, sel)));
, {1 r8 ~) m% T% P T } catch (Exception e) {7 Z/ H! e& A$ |7 w' ^% u" ]
e.printStackTrace (System.err);0 i. J @$ M+ o+ c8 E. V/ o
}" e$ ?, R- ]5 k' Z: L
, l- D3 W6 T6 K6 I% S
syncUpdateOrder ();0 c" U+ t9 P0 ?/ B' t- G% V
5 N" `$ j6 ~+ v, z1 j3 S try {
8 w" y) X: t( t' a2 ~ modelActions.createActionTo$message
3 T) x( Z& G% f3 k I, D (heat, new Selector (heat.getClass (), "updateLattice", false));
7 r- V, G6 G0 A } catch (Exception e) {
# c+ j$ L7 Z0 J/ C( A System.err.println("Exception updateLattice: " + e.getMessage ());- |; s! `5 Q! T* M
}
: B# W: ]1 F. X8 G+ @
2 N6 |7 M) C2 B q // Then we create a schedule that executes the
4 W& t1 |% Z" b1 r; B1 @( p* @ // modelActions. modelActions is an ActionGroup, by itself it P7 ^3 E7 m; S- r; t
// has no notion of time. In order to have it executed in* H; p' Z+ a m/ y* L) q5 ^
// time, we create a Schedule that says to use the5 M* m1 b! q( F( D4 ]( V1 }
// modelActions ActionGroup at particular times. This+ z0 c4 l* F7 F: _4 ]. b7 u
// schedule has a repeat interval of 1, it will loop every& N& d; V( n8 O4 l- }
// time step. The action is executed at time 0 relative to
9 _# u: }# j1 P5 L; ]" m" }' b // the beginning of the loop.( X, A" z! z% e- x) z( A
& E* c* X# S: i2 |8 i7 Z3 D$ G2 L // This is a simple schedule, with only one action that is
+ L& v* t, Z. A' c+ d5 q // just repeated every time. See jmousetrap for more
{, z' g( m: @4 u. t9 `2 T/ M // complicated schedules.
: I+ W3 b; O* N, n$ e7 u
4 J4 A1 t: b7 l U1 ?2 O$ R modelSchedule = new ScheduleImpl (getZone (), 1);5 r0 H$ d) h, h( a1 V n
modelSchedule.at$createAction (0, modelActions);
$ L2 h" j0 c/ a! M) @ % y6 t' V' \8 v& G+ O$ \
return this;! [" }' \0 P" |; O- ^
} |