HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
M- x, j8 d* k0 P0 c. y( \3 }
7 R/ y! m R! M% N/ |, S6 B3 t$ j public Object buildActions () {
9 t* ^8 O0 b8 Z3 N, M super.buildActions();
3 m- Y* }8 A" u: z6 Q9 E
7 e. V7 u% b0 Y% | _, S. { // Create the list of simulation actions. We put these in/ P9 w! I8 I4 D0 C& ]; p
// an action group, because we want these actions to be. f( q. r/ s8 b) {' z& A9 Y' T+ K
// executed in a specific order, but these steps should
& v6 G/ m! c+ M3 D7 c // take no (simulated) time. The M(foo) means "The message9 D* H6 z( H6 N \3 S$ [/ }* _9 m' s9 ^
// called <foo>". You can send a message To a particular
3 f. i0 _! e% G' N: ^7 s( j // object, or ForEach object in a collection.
1 p" @4 f3 h" f# A* R" S
5 @3 i* W+ g- ~! _4 v/ s // Note we update the heatspace in two phases: first run$ Z6 n/ e: T9 D6 y9 q% P( a
// diffusion, then run "updateWorld" to actually enact the
, z, u! n. o& O. @9 u5 z // changes the heatbugs have made. The ordering here is% {) j7 O4 W5 I1 s; P
// significant!
, C+ r4 u; m+ c 0 N2 g9 @9 V! a+ m) b
// Note also, that with the additional
+ k6 u6 D5 G6 o E( ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can o/ B3 R* @/ c: N- h6 s& K0 f
// randomize the order in which the bugs actually run
; r, K+ j; R! G // their step rule. This has the effect of removing any
" v$ K8 y. |$ [0 g // systematic bias in the iteration throught the heatbug
9 U" \$ t- J2 q1 r" P; b0 } // list from timestep to timestep
( G; N" U2 @0 ` h+ y
0 ~7 M7 L' ^ d+ J# ] // By default, all `createActionForEach' modelActions have
6 Z! E7 E/ i4 x- }& L // a default order of `Sequential', which means that the0 w: _/ P. B! H. n
// order of iteration through the `heatbugList' will be: d6 P# Y! ^2 y) ^: C* y5 I
// identical (assuming the list order is not changed0 P3 }6 l# a% f3 \5 V
// indirectly by some other process).5 G' m" P2 _ J6 {$ \2 ]2 O
; B r N" R3 W, _: Y
modelActions = new ActionGroupImpl (getZone ());# u+ g4 o8 C5 M* J) y1 C' Q. G$ q+ N
% n" q- i! ~: k; K' I* X& s6 j try {% o5 e$ D& l% x" ~; v) Y t# ^
modelActions.createActionTo$message$ g2 W9 a$ o* e- _
(heat, new Selector (heat.getClass (), "stepRule", false));: Z4 N2 k9 E& e- C) M$ I
} catch (Exception e) {8 \1 O& r k+ f3 B# \
System.err.println ("Exception stepRule: " + e.getMessage ());6 A$ v6 B6 A1 N0 R }/ x+ l
}9 A1 c7 U/ t) e6 I4 `, R2 Y. k( G
- ^" f& {1 `( c' A) |( ?$ K% { try {
" T8 V8 Y i. h; Z8 G Heatbug proto = (Heatbug) heatbugList.get (0);3 N1 }) Z; j' h3 i! z) @4 F
Selector sel =
2 ^. o, A' U1 | new Selector (proto.getClass (), "heatbugStep", false);
& u% G, y" i3 Z4 r. k- q$ j actionForEach =( J% ~+ o- v: m
modelActions.createFActionForEachHomogeneous$call
2 S2 S7 ^2 D" a/ ^8 E( s, R (heatbugList,
0 @* w3 z2 @7 B+ b7 w j5 K new FCallImpl (this, proto, sel,$ V: u+ S6 |8 A2 _ A' w q
new FArgumentsImpl (this, sel)));
2 C1 u5 R4 ~& `- I3 ] } catch (Exception e) {
; f& f7 O4 ]: b" k; ^7 }! k e.printStackTrace (System.err);2 S7 E( H7 o+ H" h, i
}
% _+ K' W2 g. |$ L 4 `: @; {" f8 N1 D
syncUpdateOrder ();8 y9 Q, g7 c D7 ?4 G
4 y$ l( k3 H }" a$ M& h try {
- E4 g! `- y0 d1 @8 x! I modelActions.createActionTo$message 4 F& H, ^- B" {4 ?. N& I) H1 F( k
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 R' @ U1 V- C } catch (Exception e) { ]4 J3 a( Y8 q- G' g( l5 ~
System.err.println("Exception updateLattice: " + e.getMessage ());
! `9 q4 b1 a5 @ }
$ a% Q" t2 M; |: a! L$ h- B6 r
) @5 \0 C/ _4 D7 N+ _7 v* s // Then we create a schedule that executes the
2 ^- o3 z' E" I$ r0 w5 Y* @ // modelActions. modelActions is an ActionGroup, by itself it" c$ c% Q8 f" g- P; S
// has no notion of time. In order to have it executed in
% E+ V d" w/ y+ P1 w // time, we create a Schedule that says to use the' B: j( d) U; V) w5 W; g
// modelActions ActionGroup at particular times. This# z+ m& g/ h) r& U* A S( P- Y# Z
// schedule has a repeat interval of 1, it will loop every
! T4 n4 f* i0 N+ O* _ // time step. The action is executed at time 0 relative to
2 Q7 b9 u3 ?0 u' S // the beginning of the loop.) g1 y+ s3 `6 D
! {( F- e4 L8 D, D: r
// This is a simple schedule, with only one action that is% i6 ? c! w- j5 Y1 l, L6 `3 X7 y
// just repeated every time. See jmousetrap for more H3 {2 g- z0 z' t
// complicated schedules.
8 ?+ I9 M, z3 ?, e4 s
; N0 H' }9 d: [; W0 \" I. V0 H" } modelSchedule = new ScheduleImpl (getZone (), 1); K) V) G) J+ D
modelSchedule.at$createAction (0, modelActions);0 j5 k; O4 l! u9 P7 o7 w) Y
( e- t- k" y3 L- ?+ r% V& a" `9 N
return this;
# O9 _( N4 c) M$ c4 O2 d } |