HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 L% z6 Y1 j( u: A8 Q7 S
1 u( T7 x7 i) _( i public Object buildActions () {: T! y6 _( H( Q" e; M( Y. |
super.buildActions();& j0 H( b/ s; N7 e" ^; k
) j/ |5 x% G& s: G, p( I, V // Create the list of simulation actions. We put these in1 H; j; S* m1 W
// an action group, because we want these actions to be2 B4 a- B1 R; z$ N4 p
// executed in a specific order, but these steps should0 B. {/ ]- V) j( J+ A* ~& g" R
// take no (simulated) time. The M(foo) means "The message- C3 A0 F, [! }
// called <foo>". You can send a message To a particular: ? y. r3 b1 Q8 v) L
// object, or ForEach object in a collection.4 S- x% j1 q+ |; Y
% d( s3 V0 R- c G
// Note we update the heatspace in two phases: first run) o) w1 j( h1 p8 u! G% J. ^% A9 g
// diffusion, then run "updateWorld" to actually enact the
2 [- T& `$ [; J) m // changes the heatbugs have made. The ordering here is, g2 O* G! [9 @
// significant!
4 K* R2 k2 U* q# V
2 Z: o0 H3 j6 P* c // Note also, that with the additional
& C- ~2 H1 R: y. j/ _* ~5 S% a // `randomizeHeatbugUpdateOrder' Boolean flag we can
- c! m& b3 V6 v+ J7 b // randomize the order in which the bugs actually run2 N) X& Y# P2 V; d+ R
// their step rule. This has the effect of removing any/ F! |* Q' b5 w# A
// systematic bias in the iteration throught the heatbug
2 C9 K1 |" z/ C2 _ // list from timestep to timestep/ |4 \" l$ V* t. W5 I
3 N3 u: J% P- A1 ~
// By default, all `createActionForEach' modelActions have% m& w: ]' n, G! K# A. J7 ^
// a default order of `Sequential', which means that the' N% v! p( C6 y$ O* F# a% w
// order of iteration through the `heatbugList' will be
- P: W9 A7 }8 p/ f* H3 G# o0 P* n7 j // identical (assuming the list order is not changed
! Q3 e" v! ^" Y4 c2 U // indirectly by some other process).; q0 N# p7 @5 M; _
( H" O% Q0 K6 }9 g3 A# s: T
modelActions = new ActionGroupImpl (getZone ());6 ? I9 X! D7 F `# a8 l5 H; s& J
9 N, K- n0 W0 ~ try {9 D) I5 Q+ B* {# O
modelActions.createActionTo$message5 f7 \# i; i& F, ?* K
(heat, new Selector (heat.getClass (), "stepRule", false));7 G( u) ^2 ~0 |3 ~; B, k
} catch (Exception e) {
! _' w- O+ v" o2 B; W9 ^& U System.err.println ("Exception stepRule: " + e.getMessage ());
) e4 h1 @$ ?6 n4 h J5 d) ? }
5 }$ _9 ^' G5 L8 ~8 G# M' l. G5 f u" j; f8 M
try {3 m0 u* e: p E" [2 w" ^2 |# ^
Heatbug proto = (Heatbug) heatbugList.get (0);' v c9 W" S' j) @+ [
Selector sel =
. u% K# l* G8 K9 v' M new Selector (proto.getClass (), "heatbugStep", false);
( C. h* `. ~8 ? D& q9 ?* `) m actionForEach =/ X* c) o J0 E. w, j% R: F; Q
modelActions.createFActionForEachHomogeneous$call1 j/ o, J7 n% k% P/ g
(heatbugList,( f3 \) k6 v, R$ x& D
new FCallImpl (this, proto, sel,
3 h4 d% j. e- Z1 T. {2 V" Q new FArgumentsImpl (this, sel)));
4 r+ d0 i9 o) A } catch (Exception e) {& H3 k! j M) p2 r4 `1 ]
e.printStackTrace (System.err);
% A# d( @. v ~+ O) F% ~9 b }
6 ~0 A2 D2 V7 H: j/ k* ^, W; L; ?
, n7 H$ J( b" O- b* X* e syncUpdateOrder ();1 K* k+ |( @/ x% l4 C
* A$ ~0 |8 s6 M. t
try {
7 @$ _+ a, A2 x' V, _ modelActions.createActionTo$message & n+ c, Z( H* ]; b U1 R; }3 B1 A
(heat, new Selector (heat.getClass (), "updateLattice", false));/ \9 r8 ^ ], R- l3 p
} catch (Exception e) {& S! g }4 ?! R6 b% o' P
System.err.println("Exception updateLattice: " + e.getMessage ());
; w2 k( a1 Q8 T8 j( h2 c }
5 e T9 q x; `) F( u 9 T& q, M4 q$ v8 N6 a) E
// Then we create a schedule that executes the
/ \6 ^1 o; a/ n. a4 w8 `. l // modelActions. modelActions is an ActionGroup, by itself it/ v9 T4 F" w( l4 z- z) g
// has no notion of time. In order to have it executed in: a: e1 _: W3 I+ e$ M
// time, we create a Schedule that says to use the
& z+ t% } O. N9 W% K: H // modelActions ActionGroup at particular times. This @3 i! R1 ^+ Z [# ^ S
// schedule has a repeat interval of 1, it will loop every
4 E6 f. p N2 l // time step. The action is executed at time 0 relative to
( ~* W2 \& u& l Y# {4 f // the beginning of the loop.2 o. I" W) b0 h3 }" Y
2 m5 [6 B, o6 K; q4 M0 c
// This is a simple schedule, with only one action that is6 |6 `3 q, X$ G$ ^
// just repeated every time. See jmousetrap for more
2 H0 @* H3 q# Y // complicated schedules.- Y$ S6 s# ]: c- F; H5 }
* ]) A$ {) [8 M m0 @9 \2 J
modelSchedule = new ScheduleImpl (getZone (), 1);9 ~) ^: H2 C0 w3 @, @' O$ ^' N
modelSchedule.at$createAction (0, modelActions);
6 ^( U9 l, \% l + Q6 v& o$ W& t
return this;
4 Q) p) y8 Z. k1 K } |