HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 w9 s" B, }7 s8 Q
a; y% f& j; n( H; }. @8 E public Object buildActions () {0 E7 } ?; w, F; `
super.buildActions();
9 k' \% h& G2 g) z& y
% y2 _6 ?- d/ y! c! p2 F // Create the list of simulation actions. We put these in
& L! k- \" E/ I5 G1 L, Y; [ // an action group, because we want these actions to be: B: l, f# }5 S4 Q/ M7 V
// executed in a specific order, but these steps should
0 p- R4 f8 x& z. r' P# j: s% L // take no (simulated) time. The M(foo) means "The message
5 D9 `# ~# n1 Q4 O7 p7 R) m/ f // called <foo>". You can send a message To a particular5 E# w4 s" s0 Z/ y3 d
// object, or ForEach object in a collection.# ?9 }# P# _% q! V
# i5 c, A8 z/ q& M1 z
// Note we update the heatspace in two phases: first run% U; Q7 r2 w; G. {; I1 K" c6 H
// diffusion, then run "updateWorld" to actually enact the) `" I2 V8 S- i( X2 k: S( ?
// changes the heatbugs have made. The ordering here is7 N. h1 J- k" X8 F7 z# }
// significant!
9 t$ i. A4 J- G: ^" ?9 f
( i5 O+ m3 C! C6 C. Q0 a$ G // Note also, that with the additional
0 u# j+ y& W1 C5 i) q# _0 D! q) X // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 M* K7 _; h# r // randomize the order in which the bugs actually run- Q' S% Y" o) M* \- q
// their step rule. This has the effect of removing any T' X) |' e5 K0 l) y9 H
// systematic bias in the iteration throught the heatbug i4 m8 X3 ~9 x, A" m+ [3 F- p
// list from timestep to timestep
7 i& J6 Q1 S2 c+ e: g, f, j
% l [5 |$ l4 T // By default, all `createActionForEach' modelActions have- D$ w3 [8 G8 j x7 ]0 }$ d3 W, @6 c
// a default order of `Sequential', which means that the4 {4 a$ L& I/ J
// order of iteration through the `heatbugList' will be
8 l- u8 p0 ^8 @9 S // identical (assuming the list order is not changed
5 |+ C5 ^3 x9 I3 l+ C" K, w // indirectly by some other process).6 G- N5 Z- H; W6 v5 ?
; E6 L& ?* z7 N9 A modelActions = new ActionGroupImpl (getZone ());5 ?* _# F, c& a2 T( o- O0 }/ H
) H+ A# |4 }4 U try {$ M0 h% n! v+ n/ S' k3 s1 C* X
modelActions.createActionTo$message
9 F0 j* o6 q$ g (heat, new Selector (heat.getClass (), "stepRule", false));* k) }8 d/ Q0 J$ g* f8 L) H
} catch (Exception e) {
% K7 i' Z% C* ]/ R$ J9 e( I6 U5 ` System.err.println ("Exception stepRule: " + e.getMessage ());+ O. f8 J ~4 n
} A g0 q T- A: G4 l' E6 @, W4 G
; Q) [. k+ o, k# W7 c( I try {
4 j) x! Y2 m' p Heatbug proto = (Heatbug) heatbugList.get (0);& I9 B' k, [! e& g$ E
Selector sel =
% R, H' I5 t8 y; u new Selector (proto.getClass (), "heatbugStep", false);
" c) k. C8 t; d9 {& ?# m actionForEach =
5 K% Q9 J/ ` g( Y+ V Q. Q modelActions.createFActionForEachHomogeneous$call' R8 h M7 o/ a& V. k8 |) N9 l
(heatbugList," s) F" Z8 @: t* F$ j
new FCallImpl (this, proto, sel,& h- m% t; @, ^* b( b# \) W: Z
new FArgumentsImpl (this, sel)));& s* y+ Q/ N; ]" f! ]0 ]
} catch (Exception e) {
# ^. q* a/ c. A* q2 y& L& ]$ E e.printStackTrace (System.err);
% x7 L3 S9 R q9 k1 I9 H }. _: `8 a% T5 \& R# J/ ]
; p# C5 ]! y4 o syncUpdateOrder ();- t, [& \9 J: c8 i& l
6 m: n' Z3 {% q
try {
. c* |7 s) L4 [ modelActions.createActionTo$message # ?4 z1 S$ i+ x9 t- a
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ ~0 J# _/ r0 \% I' C- Q n0 u: d } catch (Exception e) {6 i) a1 ^7 |3 M# a ?- v& E
System.err.println("Exception updateLattice: " + e.getMessage ());9 K/ A/ f/ Q6 M9 C5 u
}0 i! [% @6 x6 v: ?% C$ j
6 t1 t/ O1 l- B' `. s( t( f4 i
// Then we create a schedule that executes the
) c0 }' ?- {0 A( J // modelActions. modelActions is an ActionGroup, by itself it
8 g8 @4 R, S& i0 ]& M5 B( g; ?9 e0 n // has no notion of time. In order to have it executed in4 J6 g/ [$ g, ^% I5 e0 g0 i' I
// time, we create a Schedule that says to use the
0 A9 r! \! B7 ~$ s4 j- X // modelActions ActionGroup at particular times. This. q* G7 t+ m; o* j! j
// schedule has a repeat interval of 1, it will loop every
2 R: C5 L1 {" ]5 {' D) o8 e // time step. The action is executed at time 0 relative to1 k# m! I% d/ E# K, Z
// the beginning of the loop.( ~, q; r, v' {: K; z- w7 U
' |/ C5 |. I7 g( w9 d7 G // This is a simple schedule, with only one action that is( y' X0 D) ?, F( ^. A" k6 I) m
// just repeated every time. See jmousetrap for more2 T5 M- P" x9 Q/ t7 b
// complicated schedules.$ S1 N& K+ ?* v
) l' D' \* R: Q7 L1 I: z
modelSchedule = new ScheduleImpl (getZone (), 1);; W4 x* [$ N% N. C
modelSchedule.at$createAction (0, modelActions);
, F$ A7 ?7 }& b# W0 d
0 n# z2 x$ K) B2 p. J! P4 i# h# \ return this;
2 i8 q+ h' m, t! F } |