HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ n$ i+ b- i& `% W# c) Q
+ }+ i: q2 Y" B1 p/ P public Object buildActions () {
- G$ v8 G. R1 {2 y super.buildActions();. q! t+ j- h# ?4 _/ ]' l
; V8 ~2 ?# }3 Y# Q. ]* h7 z
// Create the list of simulation actions. We put these in
, k* J) J) f' p6 B // an action group, because we want these actions to be/ i+ r: M* A( B/ {! { l/ E" H* ?
// executed in a specific order, but these steps should* d4 c9 O. g+ O: [) v3 T7 j
// take no (simulated) time. The M(foo) means "The message
: L9 Q0 C! x: u7 a // called <foo>". You can send a message To a particular
2 A4 g" B) G& ^! d // object, or ForEach object in a collection.* z# r- }. Z: m5 \- C2 s9 e
- I$ W! C0 c* }0 B2 N8 V
// Note we update the heatspace in two phases: first run3 m9 N7 K6 C4 Q$ e- J
// diffusion, then run "updateWorld" to actually enact the
6 _, k5 Z- @ I5 G // changes the heatbugs have made. The ordering here is; a7 ?! |- U6 [8 M; m
// significant!2 o* f: z# s. }0 s2 ? V
; p/ ?: U0 l! N' ^ {- b' t; B // Note also, that with the additional
+ U# s. l4 o0 T$ G9 k$ x // `randomizeHeatbugUpdateOrder' Boolean flag we can
, V' N$ W, Z& X$ A, R4 K/ A5 m8 z // randomize the order in which the bugs actually run
! d+ p3 o) C4 }: p1 N, X; E // their step rule. This has the effect of removing any, L j4 A' z! U" R; x; M% z3 V
// systematic bias in the iteration throught the heatbug
. a3 X* P- J/ G0 l4 g% p // list from timestep to timestep
# ?: K: r" {6 d& L' Q0 k/ Y" C " U; Q1 G* i5 J5 w4 a5 U: p6 L
// By default, all `createActionForEach' modelActions have8 ~1 A# I! O- k& {5 b# n8 @7 c
// a default order of `Sequential', which means that the
" ~; b% }7 D% I // order of iteration through the `heatbugList' will be
7 ] O1 Q L: ] // identical (assuming the list order is not changed% e" |( @: g2 |# z: m2 k7 ?
// indirectly by some other process).
+ o0 E r* |* c7 B7 H- l - r D5 N9 S* r
modelActions = new ActionGroupImpl (getZone ());
* B/ V* ]( g+ U3 i# a1 I, x$ s- w5 k1 q1 W
try {; L# C. `# d7 c' K' a
modelActions.createActionTo$message
~! F* C! U ^5 n& J) a (heat, new Selector (heat.getClass (), "stepRule", false));
: Y: m1 T; V/ Y# p } catch (Exception e) {0 D7 h: J8 H* c+ w: A
System.err.println ("Exception stepRule: " + e.getMessage ());) a: P. T0 v- i5 w T+ L
}: u* O/ h% k+ I8 z; o& X
& V. f4 v0 A$ x! Q7 [9 X
try {! @2 Z- Y- u) E8 E. I
Heatbug proto = (Heatbug) heatbugList.get (0);5 d( l8 {1 z" X! d( C
Selector sel =
) Q' f& s" O5 [6 K# Z new Selector (proto.getClass (), "heatbugStep", false);
, h+ x4 a" k, ~# y. W( K z8 ]- R actionForEach =
% a5 N7 V* R8 Z6 L8 s+ T! X7 \( U modelActions.createFActionForEachHomogeneous$call
/ j8 h# I6 i. R4 ^, I/ e (heatbugList,* s0 f# n5 h" X% p
new FCallImpl (this, proto, sel,; ~. m0 Q$ `4 b3 a! B8 p# i- |* `
new FArgumentsImpl (this, sel)));) S' n0 r3 \- o/ ?. }3 N
} catch (Exception e) {+ R0 U0 V% e, y% _, L/ d
e.printStackTrace (System.err);
- t6 t" A/ E. A: Z' X }
6 X4 t$ R& L. e* O# T0 ^/ ?. P
6 j& Y! a, s0 w2 l0 X syncUpdateOrder ();! |$ V9 l( E2 z
0 r: [# w1 M9 W$ ]8 E O/ |
try {
9 N! `% p7 G+ n+ w; f modelActions.createActionTo$message
9 [* r% ^) X& a- t' O) V# a8 b9 ? (heat, new Selector (heat.getClass (), "updateLattice", false));
& B5 i; I3 E& a, J8 q } catch (Exception e) {( |' T% ^# i7 z; Q& g( j( q/ a+ u- d
System.err.println("Exception updateLattice: " + e.getMessage ());- K8 h, i' z* o8 p2 I0 m
}! Z# o" V6 ~+ Y4 k# i v% b, E
- z$ E6 ~) g. W' u8 E
// Then we create a schedule that executes the" c8 a1 @2 G" A l$ G
// modelActions. modelActions is an ActionGroup, by itself it
3 c, d0 [7 H, w7 Y/ L // has no notion of time. In order to have it executed in. ^& j0 d4 T4 ]% y/ S3 h
// time, we create a Schedule that says to use the
% B6 [4 B0 Z/ N" T. j/ w // modelActions ActionGroup at particular times. This' b0 V+ s9 Q6 j6 P ^; e6 V
// schedule has a repeat interval of 1, it will loop every# O, _ D! |1 A* Q. |
// time step. The action is executed at time 0 relative to$ n/ F! i, F7 T' A
// the beginning of the loop.) ]1 c* U$ I5 | \
7 X4 h8 t6 X1 G4 C+ q
// This is a simple schedule, with only one action that is, B6 `7 o1 R7 W% Z% e p0 N
// just repeated every time. See jmousetrap for more) a# ~0 G. f4 F; F, u
// complicated schedules.
6 _+ i! Z8 Z9 `2 q
" n; Q5 }. y P+ N' G' ~* y/ M3 ? modelSchedule = new ScheduleImpl (getZone (), 1);
. L) k- ]+ \" k5 k3 Y modelSchedule.at$createAction (0, modelActions); e7 K9 e/ M4 N' o, l
x h. |) \# C) x. h# P
return this;+ ?" P( G8 n$ d0 H- k* e
} |