HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 D) l5 ~( z3 {2 V2 K
1 `8 d7 \: @: E# O/ Z) _# ]
public Object buildActions () {& E( S, c, ^/ [0 G0 H
super.buildActions();) C7 P( m9 ~2 q% I5 n( h; R
* a1 P9 K' t i b' s) F' f8 k // Create the list of simulation actions. We put these in1 D8 v/ w m6 g! C; t+ B# B
// an action group, because we want these actions to be% P: a; F4 Q. |$ G9 Z
// executed in a specific order, but these steps should2 w. t. l9 \9 U9 V
// take no (simulated) time. The M(foo) means "The message
9 p$ y( X! ~ c+ S0 r4 e/ T/ I, Y // called <foo>". You can send a message To a particular
# k5 S. f b n' T J& _( H // object, or ForEach object in a collection.
1 V( ?$ Z# H# v4 n' C! x# l
: [8 V6 _8 X* R* a9 h3 i2 G // Note we update the heatspace in two phases: first run
0 N) A/ M! N: @7 X% H // diffusion, then run "updateWorld" to actually enact the. g7 B9 t0 C' V& I; c! X
// changes the heatbugs have made. The ordering here is6 w4 l# K1 V) m5 @. I
// significant!, e& o: I& V$ U
2 i6 z9 o1 b7 L& B+ o* y // Note also, that with the additional6 K$ O" i9 Y: @, C
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# D5 z! ^/ _$ \8 |' L // randomize the order in which the bugs actually run
# a, ]: H# ~& _9 @ // their step rule. This has the effect of removing any
: ] V) M, }4 h3 W: C // systematic bias in the iteration throught the heatbug
# A) l9 V, _; O7 ^ // list from timestep to timestep, }. ~6 J2 ]' `" X4 A! p
' ~& n' |* i$ x9 i8 e4 y9 ?
// By default, all `createActionForEach' modelActions have
% n: E5 x; j: p$ E3 L // a default order of `Sequential', which means that the. _" |! Y/ J0 o1 W, m2 O
// order of iteration through the `heatbugList' will be4 V0 u1 z; E* r# E$ q$ D2 |8 b
// identical (assuming the list order is not changed
/ H2 v- q* f9 }1 j7 R // indirectly by some other process).
& ]/ J! q* Z# I) v8 \+ X - ?; d4 z5 D9 m7 ~6 h9 o4 y9 c
modelActions = new ActionGroupImpl (getZone ());. `4 l: H4 |$ j8 Z0 _6 I. T N( P
: V; B. F0 a7 K2 ~6 z! h try {
! n) y& F+ a; f7 j modelActions.createActionTo$message8 g# j$ |/ ]- }, q, i
(heat, new Selector (heat.getClass (), "stepRule", false));
' U8 J7 W! y1 a. L0 Z' T } catch (Exception e) {
" q& I; ]+ k+ E% J/ Y System.err.println ("Exception stepRule: " + e.getMessage ());3 }# ^, _% i s; l" d8 U
}2 [6 v+ F0 t' E6 I/ V
: Y& \2 \& d) ?4 f' Y; n try {
2 b+ @$ R- ?! s. p' ^ Heatbug proto = (Heatbug) heatbugList.get (0);
! t: ~( b# _! E `9 [ Selector sel = ; g, {; H1 N# c, g1 q
new Selector (proto.getClass (), "heatbugStep", false);, m+ E( G# N _, N( w
actionForEach =6 s# C4 x4 @0 ]8 h7 p+ K) ~
modelActions.createFActionForEachHomogeneous$call0 x4 Y4 I/ q! J5 t
(heatbugList,
+ R. |+ i2 E. X$ t M new FCallImpl (this, proto, sel,
2 A# w+ y1 q, Y6 M$ W5 { new FArgumentsImpl (this, sel)));# j. m+ Z- d: h, T' U6 ~
} catch (Exception e) {
) }" E% [* z+ g e.printStackTrace (System.err);
# _" y3 g) }# f$ _' o }
( P/ w/ `# C o+ r% @, r 5 ?/ w9 g5 d2 \) \9 x& c4 @: p, Q
syncUpdateOrder ();
( U2 s( I9 p/ F& H j3 d3 |7 ^' y& s* {& A
try {
. ~: H. O7 M" `. I* a modelActions.createActionTo$message 6 _& Q2 b1 v8 o. _
(heat, new Selector (heat.getClass (), "updateLattice", false));
& E9 y- Z' ]1 Q& a1 ] } catch (Exception e) {
' w% j4 f: ?5 r7 ~ System.err.println("Exception updateLattice: " + e.getMessage ());% T$ v( |) c# D M
}
0 H2 t$ H' {/ U' ]+ n% }# D & r- }4 E7 q8 A& ]; D
// Then we create a schedule that executes the$ U! M1 f+ e7 g; E# G& L
// modelActions. modelActions is an ActionGroup, by itself it
7 b- P; R7 r; o) x // has no notion of time. In order to have it executed in3 L, T0 B3 b% Z1 t0 i
// time, we create a Schedule that says to use the0 A8 m1 w8 z" W/ [* s
// modelActions ActionGroup at particular times. This
) @7 i- s! B$ E+ { f6 C // schedule has a repeat interval of 1, it will loop every+ h( D6 c. E" g: i4 t k6 ]* @
// time step. The action is executed at time 0 relative to
* C9 J% i3 L6 N3 G, H$ m N // the beginning of the loop.) P: `1 i( L" f; a& ^. l% N2 E/ u
( X: L4 m; M g- g4 E. R5 i // This is a simple schedule, with only one action that is
0 J! b6 j: X1 C // just repeated every time. See jmousetrap for more
8 C, W5 Q1 C9 c! A; x // complicated schedules.
0 o4 E$ C5 N0 K3 i; H1 R' i # |& j1 N$ K! r- [5 x7 ^2 x
modelSchedule = new ScheduleImpl (getZone (), 1);
: }& }. M: Z$ Y! q! z! Z modelSchedule.at$createAction (0, modelActions);" V) ]% _; q0 `$ R. I9 e) S
0 ?. I; @% S' K return this;
4 P9 L8 g7 J! Q2 G1 O9 u( ] } |