HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" ?, g+ ?. ^# x) f& X, q3 j2 U* r3 {" G% A2 E# i% O8 u/ |
public Object buildActions () {
/ [: N3 W2 |( W super.buildActions();
, f0 Y# j5 A9 l8 c: j
. c. `; X+ ?7 \8 X1 S // Create the list of simulation actions. We put these in7 i# H2 V2 {8 p7 z
// an action group, because we want these actions to be1 K7 i7 Q- P0 M. f9 F2 H
// executed in a specific order, but these steps should
$ b% q( o( ] r5 m- u9 B" R. t2 v // take no (simulated) time. The M(foo) means "The message/ P: c. {2 A6 F) m5 [& y7 U( a
// called <foo>". You can send a message To a particular8 \! T y1 m& E& E1 i
// object, or ForEach object in a collection.
7 V4 q+ Y, J) D& A 1 i* x1 s: \, V5 W9 ^8 P8 f. B: g
// Note we update the heatspace in two phases: first run
. q3 m+ U: o$ p. n5 t0 y // diffusion, then run "updateWorld" to actually enact the
) a; F+ O+ Z+ c // changes the heatbugs have made. The ordering here is
7 L+ N! x% e ^; A; o, V+ _ // significant!+ r- O% i+ S" z, X# x V/ G9 E
J9 O0 X0 a. ?- l
// Note also, that with the additional
* w A) ]5 ^, \ K$ @3 i // `randomizeHeatbugUpdateOrder' Boolean flag we can
, D! c7 N. O) M# L, X // randomize the order in which the bugs actually run9 }7 F! L' f5 M& l/ ^
// their step rule. This has the effect of removing any
/ j+ w+ i9 l' i+ { // systematic bias in the iteration throught the heatbug
! M* F1 }2 U0 e4 [2 I- N& w // list from timestep to timestep: S5 Z; X( ~+ @/ r: A, c
! [9 V' L% j! l
// By default, all `createActionForEach' modelActions have
% O, M& O+ X$ X // a default order of `Sequential', which means that the
9 S/ R! N \" B: G; A // order of iteration through the `heatbugList' will be
1 [1 \" i! o1 R9 W3 t9 H. N // identical (assuming the list order is not changed
# F, h r% l7 u# L+ w3 I // indirectly by some other process).
. V }% X$ Y* L$ ~0 m5 g* j 9 V$ l0 @+ y& n/ { O# O5 I8 P& ?1 P
modelActions = new ActionGroupImpl (getZone ());
* r2 x& G6 z0 G# C
; k# f" i$ |' b9 z7 K. Q* t1 F+ |; a try {8 G& O8 g, m0 ?- d$ q
modelActions.createActionTo$message, i# D5 F" a! z$ C8 ~) b
(heat, new Selector (heat.getClass (), "stepRule", false));) c$ C2 H: w+ g) D+ L; M4 ^5 P/ a2 u0 |
} catch (Exception e) {4 |: z9 V# h% X ?
System.err.println ("Exception stepRule: " + e.getMessage ());
. {& Q* f' H' ^, W }9 l" K0 [7 `3 z5 @3 y# f# k/ u
M2 u: @7 d9 }. Q) d# O, l/ S
try {
& S1 z( v9 V% x- G5 W/ U; N3 ]/ S Heatbug proto = (Heatbug) heatbugList.get (0);
3 K) h3 m7 B6 x/ Z# q$ @ Selector sel =
9 R2 h" a T4 a) r# n. q- U# G new Selector (proto.getClass (), "heatbugStep", false);
3 ?9 i a" C$ b actionForEach =5 ^! D9 D! N) Y+ O: ?4 V* h3 x
modelActions.createFActionForEachHomogeneous$call7 X0 b" y! _$ x) i2 W' c% v
(heatbugList,
/ h; |! P1 W0 L! G7 k new FCallImpl (this, proto, sel,% Q# C& I) S; u& X! I
new FArgumentsImpl (this, sel)));
/ D" `( Z$ o8 f; Z) `# n } catch (Exception e) {5 {2 h" g: {. k$ T! o- |
e.printStackTrace (System.err);
" ]1 X: X) C% I }
, O% j& N" s. F" L/ d5 i1 P% C9 d
+ z) X6 i& M' } syncUpdateOrder ();
4 r+ I' _0 F) D8 M
$ _" m9 R+ P; O4 k# a try {, _! q, T0 [/ j. H7 b7 E" X$ ]
modelActions.createActionTo$message : Z$ N; l$ h v& ^7 \" I
(heat, new Selector (heat.getClass (), "updateLattice", false));% K6 S ?1 p+ F( f& _6 P
} catch (Exception e) {
) s8 J* E W1 z; [" t System.err.println("Exception updateLattice: " + e.getMessage ());# k2 H' U2 k# x! }1 ?8 A- D6 }5 N5 {
}2 W4 H; z* x) o: d
. b. z* w7 ]3 t. h- o, a
// Then we create a schedule that executes the
& J: h a4 U" w8 y: m // modelActions. modelActions is an ActionGroup, by itself it
/ M" B n) ]8 r# p2 [ // has no notion of time. In order to have it executed in
: u+ R+ [% J' }9 K9 w' l# a; s7 k // time, we create a Schedule that says to use the# V' @( J, D' N$ H# U2 s7 W
// modelActions ActionGroup at particular times. This
! |: A" b: s: \- H/ C; B0 Z // schedule has a repeat interval of 1, it will loop every9 P+ e# h* f; K6 x* l, B
// time step. The action is executed at time 0 relative to4 p$ R) l+ A9 |; M. o0 `
// the beginning of the loop.: @" J4 z$ a/ d- y( }& j
1 Z. d: O- n5 y" w, n+ } // This is a simple schedule, with only one action that is
4 X; ^- {9 W4 |' L! ` // just repeated every time. See jmousetrap for more
% T! U* H8 n x% U // complicated schedules.3 q- `( Z' P$ b9 Q" l1 B. W2 r
/ g( ]3 S( X0 N
modelSchedule = new ScheduleImpl (getZone (), 1); }$ u1 \- {! C
modelSchedule.at$createAction (0, modelActions);. m9 Z" c! ~& Y* X+ V7 d% Z+ f) @
" R6 B6 }9 a2 d6 i, d8 E$ k) r
return this;: H) b# [- `- M" m( S2 M( r( h: N
} |