HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 p$ O7 N/ e+ g) M e$ D, x F
1 p+ q6 |4 Y6 R% R4 _9 Y! T public Object buildActions () {
7 V5 O o [" @) P( Y) r; {" Q super.buildActions();* G+ m; l) ], i/ c8 \* T
2 B- C" E% o) ^
// Create the list of simulation actions. We put these in# m8 K% P; M/ j2 I: N
// an action group, because we want these actions to be
2 P$ { q' ~2 M9 a# D6 X // executed in a specific order, but these steps should- f, N9 Q+ T/ s& B
// take no (simulated) time. The M(foo) means "The message' D4 j+ X; I! v$ y9 u! S$ Z
// called <foo>". You can send a message To a particular
( \8 I: w+ y7 B // object, or ForEach object in a collection.
# m. W; m, S9 g s3 _. H- x5 S% j; f* b ' F5 r8 Y3 T* Z6 C& W/ K. q
// Note we update the heatspace in two phases: first run
& e* M/ K! q) w, \$ G3 [ // diffusion, then run "updateWorld" to actually enact the9 g5 Z$ |. W* U0 {
// changes the heatbugs have made. The ordering here is
9 m* i& v# D! s' s+ U! z // significant!
; J# j6 X0 C7 u# L
* w3 U, I3 }! P // Note also, that with the additional
0 o. y* Y9 I% e) S // `randomizeHeatbugUpdateOrder' Boolean flag we can8 C0 z( N$ z/ K
// randomize the order in which the bugs actually run
3 ~- \+ d4 V# U // their step rule. This has the effect of removing any
8 ?$ ?. ?3 E m8 |/ d& Z1 N // systematic bias in the iteration throught the heatbug. s- r- P* l V1 i; e
// list from timestep to timestep
1 s& F9 v& L+ y8 q * a/ Y/ u+ B- c5 n$ y* l
// By default, all `createActionForEach' modelActions have
9 @6 L+ E2 H# s1 Q6 o. Y // a default order of `Sequential', which means that the1 w; W. F7 ?* u, j3 \$ r# F
// order of iteration through the `heatbugList' will be
5 v# x* ^- |$ ^ // identical (assuming the list order is not changed
. F( d# g( V% b! y. a$ f // indirectly by some other process).7 ^0 p' K, x& G" {4 ^5 T
2 V# V# w% y Z) Y3 O" Z( k$ Z( S. j
modelActions = new ActionGroupImpl (getZone ());
$ o, L7 B9 q* H# l. Z
* x$ @" o9 `/ K" o; K( t1 C try {
7 n4 F$ c( \% {4 L) N7 `2 N) W modelActions.createActionTo$message
; H* W! z, Y3 H: u (heat, new Selector (heat.getClass (), "stepRule", false)); | z: ^' O Z0 }8 Y& |) h/ o
} catch (Exception e) {
2 l/ I8 W+ X- c4 g, e6 Z' ?0 \ System.err.println ("Exception stepRule: " + e.getMessage ());! Z6 y3 i$ N$ j' I/ B' V, ~
}8 { ~ n, }: M& T
+ M0 B% J8 m! t: R. K1 o try {- _& b4 M1 d' |3 Q
Heatbug proto = (Heatbug) heatbugList.get (0);8 `3 f9 ?) E$ i" m! V8 A
Selector sel = # g1 a! a% ~: x% t' ?# D
new Selector (proto.getClass (), "heatbugStep", false);
9 _- H: w/ ^4 U/ M* Q actionForEach =
. e: E& S+ w4 J) k( ^; F1 s" z modelActions.createFActionForEachHomogeneous$call
' Q8 c# A! S& r7 u, j (heatbugList,$ B' H. B# E; t2 A5 q
new FCallImpl (this, proto, sel,
$ n, x/ w2 b [9 z4 y% f1 B( X new FArgumentsImpl (this, sel)));7 b1 k5 H6 ?5 S4 I* |( _. @
} catch (Exception e) {
. l) u D7 s+ A( a1 P. K, E e.printStackTrace (System.err);% e2 M0 V8 I, q: j- \
}
$ `3 H+ k$ R3 \' o3 Y 9 p0 K* B( E2 ?7 @ U
syncUpdateOrder ();
( S8 W; w4 I$ Y" T, b5 d' z& x+ z! ?) V; ]6 z* V c- f
try {
( w" l) E* N* B U* ]' ]# c modelActions.createActionTo$message
1 E, l# o3 ^4 O, ?& f' e (heat, new Selector (heat.getClass (), "updateLattice", false));
' g l# Z. o5 b9 Q7 Y, S c } catch (Exception e) {
; _3 l! c) L! R: c# A* ?) k- V2 t System.err.println("Exception updateLattice: " + e.getMessage ());3 o. J: g4 t6 f. }' `. z ]1 R
}0 l2 d$ A X, \1 Y
1 Y! g; j; U% V1 ?) n
// Then we create a schedule that executes the7 A; o- c; U+ U9 o# B
// modelActions. modelActions is an ActionGroup, by itself it! \# ~7 g) P) W. @! ~- y Z, }
// has no notion of time. In order to have it executed in
C% S/ `6 i$ k4 q0 }( Q2 E* S // time, we create a Schedule that says to use the
+ i3 r: X2 L" d% Q& ]( A // modelActions ActionGroup at particular times. This
4 H/ V" `% V- h& c7 p7 W- P# d s // schedule has a repeat interval of 1, it will loop every1 q- Z* y" C7 B& s
// time step. The action is executed at time 0 relative to& _/ ?& \* h Y3 M6 [) A& _- L7 c
// the beginning of the loop.
2 o$ b. Y. R) D0 v( s# u& B9 T1 X- H8 _) |
// This is a simple schedule, with only one action that is/ U0 e& k3 b+ s1 G+ A
// just repeated every time. See jmousetrap for more
5 U. w7 v, z. ^/ a- t- I! { // complicated schedules.
7 C9 \; U* g* e: m; [& {( V 5 {$ C2 N, ~) G
modelSchedule = new ScheduleImpl (getZone (), 1);
. G; h, B1 q; A& m3 x2 @, D, @1 A# T modelSchedule.at$createAction (0, modelActions);% L* q8 O! h( p
. S& k5 j5 ]: t6 B. k* A return this;% w Y# t% f& J: \' [: q) M
} |