HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* w+ B I0 C* z/ R& s5 l9 b7 ]7 ?
* P" X% R, [2 r' y8 X; s, @
public Object buildActions () {
' r& C1 [) m* D* d/ X super.buildActions();
% [7 Q. U% L4 m) x' j, Q
$ Q0 s) h% o# Y* G/ h // Create the list of simulation actions. We put these in
* W! n# Q8 n4 K // an action group, because we want these actions to be
- ?$ F# V# D7 K: B( U3 S& }9 J // executed in a specific order, but these steps should
% |' N8 ?0 c9 c( v2 a // take no (simulated) time. The M(foo) means "The message% K S5 e: z7 s& e4 ?& W
// called <foo>". You can send a message To a particular$ y1 K+ i+ Y; F$ z2 |$ u3 j! _
// object, or ForEach object in a collection.
d3 v8 H4 p2 n6 J5 e
, P5 h# b; D! x& U) P5 [ // Note we update the heatspace in two phases: first run
$ D" _0 y) O. m! g // diffusion, then run "updateWorld" to actually enact the
2 C" t* k6 P! P1 s( M, P: }0 R // changes the heatbugs have made. The ordering here is' e4 o4 J" p! \+ C( Y+ r
// significant!- `: F4 ^, m7 Y% ?! G
3 l+ X `) B0 E7 n // Note also, that with the additional1 Z& P6 d7 f9 Q- b% p
// `randomizeHeatbugUpdateOrder' Boolean flag we can% e& x# q# h# `1 W4 ~0 T8 {
// randomize the order in which the bugs actually run. B- ~- @9 N0 @, S+ x
// their step rule. This has the effect of removing any
; z3 }0 Y) u1 ]* | // systematic bias in the iteration throught the heatbug" S( j }9 s; T4 a8 w$ l: Z: L2 \
// list from timestep to timestep% Z# D+ B4 g t* ^7 |; k
0 m( v/ O1 k( V7 M& ` // By default, all `createActionForEach' modelActions have9 L! X2 ]0 }$ r2 G; t' U
// a default order of `Sequential', which means that the# R& Q1 `" @3 t: B M
// order of iteration through the `heatbugList' will be7 z1 [0 T) d/ ]" z
// identical (assuming the list order is not changed
& S5 P, `/ r: v // indirectly by some other process).
5 @4 B6 q) t O% Z5 b
) A4 ^! z2 E9 ` modelActions = new ActionGroupImpl (getZone ());5 m# G, M3 }% e& o
5 ~/ u# |8 ^$ h' p try {7 [* a8 S4 L" t4 b1 {
modelActions.createActionTo$message$ u: k7 p6 m' d7 d5 d' a9 G
(heat, new Selector (heat.getClass (), "stepRule", false));
( B6 ~8 d6 w7 B( b! T" c+ ^ } catch (Exception e) {
1 x' u2 t! \- w; f5 ]8 e System.err.println ("Exception stepRule: " + e.getMessage ());
' t/ M7 d0 r- W( r" { }
- `* `" j% V5 \) J$ w* {, U# a' S- S
try {
" b2 K4 U, Q! `2 i* n Heatbug proto = (Heatbug) heatbugList.get (0);
) G' ]# ^: Z# h Selector sel =
7 w+ m* _, X0 N! \& X4 i new Selector (proto.getClass (), "heatbugStep", false);
, O& G5 S" J+ h5 f9 X$ b8 T$ U actionForEach =( v/ G8 d6 r, o
modelActions.createFActionForEachHomogeneous$call
- \% k& m$ k( V) ]6 w8 e (heatbugList,
8 H3 I6 F8 T/ Y8 z3 M new FCallImpl (this, proto, sel,
( z% z! T1 G9 H, T' Z new FArgumentsImpl (this, sel)));
, R' H7 i- e% j. V! D } catch (Exception e) {' r! y2 U9 v+ A' y- u5 S
e.printStackTrace (System.err);( t- T7 H, y5 S7 A- y# V2 d/ c/ u
}
0 b" e# c0 Q k# ? / ]6 ~- q: R+ t j; `: u6 C O5 t
syncUpdateOrder ();
m" x% m! j" W* o! K# b7 T" x2 Q0 c h7 I9 t& n
try {
F) Q. o& G! M; B0 K' F modelActions.createActionTo$message & l1 b6 E o" E& o( Q9 P
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ |% _0 l5 k2 a$ A } catch (Exception e) {! `9 `. {& x/ D; J9 V
System.err.println("Exception updateLattice: " + e.getMessage ());$ W; i4 i% s. S
}" s9 Z: K) ^& U7 N6 n
, v. ~8 ]' b& F2 x // Then we create a schedule that executes the) |' T0 E4 z$ r& v: t2 k
// modelActions. modelActions is an ActionGroup, by itself it1 P4 w: A3 s' U$ `: p! w
// has no notion of time. In order to have it executed in
: k4 P/ N6 r" _$ n // time, we create a Schedule that says to use the
' Q7 q( o' q" U7 a4 N // modelActions ActionGroup at particular times. This, Q, i q6 q/ f% S" z
// schedule has a repeat interval of 1, it will loop every
. g- s/ p& E8 m0 C5 R5 t // time step. The action is executed at time 0 relative to' T5 b7 c+ e3 F
// the beginning of the loop.
; A/ o9 D9 N- k" ]9 Q3 M
) }8 j* v" I0 t" h // This is a simple schedule, with only one action that is8 V5 n, Y- o T) F$ G( w6 Q, c4 d
// just repeated every time. See jmousetrap for more1 W! b+ g+ u0 i- F( s1 ~+ {5 u
// complicated schedules.7 ~3 E$ @- s2 R F
' z; J; S# g: ^7 D. P F
modelSchedule = new ScheduleImpl (getZone (), 1);- @& A1 L- m6 `
modelSchedule.at$createAction (0, modelActions);
, [( j( {' f6 b* q . m7 ^. A9 D6 R0 G' A& [4 x
return this;1 ~! m4 b! Q& S; o2 Z5 u4 x- y. O
} |