HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 V* q. X1 X) s) ~: W5 B2 Z* \: z- ]) r, b; K g. D# L
public Object buildActions () {
: ^7 J, F( ?; ?0 s super.buildActions();
6 ~ T: d' S3 v& B4 \1 E
0 ~2 [ e0 f1 q9 r8 c) d // Create the list of simulation actions. We put these in4 d: k% D! G. y. |/ o% c( T
// an action group, because we want these actions to be5 w$ y- p4 f( y N; T7 j
// executed in a specific order, but these steps should5 M! d X! D: Y7 i7 a# H- k
// take no (simulated) time. The M(foo) means "The message1 n' q7 V. d9 H# o$ I& k0 s {
// called <foo>". You can send a message To a particular0 M+ @ f* e( o; t7 D% L7 |
// object, or ForEach object in a collection.
$ E. {5 b) z7 Y8 P% r) |+ q8 I
# E6 H) x' Y! E // Note we update the heatspace in two phases: first run
8 e* y$ \- H2 O // diffusion, then run "updateWorld" to actually enact the
( t1 |1 Z9 b0 O4 k/ Q- q& D7 S // changes the heatbugs have made. The ordering here is
2 h6 Z4 J# E. t2 S* Z# c9 j' H // significant!
/ c& R X" D* P) Y( ~ 6 K8 ^" ~# f% G3 A! d5 @: B. t$ u
// Note also, that with the additional% I6 n( S/ O6 e8 Z% |! z
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 ~' W- z; B* | M# `1 E3 v: P \
// randomize the order in which the bugs actually run
5 y0 Z5 R3 \, e) N: i% x6 L: p // their step rule. This has the effect of removing any% {, X/ C( q) c
// systematic bias in the iteration throught the heatbug2 U* F- ~0 h5 M; f1 I
// list from timestep to timestep" c3 A9 @- c% P2 R) n" O
8 X8 U q' Q* V1 u // By default, all `createActionForEach' modelActions have
$ M0 j* v! k# X/ L0 O // a default order of `Sequential', which means that the
8 y3 }$ \& B h2 m4 C // order of iteration through the `heatbugList' will be9 q# X# }3 d. t: w6 [3 V7 `
// identical (assuming the list order is not changed7 h1 f* p3 q- e" I( a6 A3 j
// indirectly by some other process).
$ |! U- C, |. w9 v6 ? $ T- ~2 D9 l( B: z) p' g/ h6 g3 b
modelActions = new ActionGroupImpl (getZone ());
6 w1 ^& z8 o. D0 E8 Q2 \' v; Q1 n$ b+ |4 z( I
try {
$ |" G0 X- D0 Z& K/ @5 r4 L modelActions.createActionTo$message' J0 z7 S, B" U+ B7 Q6 S$ a" K; y
(heat, new Selector (heat.getClass (), "stepRule", false));+ f b" y8 l2 C F4 R1 m! p
} catch (Exception e) {
0 G& q! w/ J. j System.err.println ("Exception stepRule: " + e.getMessage ());
6 o- B1 d! C, |% P } j e7 Z/ k3 R+ x2 o
8 t" F) O2 h# Y+ \
try {
% `6 O9 i. ~# j Heatbug proto = (Heatbug) heatbugList.get (0);6 `" E2 p9 u# D. F
Selector sel = # E9 u# t2 J# g. P# [5 a4 Z
new Selector (proto.getClass (), "heatbugStep", false);
# [1 w4 ^8 q% Q3 Q3 e# O9 X actionForEach =' K8 z' `: W, j, A, O
modelActions.createFActionForEachHomogeneous$call
\+ j2 H- h* p4 Y3 k" ?, p1 H3 g/ h (heatbugList,
5 ]7 H) N! P5 R new FCallImpl (this, proto, sel,
% C* c% e, }( R, b+ l' k9 M% d8 e new FArgumentsImpl (this, sel)));* E9 R4 e$ g0 Q
} catch (Exception e) {/ V% K" W- R' y5 W5 A+ k
e.printStackTrace (System.err);
$ y, ^( i4 M, C/ I! c1 I }
3 C& L! q N. ]7 T9 h/ J& e
# c& } s- N5 t; z0 d; `- q syncUpdateOrder ();
5 m6 x; c y, V" D9 B7 ?' q0 e" Y) l0 T9 e) b3 G
try {
: s! i& W" O& j: X, W modelActions.createActionTo$message
9 F1 ]4 N: T8 A7 p (heat, new Selector (heat.getClass (), "updateLattice", false));7 s# [+ F$ X9 k; Z2 x0 ^$ b5 i4 z
} catch (Exception e) {
. K$ F% q) m9 O7 { System.err.println("Exception updateLattice: " + e.getMessage ());
2 e5 B6 [& C2 [4 C2 H. b1 ]3 o }9 k) O( H* n, Q& q: {& p
+ p% Q1 m2 `: T/ ^4 i2 y5 J( R- ~; d
// Then we create a schedule that executes the
3 V1 F; Y- e1 L4 L. Q9 j // modelActions. modelActions is an ActionGroup, by itself it: {9 ? U% @3 Q& u8 _, v4 B
// has no notion of time. In order to have it executed in
( `+ L3 ` a* e' N- o // time, we create a Schedule that says to use the3 C: z+ h7 t3 Z0 G4 I
// modelActions ActionGroup at particular times. This
' [! h! }/ ^0 k& ~ // schedule has a repeat interval of 1, it will loop every" V( x! f! g0 ?7 {- s
// time step. The action is executed at time 0 relative to7 N, o, R3 M% q' d, p; |" C
// the beginning of the loop.2 T5 s' n; ?9 q( b" L% m; c9 E7 x3 t
C2 B7 [2 x+ g! H/ `3 d$ r7 q // This is a simple schedule, with only one action that is
+ ?9 z0 \5 y' `' j( y7 B q // just repeated every time. See jmousetrap for more
/ ~. H; W1 _( C" h, F // complicated schedules.
H3 U m z5 |1 T4 m
; c- E" z% r! H& B: l$ o" ^ modelSchedule = new ScheduleImpl (getZone (), 1);
3 l; ^2 L$ ?* @7 j" l: z modelSchedule.at$createAction (0, modelActions);/ o6 [: f6 ?- j# B
# X+ }/ `) u6 G+ n4 s
return this;/ m, j7 {, X% _: x* n* u6 {' Q5 y
} |