HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' A R4 E- c5 m& f9 R, C% I
! h3 d7 t" ? L1 u& U public Object buildActions () {- |. i" q/ I6 L* D R1 W
super.buildActions();
1 Z, j2 ^5 U7 m) b' K0 K
- S" d8 i- g$ l1 d // Create the list of simulation actions. We put these in1 T0 n$ Q: V/ R, Q8 h5 @
// an action group, because we want these actions to be2 s* x' d8 T- Y r
// executed in a specific order, but these steps should: [6 Y. ^( Y8 u- T1 S% `' o
// take no (simulated) time. The M(foo) means "The message
7 i. X* V- p) H! n. } // called <foo>". You can send a message To a particular. M) c, @* _) r H
// object, or ForEach object in a collection.2 g( ?0 p9 G, p# T/ q
( x8 `% B: D3 K# ~& Y1 L" O
// Note we update the heatspace in two phases: first run
2 }0 L1 j4 `( w" M: p. E1 p0 G // diffusion, then run "updateWorld" to actually enact the; |: l' P" m3 u V1 K3 }/ P
// changes the heatbugs have made. The ordering here is
9 n: U# x; H9 K7 K+ H3 |: F // significant!5 _" {2 K4 i+ n$ d* \
9 \' x4 H# K( W3 Q+ P
// Note also, that with the additional
9 {0 V, \0 P/ V" P! A3 D' C. @+ R // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 P' a1 t& B! e- s H( [/ x. e // randomize the order in which the bugs actually run) N2 y0 g7 ~" y$ J1 h# _2 N3 d
// their step rule. This has the effect of removing any
0 ~8 |! W1 v+ U: K+ X0 X% b // systematic bias in the iteration throught the heatbug: Y* J' ^' l4 b
// list from timestep to timestep* B \# v8 Z: ^6 x" }% _
# J/ Q0 r( ? {. g* t
// By default, all `createActionForEach' modelActions have3 p' {/ {3 U9 q: d# h
// a default order of `Sequential', which means that the
" f- C/ H9 S* K; T" ]* y3 `% L5 m // order of iteration through the `heatbugList' will be% @) g) C* r) S/ `" z" _, e k
// identical (assuming the list order is not changed
$ f9 e4 y8 O6 P" @3 G: I R // indirectly by some other process).2 Q1 L0 ?9 `- y* ] e# E' `. W
, ~& G1 p9 @9 R" s9 H" s9 I3 J( k7 i
modelActions = new ActionGroupImpl (getZone ());. T) G+ `& t0 q# T8 |
" o7 w8 n# Y4 f# b
try {
7 w# z/ P( A$ t/ m2 h modelActions.createActionTo$message( D# M0 x! T7 k- r, h
(heat, new Selector (heat.getClass (), "stepRule", false));
7 ~9 R! V4 n) f- ^; n' ?4 @ } catch (Exception e) {) _$ k5 ]& {7 G( U4 y8 ^( X5 m( r" N# s
System.err.println ("Exception stepRule: " + e.getMessage ());8 |8 H7 q% V, b U9 r: p
}
# Y1 D, z: }0 t% @3 o. y; g
% h$ I7 V( f1 [) e1 r% c try { U; v3 I$ T$ ^6 u, M# @4 k& S
Heatbug proto = (Heatbug) heatbugList.get (0);
3 [+ n% n, y& U, A1 F% z1 { Selector sel = ) `, |6 |8 T& _( d& q
new Selector (proto.getClass (), "heatbugStep", false);
3 O' b4 a# y2 U6 A- k actionForEach =
) c) P: v$ w* y8 A modelActions.createFActionForEachHomogeneous$call
) t) c! v& x2 w! `( B4 H (heatbugList,0 E8 g1 r" S' e6 |" J7 O
new FCallImpl (this, proto, sel,
+ m5 \7 f* {( |7 J/ @9 k new FArgumentsImpl (this, sel)));
7 p8 i$ b% V$ Q( S' ^ } catch (Exception e) {
9 J, t) K9 g+ p3 { e.printStackTrace (System.err);: d- ^. U- g% D. H% k- V# |2 }
}
1 t& K3 `* i( m
1 F7 a; P4 F$ q1 d# o* ?8 k0 c syncUpdateOrder ();2 ^ F2 b1 `2 N3 @+ i
* p# |8 t5 K, {- T try {$ h+ O) f7 ^, ~ a2 e
modelActions.createActionTo$message 8 q9 o3 k5 \- |& ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
|* g# n- K2 z( c; z/ @0 Q } catch (Exception e) {8 o" l1 L. Q( U& Y* F |6 e
System.err.println("Exception updateLattice: " + e.getMessage ());
% g& i* j% V1 n' c% M }
3 A* c; A% x% w! N 3 p7 H$ A+ M- O# R6 e8 e+ N
// Then we create a schedule that executes the, N* D6 ?# }6 s- x, t% F" m+ x h/ T
// modelActions. modelActions is an ActionGroup, by itself it
) `# ?* k, m- |* Q. }" J7 G- G // has no notion of time. In order to have it executed in/ F' p v* D) l# x; I
// time, we create a Schedule that says to use the. A/ Z% q" {" r) A
// modelActions ActionGroup at particular times. This
4 z& ~8 Y0 p, y, s y // schedule has a repeat interval of 1, it will loop every
# R7 \% N- |3 }8 f3 E // time step. The action is executed at time 0 relative to
- w2 D1 B# M3 J // the beginning of the loop.( L8 n, u y$ E1 ~; e5 A
1 W8 v9 I8 d9 P5 j) h8 j
// This is a simple schedule, with only one action that is
" R. C9 `. O. v# C2 C: { // just repeated every time. See jmousetrap for more
1 S5 m0 D' H) T6 u // complicated schedules.
, O8 X: E: U4 ] R% d8 U # J% P- u2 C% P; X" P2 B
modelSchedule = new ScheduleImpl (getZone (), 1);- F1 `4 ~0 T9 ]) p
modelSchedule.at$createAction (0, modelActions);) S( N- O- ~) A
G% B- g/ w H; ]; Q& p* b return this;
( Y B; x" g' J7 Z. W' Q% E3 V% E } |