HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& P# D* W: P+ v* G, @# x6 V2 g
N5 r. N$ G2 p9 }' v5 ~8 j public Object buildActions () {
5 j% ?# Y& h2 e: P7 Z; G super.buildActions();
+ |- R0 X( B( v% f ?+ C1 @+ g/ U' M s" \
// Create the list of simulation actions. We put these in! p6 X0 H3 c, t, B+ R5 U
// an action group, because we want these actions to be2 ]2 w3 H0 M V6 A( E
// executed in a specific order, but these steps should
% {& p! ^/ ~( ?+ Z/ h5 k // take no (simulated) time. The M(foo) means "The message
' g1 Z8 n! u& Z // called <foo>". You can send a message To a particular7 p/ R( w/ B" e# F F. X& O
// object, or ForEach object in a collection.% ?. d. s+ S0 v* Z, \% L
# ?) q6 U( y* Y: P, q) i
// Note we update the heatspace in two phases: first run9 b. n v4 B* u
// diffusion, then run "updateWorld" to actually enact the% i3 Y( `- |1 w1 ?! r" L
// changes the heatbugs have made. The ordering here is
/ g3 p5 D! \: [; v9 X: k // significant!& S+ q8 U% r4 U4 V
4 H( Y/ `% p' m' Y0 m4 t; m9 I% q // Note also, that with the additional
|% r0 }8 N5 N5 ?" P // `randomizeHeatbugUpdateOrder' Boolean flag we can6 Q* z3 Z( F8 l! T( J3 f% @
// randomize the order in which the bugs actually run# H. |2 j" u) w+ k4 L
// their step rule. This has the effect of removing any
3 x* U" d3 L8 t( q) ~ // systematic bias in the iteration throught the heatbug/ q, `2 f! d. k9 F! H* `
// list from timestep to timestep
7 R$ _' }. i) [# {6 L
( T+ j9 p/ u! `/ v! f! W // By default, all `createActionForEach' modelActions have
" T4 ~( F" S9 p- T0 M' u // a default order of `Sequential', which means that the
2 r! D4 ?% p/ R4 Q2 v- b4 r // order of iteration through the `heatbugList' will be
! ~: r# z, q8 J& m# o // identical (assuming the list order is not changed
* n- o& t$ c5 B5 x) P) o // indirectly by some other process).
6 U( Z" h+ O: }& b- W2 m
1 @1 b2 E2 P) @ a6 w- _ modelActions = new ActionGroupImpl (getZone ());
3 {% |+ e4 G: D! q; x! h$ f" m: h
try {
( \! R* ^8 s$ e! r3 v+ D2 e modelActions.createActionTo$message
0 V4 R3 O S" Y: g4 C (heat, new Selector (heat.getClass (), "stepRule", false));2 M- F9 m m3 f, S
} catch (Exception e) {
7 A2 \( k) E; ^. g% o' { System.err.println ("Exception stepRule: " + e.getMessage ());" V2 P' |% y: R1 h5 \) B9 j
}7 W. i+ o8 @" Z
) x9 @( G& X ]) m; S" ?
try {; h4 h0 ^/ f1 L v* O
Heatbug proto = (Heatbug) heatbugList.get (0);
! ?& r6 ]& I0 X' f Selector sel = ' Y- w: t6 U0 T) J( s( \2 v
new Selector (proto.getClass (), "heatbugStep", false);2 e, B) A& P7 t" R+ U0 ~6 B
actionForEach =# R& N, d5 d2 u1 ^; G( G
modelActions.createFActionForEachHomogeneous$call* J' F$ ?3 C$ j3 d* D8 {
(heatbugList,
. k) \& w8 \" U, G new FCallImpl (this, proto, sel,
2 o4 z7 n- O0 U* e' B, E1 P new FArgumentsImpl (this, sel)));
0 N5 h3 j% k- |/ ~1 d$ g: {8 Q } catch (Exception e) {- T' D: A8 }0 [" L# Q/ |
e.printStackTrace (System.err);
, i" l- B. @ D+ v+ @- C) ~0 S } P5 n- t' U- w
5 m. B3 _6 l. t2 M" ?4 t; l9 p syncUpdateOrder ();
' Q6 N. S6 ]+ v7 ^' w8 h8 w! j8 H& j: G7 p' [; ]
try {
' ]; L, A9 a D6 F# G1 G modelActions.createActionTo$message & F- B' n: q' r/ I
(heat, new Selector (heat.getClass (), "updateLattice", false));( z z. B8 {9 W6 Z' q% S7 ?7 P+ @3 D! c
} catch (Exception e) {
! `3 g* K' h# ]& L+ d5 ? System.err.println("Exception updateLattice: " + e.getMessage ());+ N/ Q0 z! m5 ^, Y6 e
}
; {: m0 \& e( m" W / o# F4 R- W0 V" _2 i/ L
// Then we create a schedule that executes the0 n2 r6 E3 {/ ?, v0 o' o
// modelActions. modelActions is an ActionGroup, by itself it
7 z' @* i% S' G4 {; ^/ t/ @ // has no notion of time. In order to have it executed in
9 I% @4 T2 }9 t6 ]# b/ y0 S // time, we create a Schedule that says to use the. w6 a, d! R$ X* q) v, f) z
// modelActions ActionGroup at particular times. This/ f. Q) ~& U( C! C8 O
// schedule has a repeat interval of 1, it will loop every
, V- o4 v% q4 R8 p! N // time step. The action is executed at time 0 relative to
. d' @- s/ N' N6 Z5 p // the beginning of the loop.
2 `# H ~) O' H) q Y. E3 ^7 P* L0 b+ ?9 b& w
// This is a simple schedule, with only one action that is
1 N1 |. E6 P- r' l& f // just repeated every time. See jmousetrap for more2 A- k: }) m8 n$ a
// complicated schedules.
* q: A2 j; m! e9 E- t5 [
8 ~: q5 ?. n0 F' w modelSchedule = new ScheduleImpl (getZone (), 1);: j! f$ G+ M6 ~5 m5 {, u0 g
modelSchedule.at$createAction (0, modelActions);3 N3 C v7 @0 N
. m4 K+ \7 |8 i9 @: j return this;
a( u9 K% w/ m, `& E: U } |