HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 ~1 B5 \! M* m- s2 ?6 {: ^
: ]' D6 O0 q; n0 j- c* \2 N) b$ y
public Object buildActions () {
3 X8 }* W* t) q6 x super.buildActions();
7 q* c/ A7 \ \: k0 Z+ W5 \ , Z7 X. h3 Z& U& l
// Create the list of simulation actions. We put these in( a( K( w+ z; m5 x& _- E2 z
// an action group, because we want these actions to be
B# L# d( }% r8 R2 }0 l; @+ Q7 J // executed in a specific order, but these steps should1 V+ \8 y, ^* V
// take no (simulated) time. The M(foo) means "The message
2 v& }. \8 d$ _9 b // called <foo>". You can send a message To a particular
, z4 _& o) G6 M. h! M5 v ` // object, or ForEach object in a collection.; m0 E4 D. C* R- ~
. b* d& ]6 O2 {% E! y/ P8 ^- D
// Note we update the heatspace in two phases: first run
+ X) b9 E/ W9 h1 H) r/ Z // diffusion, then run "updateWorld" to actually enact the
, C y; A/ ^* p* p // changes the heatbugs have made. The ordering here is
+ g( f5 L. `/ c9 o4 o: | // significant!7 d: c3 b: A6 `9 p
6 i+ w" g8 {: G) l. @7 S9 o // Note also, that with the additional
r8 ?. Y% E; @0 y) O% U! ` // `randomizeHeatbugUpdateOrder' Boolean flag we can: e9 H% T4 t8 a& u+ j9 I
// randomize the order in which the bugs actually run% d; x% r! m8 H0 |! s
// their step rule. This has the effect of removing any" `; F% S! h/ R9 I3 Q7 O$ z& D* k
// systematic bias in the iteration throught the heatbug8 D' k# [; `1 g$ |
// list from timestep to timestep3 ^% O: |& L P2 z# [" g
% {, ?" T; e: } W2 P
// By default, all `createActionForEach' modelActions have
& R4 j& ^" R7 ^$ {6 i6 K // a default order of `Sequential', which means that the
. e- {1 m' ?- Q+ } // order of iteration through the `heatbugList' will be/ o* i( Z# t n- G1 t5 o
// identical (assuming the list order is not changed
4 a- S0 x' n; H: F4 E Q4 \! I5 P // indirectly by some other process).8 a. n) z9 {9 T C3 |% c `+ p$ @
( @ V4 J( \# n- v2 I% @% _
modelActions = new ActionGroupImpl (getZone ());
6 s+ I) P4 B) _7 _: |) T
/ k& b4 Z2 \, q6 H! z* }1 x% A try {( X, [9 @& G4 K6 E3 k
modelActions.createActionTo$message( R% u7 |; `+ ^, x: ?- |; f
(heat, new Selector (heat.getClass (), "stepRule", false));9 f8 b' p7 O8 t
} catch (Exception e) {1 j1 b3 `5 K" m# |! [3 D
System.err.println ("Exception stepRule: " + e.getMessage ());5 h- T# e. E7 l- ?0 V. v
}6 m0 K& w* i: p% T' U0 @
% _& n9 }3 ~3 p9 v try {/ J8 \6 y0 P1 u9 I
Heatbug proto = (Heatbug) heatbugList.get (0);
3 U3 ?9 M6 d7 h( {# p Selector sel = 6 E% d3 u1 Q: V+ ^: c- w
new Selector (proto.getClass (), "heatbugStep", false);1 w# y; L$ K% t9 u
actionForEach =/ V9 d2 G9 f( k
modelActions.createFActionForEachHomogeneous$call
. b0 K. Y1 M0 {2 v (heatbugList,
3 E6 @2 m9 v# F- b0 }2 U8 T new FCallImpl (this, proto, sel,
' ~ m1 [& B; Z1 u: } new FArgumentsImpl (this, sel)));$ c2 E9 u @: I& _3 O8 y
} catch (Exception e) {! U- t& q1 d! c( `) `1 o
e.printStackTrace (System.err);
3 Z, e1 k7 y; f* C& J! b }1 c. h' f$ H; ]; s) W/ Z5 I
; Z; ~0 k' x! a* N6 j3 w
syncUpdateOrder ();5 X" N6 Z# C9 C% _
- f% N' D+ k% I% `
try {, i: e9 C, v# V- j2 X6 p: i4 o3 t
modelActions.createActionTo$message 6 A/ I, e2 W- k* E6 z, N
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 x4 I1 D: J7 w0 D& {0 V; z8 ~ } catch (Exception e) {
& g8 k) M% S( _: y1 W System.err.println("Exception updateLattice: " + e.getMessage ());; K. }- y4 y2 E# V: U* B- m9 N* _( t1 h
}8 n' g9 q5 o4 [: p" r% W
. r6 [# |& ^& U2 Y O
// Then we create a schedule that executes the% p6 ^2 J! v& l2 v1 p. O. ?" _
// modelActions. modelActions is an ActionGroup, by itself it
# q9 X8 p w1 D* v* ?$ I // has no notion of time. In order to have it executed in
% Z/ b! i2 [$ F9 t$ w% `6 _: B // time, we create a Schedule that says to use the. Z( \. r! H- {: n8 @; ?- z
// modelActions ActionGroup at particular times. This
& r2 j" ?5 k7 h // schedule has a repeat interval of 1, it will loop every
# E4 A5 j! [7 H3 L // time step. The action is executed at time 0 relative to
: a/ w% f; ?. o // the beginning of the loop.
4 x( r, S3 N( w: j+ M
% J/ r1 A3 l" z, S // This is a simple schedule, with only one action that is
/ V! W8 [, o s+ k m) j // just repeated every time. See jmousetrap for more; v* R E1 X' I: p% d7 u+ g# b. N
// complicated schedules.
8 t6 l( C: y' k# \; v
' E7 e' ]9 V% ]$ h/ D* R" k4 \ modelSchedule = new ScheduleImpl (getZone (), 1);3 N7 t8 i) f7 P" P
modelSchedule.at$createAction (0, modelActions);- J9 n$ h3 |3 i
$ n/ K0 I; i0 ?: V
return this;9 Y- c5 t. z0 q `* U! t" Q8 \+ |
} |