HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ [+ `0 O' q4 m) y0 n
7 h; x7 a4 Z/ z% K& E public Object buildActions () {
/ B8 c. ~7 z' K% R3 G8 X" e super.buildActions();
4 s2 s+ K: D! K3 e5 E
9 p) `; V$ d, r" T // Create the list of simulation actions. We put these in3 _2 c, a# _3 B
// an action group, because we want these actions to be
3 O) E/ I% L: z1 ~9 b2 ? // executed in a specific order, but these steps should0 w9 m, J% Y/ F( d G9 W
// take no (simulated) time. The M(foo) means "The message
1 U, S$ r% b9 g0 ^+ Z // called <foo>". You can send a message To a particular; t: s( ^$ y m1 _! D% q' g, o0 X
// object, or ForEach object in a collection.1 I! _/ j; D! M1 t
2 S1 \$ F& |: R0 @" g: n! \% f6 G5 D$ w // Note we update the heatspace in two phases: first run
" V, [( c# C$ T3 ^0 ?9 R // diffusion, then run "updateWorld" to actually enact the
* Y4 w1 K" H) r. z // changes the heatbugs have made. The ordering here is& X; I. y7 @& e+ p& h, D4 G! u
// significant!
$ L- s; U1 P8 u * h! I, S- u; w% J
// Note also, that with the additional
. K/ U) i! x# N // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 R+ M5 B) J+ E6 Q, j // randomize the order in which the bugs actually run
- Q, a6 O7 T2 V) Z# K! b1 |% q // their step rule. This has the effect of removing any
i+ Z+ X, f* }3 | // systematic bias in the iteration throught the heatbug
0 T- l% [) W. `) M2 ]% f, y // list from timestep to timestep
2 k% x( G- r" _- ` 2 {6 E3 U" ]6 N# u& \1 g
// By default, all `createActionForEach' modelActions have
! f6 a) ?7 K# G# v% t, d" C! U // a default order of `Sequential', which means that the
: B# ^- o) O5 a+ w // order of iteration through the `heatbugList' will be6 \3 a6 H1 x) R
// identical (assuming the list order is not changed
4 c9 G3 b+ D8 o- l0 N6 W! }$ I // indirectly by some other process).3 g! I% N7 x, T: E9 p
% i5 K# W7 U# a9 b; L; N modelActions = new ActionGroupImpl (getZone ());
" c3 l, \3 w4 v0 S4 z$ R0 D7 s
9 K5 g' }; Z6 P; A" ^/ m- l, |" L try {( d' ^% @, ]! K/ E) i
modelActions.createActionTo$message
& N, F ]9 H( f; w$ r) S; C' O (heat, new Selector (heat.getClass (), "stepRule", false));
& Z( z7 _. K7 O3 g" G } catch (Exception e) {4 I4 k% R. ]# ?% b' l+ q: }
System.err.println ("Exception stepRule: " + e.getMessage ());3 X( U% C) u5 w& K1 l% S
}
+ R$ w: t: G2 ?4 `" d1 E0 H8 f3 {, B5 c5 m; J$ _
try {
$ r% J: }6 W" E/ p' K Heatbug proto = (Heatbug) heatbugList.get (0);- S& Q0 u2 |& w$ `8 @3 A
Selector sel =
4 I& `& Q3 h6 A3 p1 \ new Selector (proto.getClass (), "heatbugStep", false);
" ]) X. a0 L( h# K actionForEach =
& X; M0 O; x5 @9 F3 [ modelActions.createFActionForEachHomogeneous$call0 Y2 f2 z* V z6 ?: W7 d) F( ^
(heatbugList,
, x& S o' h* _: U new FCallImpl (this, proto, sel,: M1 c% I) Q9 p; t) k) M
new FArgumentsImpl (this, sel)));! D/ a7 y7 j: k: E" a. k! S
} catch (Exception e) {- q$ @& M1 {2 M6 k% w: a- f
e.printStackTrace (System.err);
8 g9 c, h5 i8 W' f+ s& ?6 Y }8 ~; f7 c' y3 B C$ w2 u5 C
( c4 e4 B7 `2 V2 N# L L
syncUpdateOrder (); n S9 d% g3 ]) r
% l$ F* h9 X3 y: D
try {
( E6 G f. h! Y, L V2 S modelActions.createActionTo$message % f) _/ c, y _" G7 U3 g
(heat, new Selector (heat.getClass (), "updateLattice", false));
" d' t. W: j/ k3 |( @ } catch (Exception e) {
* t$ ?. a( H$ V8 g3 f System.err.println("Exception updateLattice: " + e.getMessage ());# _3 c* s- M0 k4 B4 o4 p
}: R1 n F+ x* B& S2 I1 S
6 v# u# v% {$ @/ X* u // Then we create a schedule that executes the8 P. F, Q: B3 c b9 G: [. U
// modelActions. modelActions is an ActionGroup, by itself it* R$ V- D- I! b& m# W+ H5 _, `
// has no notion of time. In order to have it executed in& d z/ N4 j+ ?
// time, we create a Schedule that says to use the
* |( p1 f; X5 L/ V4 R' A // modelActions ActionGroup at particular times. This
* u" m- L) h+ F1 i // schedule has a repeat interval of 1, it will loop every3 s8 [7 x4 L( H
// time step. The action is executed at time 0 relative to6 x- e: d6 n8 V6 O+ x: c
// the beginning of the loop.5 g0 C' m7 m+ m
9 J1 Z1 c: Y& b, f& \; }
// This is a simple schedule, with only one action that is
& I* a2 y' S: \3 e4 {# ? // just repeated every time. See jmousetrap for more
: e0 q, ]" y3 n3 D% | // complicated schedules.$ r$ G8 |6 ~% |0 j( B) `
6 L0 t+ R" V, q4 R modelSchedule = new ScheduleImpl (getZone (), 1);
! {/ l1 m) F4 {+ V modelSchedule.at$createAction (0, modelActions);
' \, |' }- R0 h- A$ M: _, o
& D/ v, V. y* |; p+ G: G return this;
1 a' U# E9 g, O$ Q2 ]1 {2 r } |