HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% i- l$ V6 z0 b# g) M
, I5 F: a5 b/ D' E5 C6 o public Object buildActions () {$ x9 Q& ], X) e; v6 ]
super.buildActions();7 I4 \6 n% I, E& M) h5 {0 s B$ F
' I" F! l% `1 M7 L* L8 a" t
// Create the list of simulation actions. We put these in
/ [9 k; u9 Z6 s // an action group, because we want these actions to be
$ b! Q9 \1 p8 P // executed in a specific order, but these steps should
* P, i' F% p7 J8 d2 C8 J // take no (simulated) time. The M(foo) means "The message! c$ n/ O D7 M& x8 G; l8 I2 R
// called <foo>". You can send a message To a particular" b9 Q. F/ Q* p# q+ \9 w
// object, or ForEach object in a collection.9 O9 ^9 d. t: ~+ j5 ]7 a
5 u; q: R! R) X) ~9 k( t // Note we update the heatspace in two phases: first run# L1 q6 ?+ h _9 }, `
// diffusion, then run "updateWorld" to actually enact the
z( r) i& `* A% T) ` // changes the heatbugs have made. The ordering here is
/ f* j% |( k' l/ K/ {3 ` // significant!* y) R* R' u8 X" x, U/ N
& g7 q0 u1 ]0 y- P5 B( `' \1 m // Note also, that with the additional
% u& A C, ^& C // `randomizeHeatbugUpdateOrder' Boolean flag we can0 W3 {: s; c, W, v' n+ J
// randomize the order in which the bugs actually run
0 n0 L9 Q" Z% ]% A // their step rule. This has the effect of removing any
% E: ~# L* I; i8 ]4 ~9 r // systematic bias in the iteration throught the heatbug$ e j. N; O; [4 T
// list from timestep to timestep2 h; {8 C) f* P
l' s& b: [0 H s9 U // By default, all `createActionForEach' modelActions have
j' z' W4 p6 i6 U& Z$ r2 c# p // a default order of `Sequential', which means that the
0 Q2 [2 p0 b. ?& N2 `, ` // order of iteration through the `heatbugList' will be
- a) Q2 R/ R4 l B% f$ T* } // identical (assuming the list order is not changed, L8 Q2 J0 H. i/ Z
// indirectly by some other process).2 `+ z7 q, @- y5 X+ s9 @( u2 k& y
. ?9 I" `2 z) Y$ W& r1 D: y
modelActions = new ActionGroupImpl (getZone ());; W' @8 p; K, h& A
( M; Z" P( Z7 O' x* m try {
1 l2 N2 F* S. t- ?0 G9 w4 [3 e$ f! M' ^ modelActions.createActionTo$message. I; }' _; j4 z1 v; U1 r
(heat, new Selector (heat.getClass (), "stepRule", false));+ B, u; z, L, B/ S0 C0 c4 s( e3 f5 W
} catch (Exception e) {$ E. ?' u1 x# E
System.err.println ("Exception stepRule: " + e.getMessage ());6 M# K, u, h4 s( B1 m
}9 ^& I3 J0 H2 p' v+ ^4 T9 J- _
: F* V- P: ?$ o% \
try {
. }3 o; T- X* n4 A Heatbug proto = (Heatbug) heatbugList.get (0);0 x" X( j( g+ }$ ?& E
Selector sel =
+ A. g- C, ]1 Q" J new Selector (proto.getClass (), "heatbugStep", false);2 o$ F6 [0 i; g- c l6 M, p# _
actionForEach =
$ a: m6 m- t, Y' u/ m1 @ modelActions.createFActionForEachHomogeneous$call
6 X- S7 q& F s! o (heatbugList,
; w% |9 G5 o6 X( G new FCallImpl (this, proto, sel,3 e- T M7 x* k5 F3 B; s
new FArgumentsImpl (this, sel)));" U! X( o: Q0 x$ v& U/ z
} catch (Exception e) {" w! Z. |6 c/ L8 O* I0 j
e.printStackTrace (System.err);
) K: [# ]% w5 D) J- ^ }
5 l2 c/ u* i4 Y2 O; E ' e2 L, G% z" a" o! F# G0 f2 I
syncUpdateOrder ();
$ O! U3 N5 X: K' k- C3 p; F1 H* v# A. T; D& f; f
try {
- [1 N- T) t1 M1 x# a- B modelActions.createActionTo$message
$ l' z4 u! o& n3 ~ A% s0 d (heat, new Selector (heat.getClass (), "updateLattice", false));. O! c* m# \8 d: b' p
} catch (Exception e) {
) f9 k) W; @. x, I. @ System.err.println("Exception updateLattice: " + e.getMessage ());4 d5 I, F! U3 t
}
1 L1 A9 d+ }; F- Y
+ I: b0 l) C V, g7 c3 I0 i- M // Then we create a schedule that executes the- L& z( s3 e- J7 W
// modelActions. modelActions is an ActionGroup, by itself it
/ U) t) }! j- \9 m8 { // has no notion of time. In order to have it executed in
+ m9 A. r+ m* h: O7 o // time, we create a Schedule that says to use the' [, h1 k! W2 N
// modelActions ActionGroup at particular times. This9 [! z h! F, i8 p
// schedule has a repeat interval of 1, it will loop every
, r9 }. u* ]- C+ a! ~' r, ^ // time step. The action is executed at time 0 relative to
9 [7 Y' L: k! g/ e; Y! e // the beginning of the loop.
: b3 F# h' N8 O! V9 U* I$ O6 V: A) Z+ _: h
// This is a simple schedule, with only one action that is
6 O$ U6 r+ Z4 h! [ // just repeated every time. See jmousetrap for more% @" L4 j6 h2 W/ ^
// complicated schedules.' b% \1 d' b: b
# q7 u0 o* W& u/ o' B
modelSchedule = new ScheduleImpl (getZone (), 1);
% K+ C% l2 ?1 n5 \7 f modelSchedule.at$createAction (0, modelActions);
/ z' t- e" [. Z- F, ^; x E3 t$ p ! q# C2 x3 ]) p; c$ p
return this;* T( e& _# m2 M$ a
} |