HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. L$ _. I+ s& f& e
t$ {1 Y2 D# B/ b4 A- }
public Object buildActions () {
8 i' M( t: S- `. A/ Z; v+ i; k- D super.buildActions();
+ z$ \2 {5 W. R, J6 w - |; ], B9 P2 ~ o0 `1 C* c& x- {
// Create the list of simulation actions. We put these in
2 v8 r* q; t3 }7 X7 p% _, C // an action group, because we want these actions to be* }6 u B9 T3 |& v3 z. k9 Q
// executed in a specific order, but these steps should
' t0 r% j* Y& ~2 E- f. a // take no (simulated) time. The M(foo) means "The message
+ M/ \6 ^6 ?2 L p2 O, P. `2 X/ r // called <foo>". You can send a message To a particular
5 Y8 z+ w0 Z) s$ g; S% j, Y f* n. V // object, or ForEach object in a collection.1 _1 X+ h7 q' \
) S' s4 L7 n% P7 t$ S9 A; u // Note we update the heatspace in two phases: first run
1 ~' G" n# w% K/ x // diffusion, then run "updateWorld" to actually enact the. i& w h- Q3 u( ^: C
// changes the heatbugs have made. The ordering here is' T- z k" m: S
// significant!! C: s$ U7 ~0 p; j6 W
% Q1 e$ K7 l9 O' S6 L; ` // Note also, that with the additional/ @, ^; c; L4 i0 W- x9 D6 }
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: t- T# Q( |3 u% y // randomize the order in which the bugs actually run( P) D! q; I a9 W! d
// their step rule. This has the effect of removing any- A' l( N( K E3 Q) ^
// systematic bias in the iteration throught the heatbug
+ W% j" H8 _% I* y% G' G // list from timestep to timestep
2 @' i) S3 @+ ^- r3 |
$ ]2 F% w8 e* b/ |0 G$ v1 T' b. m // By default, all `createActionForEach' modelActions have
: W0 P+ X6 J6 b( N& `% v' D // a default order of `Sequential', which means that the' a9 m; I q- v8 d" A* w _
// order of iteration through the `heatbugList' will be! i; B! q# x9 t) s; Q X2 o
// identical (assuming the list order is not changed
! ]9 [; _9 z9 R! z* F+ n // indirectly by some other process).
+ R; l" P6 {. v ( z, u! J" x8 t- v7 v" j
modelActions = new ActionGroupImpl (getZone ());
4 z/ [" d# w8 X4 j8 K+ w: n2 e; z% X% Z R; f E# U+ @# Z" F5 H
try {( B) C! U7 c, b: ? ^, N m
modelActions.createActionTo$message
* N, m" P1 U7 V2 J2 W (heat, new Selector (heat.getClass (), "stepRule", false));
2 j- k: B' o+ B5 j7 U } catch (Exception e) {3 B& x+ X8 `% G& G4 i2 `
System.err.println ("Exception stepRule: " + e.getMessage ());8 ~6 S) |7 d7 l1 L
}
# O3 [5 |% @9 E. {" i/ E- N; p4 I. d; T9 n8 N6 y
try {. B8 q E1 `6 E% g
Heatbug proto = (Heatbug) heatbugList.get (0);" I3 R2 f- m8 ]2 O$ u
Selector sel = " n* J ~8 q$ i# i$ K/ n" C
new Selector (proto.getClass (), "heatbugStep", false);+ b+ T. f4 [. O$ }, i" W
actionForEach =9 \9 h& Z5 p' [# d/ d* u
modelActions.createFActionForEachHomogeneous$call
' e; A, w& @1 } (heatbugList,) G1 I8 T0 P2 M& l
new FCallImpl (this, proto, sel,0 H& h( @' g% x6 Q% y
new FArgumentsImpl (this, sel)));& ~9 C4 C5 e1 k6 I
} catch (Exception e) {8 `7 A2 h* n8 n7 T! F
e.printStackTrace (System.err);
/ E% h9 B. \4 C6 m9 S }
& m2 U% E4 Z+ v" r! e+ t
6 x$ I6 V8 m+ }# s: |1 k5 h syncUpdateOrder ();
6 E- l. J% n! R& C8 c: g$ x/ n8 |" r+ t2 k3 ~6 n' Z
try {. E7 T" h: q, e2 h
modelActions.createActionTo$message
5 |5 i \) Q, h$ @0 x7 D% f (heat, new Selector (heat.getClass (), "updateLattice", false));
c- d8 {. N7 R5 a } catch (Exception e) {, k$ G; L5 l% h3 `) E$ f
System.err.println("Exception updateLattice: " + e.getMessage ());
u/ l3 J! ]# x/ V l) t }
) j+ Z$ k" D! [ v" J0 k
; Y1 V: U; i. c) v2 { // Then we create a schedule that executes the3 ]7 P# y6 }1 ~! @/ a1 e: s) S. s
// modelActions. modelActions is an ActionGroup, by itself it
! \$ F; \1 ~' \# [8 J. ? // has no notion of time. In order to have it executed in
! C! Z( i5 M2 X0 x6 A! v8 J9 n: R // time, we create a Schedule that says to use the$ t6 A2 p* m4 o+ O) Z4 [1 a
// modelActions ActionGroup at particular times. This5 N9 G9 j- O, G* T7 v
// schedule has a repeat interval of 1, it will loop every: t% z+ x# q/ [8 K% G S. C- _4 @+ U
// time step. The action is executed at time 0 relative to
, V% E4 e' ]" {& P // the beginning of the loop.% ]- {' y* o& I8 \' s9 q1 V
! }7 ?1 R5 g2 \% ^2 ` // This is a simple schedule, with only one action that is% \! p* I1 E, \* U7 R$ _+ @
// just repeated every time. See jmousetrap for more! ?2 c( s; {! w* y6 _( i
// complicated schedules.
7 [' ?9 U% D4 T# s/ w3 z 2 q5 g" W" h- L G v2 E
modelSchedule = new ScheduleImpl (getZone (), 1);& X/ \7 x( P( R( @. d
modelSchedule.at$createAction (0, modelActions);, K: K ^1 M& \5 Z2 Q2 Q& |
0 ]; _# `- c& }* P
return this;4 a" B0 Y( i+ P6 {+ ?8 U# ~' a
} |