HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ ~+ _$ x+ P) u( k, x
8 H/ W# L. _4 K* T8 P public Object buildActions () {& a! w r' b8 b# h( e# [
super.buildActions();
R D7 k) c% ?4 V 2 r8 `! M, g. t
// Create the list of simulation actions. We put these in
+ ^8 {) \6 Z/ c1 x3 ` // an action group, because we want these actions to be& \+ Q! @9 |4 p
// executed in a specific order, but these steps should4 o8 M* L3 U8 F% ?
// take no (simulated) time. The M(foo) means "The message
3 y. Q p0 i! o5 H // called <foo>". You can send a message To a particular
% t3 ~3 ~ H) x/ W! B F // object, or ForEach object in a collection.2 R: }4 @8 r8 n, _4 o
5 n8 \1 [7 d7 I0 q
// Note we update the heatspace in two phases: first run
4 z! P1 C5 `: }9 c1 d; t6 g // diffusion, then run "updateWorld" to actually enact the# {3 D. J9 y" A; k5 p4 U0 m
// changes the heatbugs have made. The ordering here is
8 @5 X6 x: z) S, z5 | // significant!
3 O4 r/ S! d( s5 B8 s! g
1 M3 X" f( N8 E5 ^ // Note also, that with the additional
0 ~+ r1 ~5 l- y# B // `randomizeHeatbugUpdateOrder' Boolean flag we can
* k1 g/ r# x7 T: y4 b( o // randomize the order in which the bugs actually run) ?9 _& y( W$ n5 G% X
// their step rule. This has the effect of removing any
7 v/ [- B4 E2 g: x // systematic bias in the iteration throught the heatbug
: m2 l) X3 w$ p/ r // list from timestep to timestep& h3 z, k$ W8 D8 E/ T, h9 }
% d6 I, u9 b. B: N
// By default, all `createActionForEach' modelActions have
5 E# a# ~1 ]& Z ^ // a default order of `Sequential', which means that the
- x) i* _" [" ~0 \+ X- R# a4 g7 u // order of iteration through the `heatbugList' will be
. P3 b* u! Z8 T) l3 ^5 l \( K: ] // identical (assuming the list order is not changed& x) X4 J! k9 z
// indirectly by some other process).
( A) }/ f# v! r2 _- g5 C$ F- j % d" R) ?" h4 K% w' o
modelActions = new ActionGroupImpl (getZone ());
, ^0 s: v2 k# q0 M. g
& E/ f; k2 ?5 J" s( r7 B0 f0 ~ try {
+ \6 a7 Y/ G3 Y; X& a0 z modelActions.createActionTo$message
4 ~3 m$ l0 \% b0 s) d2 Q; R1 K (heat, new Selector (heat.getClass (), "stepRule", false)); }7 Y9 B2 M0 P- K3 E+ l& P
} catch (Exception e) {
2 M7 C# C" {" F$ o9 _% Z H System.err.println ("Exception stepRule: " + e.getMessage ());/ L4 n5 t2 ], L' l4 w
}& E2 T, w: u9 s L& y
) K1 T& a* |5 W {, ` try {2 @7 j+ @9 e$ {% B3 w# F% s u
Heatbug proto = (Heatbug) heatbugList.get (0);
! K. U- a0 p4 W4 g Selector sel = ' y1 l9 P: o5 u r4 C2 K
new Selector (proto.getClass (), "heatbugStep", false);$ _. g! F' N7 M7 M- p! B
actionForEach =
, ^" [: T* N6 L, E* `8 |5 b' _7 \ k modelActions.createFActionForEachHomogeneous$call4 K6 g# c% W% h5 O' H) v" i
(heatbugList,4 G. ~/ \. g2 X& R: j
new FCallImpl (this, proto, sel,
0 Z8 ?$ o4 n; u) F& W, B- K u {8 F new FArgumentsImpl (this, sel)));5 }* }' Q1 @: C% E& f
} catch (Exception e) {
" J ]* q T& Z0 [; h8 T7 G/ b3 e e.printStackTrace (System.err);
4 U! V7 R% W8 j- Y6 r3 m: k& F }3 G' s# z; }' w8 q; y
( y7 ~" c% o2 G7 L/ F syncUpdateOrder ();7 F! U) O7 V' o3 X: M% Z& x9 } Q
* q- ~0 L# b g8 c* d. K4 c# E try {- s0 D$ e3 O) p( v; q
modelActions.createActionTo$message
* \* Q6 K" {4 i& W; s+ K (heat, new Selector (heat.getClass (), "updateLattice", false));$ M m' H: @4 _* K( }2 P( B" @3 Z
} catch (Exception e) {
4 X8 C$ o' T# g- C+ w5 Z9 ~ System.err.println("Exception updateLattice: " + e.getMessage ());7 D( b6 p* ?+ T' j' q
}5 o' A- H4 w0 o; j8 N
. f6 G/ j* @ x; z6 U5 [ // Then we create a schedule that executes the
0 d- N* Q" K# a3 ^$ g7 V // modelActions. modelActions is an ActionGroup, by itself it
& t. p/ G3 D; s/ d$ y- s) a // has no notion of time. In order to have it executed in
/ X' b8 s* m9 r8 U- q7 r // time, we create a Schedule that says to use the
7 v: s8 R- T6 F8 d# a- U; ? // modelActions ActionGroup at particular times. This) R/ a' [/ A$ ]1 c2 z2 a
// schedule has a repeat interval of 1, it will loop every
8 I1 J' p& o2 H: r! x. a) ~; M // time step. The action is executed at time 0 relative to
( \- {* r' @- E // the beginning of the loop.5 A8 Y! _) P& ~. \
* L8 k! p1 U: n. I% E
// This is a simple schedule, with only one action that is! C% d# |0 h8 X# u
// just repeated every time. See jmousetrap for more
9 w; k0 V8 X9 u5 T7 r // complicated schedules.
) y0 X" n7 d- n: O" z P, z 9 t2 `# F/ B. }" {
modelSchedule = new ScheduleImpl (getZone (), 1);) R! i0 Z; }7 r' x
modelSchedule.at$createAction (0, modelActions);
+ @9 Q/ m+ s* d3 Z/ B3 s
9 H/ E# S3 `1 ?/ k return this;
/ [) P! a% s" D9 g- ^( G } |