HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 F5 ?, x; j" h* V& [$ K: a2 t
6 c0 y2 F8 ~$ k9 R+ t- W$ |- m public Object buildActions () {$ R& x( B0 [) R& i3 \7 g+ a, V
super.buildActions();
( C. T: m# B) \0 G' j& Y: G- x t
9 q; M6 Y( Y% s* H: r // Create the list of simulation actions. We put these in3 G3 p& A( z- c& N6 g
// an action group, because we want these actions to be) N9 ?+ b! g! C2 i% \7 f7 H
// executed in a specific order, but these steps should, Y& b# H+ k- j( E$ O; K9 x
// take no (simulated) time. The M(foo) means "The message+ i! G' P8 j6 Y; T+ O# {' O
// called <foo>". You can send a message To a particular% u8 {3 C$ E" a5 _% ~# t. o# R/ e
// object, or ForEach object in a collection.
5 @6 v' @( T" B' R/ w- j
/ f7 \7 H0 f' G- j // Note we update the heatspace in two phases: first run
( z$ e3 F$ y; B // diffusion, then run "updateWorld" to actually enact the/ ]/ |1 ?' v. U
// changes the heatbugs have made. The ordering here is, U, X$ Y3 i$ F6 J0 z- @6 g
// significant!
: c1 q& E4 y% I$ j% |. O2 _
. o, E/ S. m. \; w // Note also, that with the additional/ {: C6 A4 H. N9 ~, e$ r
// `randomizeHeatbugUpdateOrder' Boolean flag we can: i. Y' a: ~! f: i; o
// randomize the order in which the bugs actually run
# r( j, v5 J/ q- h' |. B // their step rule. This has the effect of removing any' _( B$ n* s4 X* H% g
// systematic bias in the iteration throught the heatbug$ y) I+ G- k; j/ o0 V0 v! X" V
// list from timestep to timestep9 {2 |# s1 R5 W1 y% _& R
5 v3 K2 v4 o4 L9 i% t // By default, all `createActionForEach' modelActions have6 z3 i9 c- I. _2 @: J) G- v
// a default order of `Sequential', which means that the9 @( L. k+ c# x, r! b
// order of iteration through the `heatbugList' will be0 C+ h2 Y* T) A. ?# ]$ S8 p* l
// identical (assuming the list order is not changed+ ^8 I5 m6 K5 t8 O0 S" L9 ]8 U
// indirectly by some other process).
7 b% D1 b5 R a( Z! p
. ~5 Q2 y+ p9 |( b1 l9 P, k2 @ modelActions = new ActionGroupImpl (getZone ());& C0 Q8 L* G' u% Y! K
* h' [$ t, {% m
try {
) O+ y( U: Y3 ?* {, z4 O* a- W modelActions.createActionTo$message$ p0 d; L9 S& D Y/ ^. h0 W
(heat, new Selector (heat.getClass (), "stepRule", false));' R3 Z7 `& U( }% _7 q Z
} catch (Exception e) {
5 \+ |) |, A+ u2 A System.err.println ("Exception stepRule: " + e.getMessage ());
' h! M0 Q- M; Z+ j }2 F2 x5 ^) K0 R' b, }9 a# o7 @
- O- c1 {4 H& Q9 V5 t3 d0 L
try {
7 f! r# ?5 E! e+ `0 e" x2 A Heatbug proto = (Heatbug) heatbugList.get (0);5 O( a q* l. A. y
Selector sel = ' j2 Q+ z: g8 `$ L1 l+ n
new Selector (proto.getClass (), "heatbugStep", false);
" ?' x0 j c e+ }5 @ actionForEach =% [! B. e$ t/ Y& I# N# R
modelActions.createFActionForEachHomogeneous$call$ y& |0 {# k' h. @# P6 O
(heatbugList,- w: D( H" M7 Q: T* }
new FCallImpl (this, proto, sel,
' z9 Y' c: ^5 O new FArgumentsImpl (this, sel)));$ p) H3 A; ^ i( t7 E" G
} catch (Exception e) {7 p) r! {5 l" {* Y
e.printStackTrace (System.err);. g0 g3 f2 q# o- s: h
}; z- M. V% n# Y6 r
i- X# M! t% J
syncUpdateOrder ();
0 _0 h1 ~2 U7 Q- I5 E" ?6 g6 X$ T1 V
try {
' M) H$ t8 o8 W; ] modelActions.createActionTo$message ( R, U' J7 ?1 v4 x& M
(heat, new Selector (heat.getClass (), "updateLattice", false));5 _4 G/ T8 V, o) `- a
} catch (Exception e) {* m: N# c" T. s3 G
System.err.println("Exception updateLattice: " + e.getMessage ());
' t8 V% |- r5 q4 F) G- c" u }
( {( B! q* ^' ]/ O: Q$ b( W 5 B3 S- s' I# _( c
// Then we create a schedule that executes the# o+ m: f: ~" ^
// modelActions. modelActions is an ActionGroup, by itself it
, i! r3 c5 x7 v' x, p // has no notion of time. In order to have it executed in
( E' R6 D- j( H" U // time, we create a Schedule that says to use the
9 E" w" M- C7 W) A0 { // modelActions ActionGroup at particular times. This
& k+ G7 O) u) Q/ v" z // schedule has a repeat interval of 1, it will loop every
% V4 o9 _7 O; j // time step. The action is executed at time 0 relative to" `, _: ]- K5 Q* ]9 Y: Y
// the beginning of the loop. w! Q4 z/ F; D; F1 s6 `4 X5 k1 f6 y- E
6 F, ?+ r8 O- Z7 o( \5 [5 u& X // This is a simple schedule, with only one action that is- ]! f" i l6 l; E! k$ N! i
// just repeated every time. See jmousetrap for more2 L0 Q( p- K1 C) P0 V
// complicated schedules.
6 Y# @. @2 J" x9 v }; }! o N
; m9 j6 B9 C( W8 p% t4 S modelSchedule = new ScheduleImpl (getZone (), 1);
" T5 q) i U" u) ? modelSchedule.at$createAction (0, modelActions);: F/ W4 |- p5 p2 s8 @. Z- ^
* t0 j& G$ a7 S- v" G1 _' ~
return this;( ]% z' u+ b" ~- Y5 \6 X/ M1 X
} |