HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 `9 a- J5 \" g/ P3 U0 s8 h! O- H, ?" l
public Object buildActions () {, d7 @% _* k& L2 c6 |* Q5 j8 o! W% e
super.buildActions();1 ~8 }2 B: T0 M2 Z7 A5 k! E
A# u! V* j9 k$ K4 m
// Create the list of simulation actions. We put these in _; ^' d! h% N9 `. v" B* ~
// an action group, because we want these actions to be
' ]3 ]0 g1 L- G# w; D1 L7 B4 C6 [, @ // executed in a specific order, but these steps should
; ^" E! j/ z& ?" D // take no (simulated) time. The M(foo) means "The message
6 N+ N. q: x g/ `% R$ Y* J# F // called <foo>". You can send a message To a particular5 I3 t' z; `3 _" c: b) j( K1 O
// object, or ForEach object in a collection./ e" |( e; ?7 {3 q g1 U! p" Q
% i$ S2 m" ~. L. U3 G2 y
// Note we update the heatspace in two phases: first run2 A8 B% A$ w7 M2 m
// diffusion, then run "updateWorld" to actually enact the/ H1 Z3 P7 N G1 q. h" `
// changes the heatbugs have made. The ordering here is; ` H; e" v2 O W5 u# d
// significant!6 A: C! N5 I) S; ^9 H, Q
3 j6 c0 B) B( r' n. R; K3 m% z! b
// Note also, that with the additional. x; t7 B) D& p2 l
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 {; q' F& y; |
// randomize the order in which the bugs actually run
3 _% u1 \3 k2 h2 J3 v- R // their step rule. This has the effect of removing any0 e% ]7 J9 C3 }0 g0 Y5 w, A* N4 h5 j
// systematic bias in the iteration throught the heatbug
; [% D# ]3 q3 Q' x! ^- H( D k% T // list from timestep to timestep
" M9 t; ]* z/ O( |; }
! f5 a" D' k; k. T // By default, all `createActionForEach' modelActions have' R( l& n* t9 r( Y1 d
// a default order of `Sequential', which means that the
( x. G; ^7 B5 r4 c" ]4 w4 t$ d/ c // order of iteration through the `heatbugList' will be
9 Z4 v' v8 e/ C! X _7 a // identical (assuming the list order is not changed" t/ M" L7 v$ _- u/ e! Z
// indirectly by some other process)." ~6 ]1 i# ?. |5 c2 ^8 {
9 h4 o) ~- v7 B, w& g modelActions = new ActionGroupImpl (getZone ());. E/ V% x; m: G
6 s2 ]; P; }3 R try {' s# C+ [! q1 U
modelActions.createActionTo$message
+ m) {0 _9 T; E (heat, new Selector (heat.getClass (), "stepRule", false));1 E+ Z; {# L$ z) d( l" ~, P
} catch (Exception e) {
( t7 G7 U) E/ S, ^0 O8 | System.err.println ("Exception stepRule: " + e.getMessage ());
$ Y9 o- a" `: x" c }
! z1 i1 w H _3 ~. C, l; x% ]' i* P# C& S0 d( _# d
try {- C e* ]5 ^& I# V3 i6 L3 Z
Heatbug proto = (Heatbug) heatbugList.get (0);! a! s5 P0 U: ]' {! p2 q& }
Selector sel = 8 h) ~$ G6 c% X. ]' t0 X
new Selector (proto.getClass (), "heatbugStep", false);
7 M; b" ?8 L( j# _5 X3 X* c actionForEach =; ?. |8 J% a9 K( C3 j) P2 l2 u
modelActions.createFActionForEachHomogeneous$call
1 R& b& L. T# ` (heatbugList,
3 K0 b- g$ }! } new FCallImpl (this, proto, sel,
+ t/ v7 o" j, {1 ]; s new FArgumentsImpl (this, sel)));
8 f3 L; n4 b$ `: K, Q- t. n } catch (Exception e) {
8 T6 T1 N5 I; N/ m' g" ~. r" ` e.printStackTrace (System.err);
; T8 _/ L) h5 G A }
$ N+ b' U5 T9 T" g9 R6 \% X+ z 0 e4 F) X& d0 O
syncUpdateOrder ();
7 J7 q$ i$ \3 x' n
; D; U+ {" Y& x1 t5 T7 [2 U try {
8 Q. F+ t3 K' l5 z- h modelActions.createActionTo$message
9 h4 R9 g4 |4 A. A# H V) v$ h( y (heat, new Selector (heat.getClass (), "updateLattice", false));
* X$ d' l! \: g7 w } catch (Exception e) {
1 [8 Y9 q) z6 V: e7 ?- B9 D+ H System.err.println("Exception updateLattice: " + e.getMessage ());
7 ~: t f1 j. S9 U& U K; `( R }6 R( O/ C n% x# C7 K: D' n
6 V8 A$ H) d. J9 K( L
// Then we create a schedule that executes the1 B. N4 I& ]# w! H3 b$ O2 c
// modelActions. modelActions is an ActionGroup, by itself it- s3 p) o' g/ ^7 S
// has no notion of time. In order to have it executed in
' V5 z' Z1 x$ k) W // time, we create a Schedule that says to use the/ p: k" P' ]$ F7 c+ g1 K4 d
// modelActions ActionGroup at particular times. This( }. `' }3 D9 B5 T4 Q( [- v$ e, c1 f
// schedule has a repeat interval of 1, it will loop every
2 Q1 R! a6 f6 z( U) w0 z9 u; { // time step. The action is executed at time 0 relative to
- j) I2 { a% ?4 u& G // the beginning of the loop.
& r7 a$ I. _9 q6 {: n
8 X" I4 F5 [8 b( N# V ^ // This is a simple schedule, with only one action that is+ S, h, t7 d5 ] G" A- ?) S3 H
// just repeated every time. See jmousetrap for more
# O( L, Q! a/ ?. K/ V // complicated schedules.
/ W' a. _& g6 V' I$ O/ P6 o9 T
; {2 z% S$ r& ~7 ]" M modelSchedule = new ScheduleImpl (getZone (), 1);# C/ m+ J0 M2 K
modelSchedule.at$createAction (0, modelActions);
) ~2 |0 A& }+ c* Z4 B( _
* x, H' I v. u4 [* V" d return this;
( p' g ^8 t7 C0 F" S/ W } |