HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
K, E6 `# D* ~
1 f) d6 @* U$ T3 N public Object buildActions () {8 z! I- h5 z% f( b$ P1 _0 f
super.buildActions();
2 k1 ~; t2 g: g
2 l+ I4 V; K% w3 v% E, h // Create the list of simulation actions. We put these in+ {! M9 x) q5 f1 r
// an action group, because we want these actions to be: p) n/ Z3 ^7 n: H" O5 H. z8 V$ w
// executed in a specific order, but these steps should
3 o! w9 F2 Z1 Q9 ` Z // take no (simulated) time. The M(foo) means "The message
7 n, @! [6 J0 A' E& [, } // called <foo>". You can send a message To a particular
2 s3 G/ w+ U4 K. F0 m3 e // object, or ForEach object in a collection.
( X y, b1 K! i! f- I! E! V/ x: _2 d
" B* T0 S: G S // Note we update the heatspace in two phases: first run
& T) c, P$ E- |8 K& R // diffusion, then run "updateWorld" to actually enact the
7 S4 E& h0 m9 K2 h // changes the heatbugs have made. The ordering here is* H0 `. Q) w Y
// significant!
; o% X; d3 |9 z1 \" ?, U4 \
+ r- h( X5 b+ V; [3 A. e0 t1 v% i // Note also, that with the additional
3 A& j5 Q' T. |1 [. A7 v // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 O1 e R5 i7 _$ w2 J // randomize the order in which the bugs actually run% I& L7 m+ F, t) Y) J
// their step rule. This has the effect of removing any9 j" T: Y e4 x' d
// systematic bias in the iteration throught the heatbug- X/ ^; C2 y) N- l% a! w* S
// list from timestep to timestep/ D, n4 G6 A$ o" w6 T6 O+ t
o; d% K0 `0 [# [$ U$ X+ w) W // By default, all `createActionForEach' modelActions have5 s0 ]7 _: V! ^1 x$ R( M b
// a default order of `Sequential', which means that the
4 U9 i }! l: l2 `9 d+ M // order of iteration through the `heatbugList' will be
8 F; x0 ~+ ?4 z // identical (assuming the list order is not changed
5 C# b- Y8 m6 t // indirectly by some other process).0 v- ]- `+ T, v; ~% P8 _9 y
) m4 {/ }* C- d& b4 L modelActions = new ActionGroupImpl (getZone ());% Y+ U3 T# N: j4 P
/ x u# \( |8 D
try {, c+ P& |' A: J/ U% w; Z. t6 G
modelActions.createActionTo$message1 D' P% j3 N( _5 X" z& ~$ y
(heat, new Selector (heat.getClass (), "stepRule", false));; E2 T0 s) u: |3 q/ M) h' W2 h
} catch (Exception e) {( W; I, ?& H4 {: M S( E
System.err.println ("Exception stepRule: " + e.getMessage ());
7 A. P3 N3 g/ s) f8 u2 `/ _ }9 n, W2 c. t3 f
+ ? t9 |! q2 `% T/ m7 p" ~8 o9 ^' m
try {
& R& e' K+ R/ x& Y Heatbug proto = (Heatbug) heatbugList.get (0);
- I$ T# f$ r2 o! q Selector sel =
( s/ H, t% R7 [( \0 @ new Selector (proto.getClass (), "heatbugStep", false);( M6 k" |4 N8 v3 M
actionForEach =
; C% \' c* I' x* ^6 ^ modelActions.createFActionForEachHomogeneous$call/ Y+ ?0 L* Y/ d, q) j3 k: }
(heatbugList,
/ f& Q" r# s" u% F; o new FCallImpl (this, proto, sel,1 t: o4 Y# l& x z D: f7 y
new FArgumentsImpl (this, sel)));0 b2 A1 A5 N) k6 p: g. d
} catch (Exception e) {
0 D' u/ u6 @. ~1 O4 l e.printStackTrace (System.err);2 d9 ] x# k; ^0 l6 L4 P9 Q
}) I* w' w) y; U0 \0 b
5 c* R$ T8 H! x) Z$ J
syncUpdateOrder ();
& C" k( b" R; P$ t' ^; M& j3 a8 W z, R" ]3 x, f, D" L
try {" Q7 X b: R+ j9 g) t! f9 k6 ~
modelActions.createActionTo$message
5 k, z: Z! E/ i" ~- B (heat, new Selector (heat.getClass (), "updateLattice", false));/ a% R0 R# ?( Q* w1 V p" \
} catch (Exception e) {
& n, }8 M8 U. P System.err.println("Exception updateLattice: " + e.getMessage ());0 P* M, l( n2 s T; ?1 F' ~
}
% C2 R: m9 q5 s* v9 j 4 d, i5 P7 B" E- B) C- G7 r; R# x
// Then we create a schedule that executes the J* F- Z) H0 s( Z5 Q
// modelActions. modelActions is an ActionGroup, by itself it5 [. _5 R' y, y6 _% ^% P% c
// has no notion of time. In order to have it executed in
/ X% Y" Z. P0 m0 }9 |& o // time, we create a Schedule that says to use the
% f; D/ \0 `$ @: [% y0 D // modelActions ActionGroup at particular times. This
6 [. o( O! t. m- Y( v // schedule has a repeat interval of 1, it will loop every
) j; A# R- `: T // time step. The action is executed at time 0 relative to
/ n' j: N) U3 l // the beginning of the loop.- U2 y/ {! C+ O' j
( A- ?4 J: V3 y4 X$ V7 V, b // This is a simple schedule, with only one action that is O: O2 C/ b" i3 E7 z/ f
// just repeated every time. See jmousetrap for more
: d0 _4 a3 @' o& {7 r // complicated schedules.
/ J: t% @7 X: v% W6 y5 j9 o
6 e" W" ?6 N* e& ]$ w9 i7 F0 x" Y modelSchedule = new ScheduleImpl (getZone (), 1);2 \/ v- N* q, w
modelSchedule.at$createAction (0, modelActions);& Z3 }% i( J5 T1 B0 l' e% m
/ X# Z& W# W. Q/ G) f5 V) e return this;
2 d( W8 f% z$ t& ] } |