HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 Y0 T3 Y2 @. D+ Q# H4 Z
1 y, R& }: I, K3 m4 h" a& b4 {- T public Object buildActions () {- t& L1 {: [- t) z0 E
super.buildActions();
4 z8 x" U8 ?3 g% J7 K7 E0 P* p - Z3 f( j% U# w+ ]. L
// Create the list of simulation actions. We put these in
! }, z/ A' J! b. ^& U9 ^! G // an action group, because we want these actions to be
& n/ N8 p/ J* L7 u+ v( F# Y // executed in a specific order, but these steps should, g+ Z/ h) J" T5 T
// take no (simulated) time. The M(foo) means "The message
3 d$ ]5 O& Z+ b" _0 U& d; V# A8 M) ` // called <foo>". You can send a message To a particular
) ?1 g. T$ {; O3 m // object, or ForEach object in a collection.
$ }" w' T; m# F2 x9 v0 |( m
' f+ J- S. q* u U: x: @ // Note we update the heatspace in two phases: first run" B2 K" P. o* ]7 g; m
// diffusion, then run "updateWorld" to actually enact the( C9 {( m) t8 l. B$ s
// changes the heatbugs have made. The ordering here is
: z% A% C( R: C2 i) Z! Z; | // significant! V! X0 n4 W! w1 T
5 }, y$ U% D o& m- `
// Note also, that with the additional
' i0 T# X. R* p3 W& i% Q // `randomizeHeatbugUpdateOrder' Boolean flag we can
% r" ^: U: A" ` // randomize the order in which the bugs actually run
( U+ p9 |0 n/ c // their step rule. This has the effect of removing any
6 Y. @! x3 A6 N6 t // systematic bias in the iteration throught the heatbug
, u# P4 Z8 s- J% @6 X // list from timestep to timestep4 w; m' P* l! a1 A2 G$ j
) |1 u( {- ?3 {$ Z1 z/ Z- K6 q6 J // By default, all `createActionForEach' modelActions have
, t- @2 M* m( W0 d' y' \- f // a default order of `Sequential', which means that the _& y$ X' u5 O6 A4 ~- g& D: \6 G
// order of iteration through the `heatbugList' will be# O7 R* o5 d$ V8 I' f2 {
// identical (assuming the list order is not changed0 A# q' M5 Q/ c# G, _5 w
// indirectly by some other process).
6 g6 ~: R8 w8 r7 I+ R% k4 p
8 r* Y# d+ r. O5 P( n modelActions = new ActionGroupImpl (getZone ());
1 s& y A/ \+ ] D. z3 Y. @) z4 J( q( p, {. M+ h7 u1 o5 V0 `8 y- i! G+ x5 k
try {7 j* V8 z& L* n# S) Z8 B2 a
modelActions.createActionTo$message
s8 N) N) ?) |$ d4 J (heat, new Selector (heat.getClass (), "stepRule", false));& C/ h9 Y1 l( Y2 N. p
} catch (Exception e) {2 G+ X* H# l! m6 L2 T. g' P+ f7 y
System.err.println ("Exception stepRule: " + e.getMessage ());- M" u7 {2 P% h0 d
}0 C$ j8 d+ Q$ p, ?) n1 P
, }" F, @& Q* t* I3 V
try {
6 {+ ]! n, x8 I4 p& ] Heatbug proto = (Heatbug) heatbugList.get (0);
9 P/ C9 o- j5 k* L Selector sel = d1 D0 g! j/ }/ H
new Selector (proto.getClass (), "heatbugStep", false);: L1 }* E# I7 y: X- T) y& a
actionForEach =2 \4 P! z7 R6 l" |! P# n k
modelActions.createFActionForEachHomogeneous$call R' c3 r. Y' {) u+ z
(heatbugList,
6 F( f, T6 m( A. q$ V- ^ new FCallImpl (this, proto, sel,, S7 W+ {) T7 `! _* D: r
new FArgumentsImpl (this, sel)));
7 t% F7 g D d; _+ { } catch (Exception e) {+ E' D* J9 B4 [: l) s8 K
e.printStackTrace (System.err);
! F% ^# V) H1 i2 w) g# v8 C }
5 W. ?. x& e' C" p! N 8 m5 d: }+ k: I7 p) T9 ?0 M
syncUpdateOrder ();, p5 C& P0 `' A# l9 {( x
0 Z6 j7 P/ ?9 S7 G+ D try {' j s8 n+ i* ?
modelActions.createActionTo$message 5 X3 X9 f" I0 l/ D5 B: K$ k
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 G3 O% i8 P/ _4 v } catch (Exception e) {; b6 Y3 m' N, n& @7 g0 A$ Y
System.err.println("Exception updateLattice: " + e.getMessage ());
( s5 w& L! e0 l6 k# E7 l) A }1 M/ R! v1 k4 A: o0 T$ D
6 f S1 s; I4 W% j' w' U
// Then we create a schedule that executes the
1 Q; n* n1 ]1 I- Z% D6 _ // modelActions. modelActions is an ActionGroup, by itself it
' \4 \8 G# C# g* y) [% x3 S- p! T // has no notion of time. In order to have it executed in
. M3 y5 d& _3 c' c9 z" [1 _. \ // time, we create a Schedule that says to use the! p1 g9 O) M" W( M
// modelActions ActionGroup at particular times. This
+ V2 M1 h9 T: D5 g6 U& I // schedule has a repeat interval of 1, it will loop every
9 N" R% w. ~6 r E8 x& _- C // time step. The action is executed at time 0 relative to" V3 n, I: [# p
// the beginning of the loop.1 T2 x# u9 ~3 G9 g1 K
- ~! L9 ~. K+ W6 B5 M( F' {
// This is a simple schedule, with only one action that is
; i. G) ]/ C& u: @0 r i. | // just repeated every time. See jmousetrap for more+ z" B- \5 F2 O. B' x
// complicated schedules.
" I% ?8 H3 `, `
+ S& X5 E3 g b% L modelSchedule = new ScheduleImpl (getZone (), 1);" ?6 m' D: f D; _0 S1 ^
modelSchedule.at$createAction (0, modelActions);
9 J8 E" r, T2 b 8 C4 _) v' |+ I3 p# M1 a
return this;
9 r# i5 f; e2 @0 p4 e' y } |