HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& P8 b# @# W4 r, R
Z! _( `- o! ^& j+ r9 j3 v3 t public Object buildActions () {
" l8 I+ o8 Y; z. u% v super.buildActions();
; u8 N6 x. l' a0 A% I
& X+ E$ `1 V$ f2 X; d3 } // Create the list of simulation actions. We put these in
4 I5 Q: n* B* v Q4 o7 l // an action group, because we want these actions to be6 f# F! F( g& e' q4 a! w# d3 U
// executed in a specific order, but these steps should
& D) Q* \: k8 ~( f" j6 s: m // take no (simulated) time. The M(foo) means "The message
, l2 R2 h7 W% [. ~. y O7 b // called <foo>". You can send a message To a particular3 G: n8 a4 T+ j+ z
// object, or ForEach object in a collection.
4 Z, Z+ b6 L$ A' m; ?+ y) l3 w + K7 u% }/ m4 V3 g
// Note we update the heatspace in two phases: first run
+ v5 t* b, j7 V$ b% _' c // diffusion, then run "updateWorld" to actually enact the+ B3 n/ O# a& w
// changes the heatbugs have made. The ordering here is, z/ V, i! m- \3 ^$ P9 A" \
// significant!
4 n- l0 Z z9 l4 E* n 2 C& x9 b9 M8 ?! K
// Note also, that with the additional) s: @" g, E* g; G; N
// `randomizeHeatbugUpdateOrder' Boolean flag we can' _' Q/ M* W7 S( W: q% _% o
// randomize the order in which the bugs actually run
, v+ |/ B) X {1 n9 v% e( D0 y // their step rule. This has the effect of removing any
; \6 @, S9 @1 E9 M // systematic bias in the iteration throught the heatbug
) Y6 q& q2 w' v' U3 E2 ~ // list from timestep to timestep4 t/ ^9 Y( `( _7 D
* g+ E- u3 ?8 {4 V* D! S9 f) n
// By default, all `createActionForEach' modelActions have
9 K8 Z0 R1 J1 e/ k% n' V/ T5 X* y // a default order of `Sequential', which means that the
& }- Y& W5 r6 T5 t# A& n // order of iteration through the `heatbugList' will be* w* l+ Y Z% D0 i" b
// identical (assuming the list order is not changed0 k. s4 @1 ~8 B0 q8 g2 p
// indirectly by some other process).
# R V& ]# f R, ^7 | % Y- d0 e2 c! `/ s: A
modelActions = new ActionGroupImpl (getZone ());% J) i4 y/ G% E5 |' i1 W- z
( B J' D1 B( y; S
try {9 g' m, b! U3 g" ^
modelActions.createActionTo$message3 F5 p C j+ k# g6 \' C- G" |% R
(heat, new Selector (heat.getClass (), "stepRule", false));
+ q# n- e9 ?8 C! [8 H/ ? } catch (Exception e) {+ {3 I0 I `- o7 p" L6 H/ Z L
System.err.println ("Exception stepRule: " + e.getMessage ());
& d8 z( H6 s7 n" u C }
: Q) g M# ]2 R4 Z: n7 S; G' d. F
9 M: D/ p7 D. Q7 m+ p try {
: p( Y, X6 T- E" O; P6 ? Heatbug proto = (Heatbug) heatbugList.get (0);
! X6 q) B0 E4 @( E; k Selector sel =
- k# t4 g k0 o9 U }0 m new Selector (proto.getClass (), "heatbugStep", false);
" V. [; O# ~6 a: U3 J7 f F actionForEach =
- U) q: s% Y6 p2 e* t3 @ modelActions.createFActionForEachHomogeneous$call/ A5 X% t$ e! N6 u4 g) m
(heatbugList,
& f: M' P5 b& S7 A. |! C, R/ C new FCallImpl (this, proto, sel,
' n; r: v7 ]' q( V( r new FArgumentsImpl (this, sel)));; i1 }7 t1 i. O2 Q0 q
} catch (Exception e) {7 L0 P" a _1 U7 m9 z" z& J
e.printStackTrace (System.err);& h7 T a5 {/ ] u
}' f, D( H- ~ ]+ l, z' ?& G
5 X2 P5 ?; @3 m( d0 L' D. n+ N syncUpdateOrder ();2 Q# l' u: y% e+ u0 y* x
1 O( O3 b2 h1 O* d
try {4 V7 V5 e& J: t* G) Q0 L
modelActions.createActionTo$message / p3 I! G+ }5 _1 }2 j4 f
(heat, new Selector (heat.getClass (), "updateLattice", false));
* a* \; O k. f7 J+ c7 Q } catch (Exception e) {
5 C) y9 h: _! q! {0 Z System.err.println("Exception updateLattice: " + e.getMessage ());. T+ ]2 ]/ R& U
}5 V, z5 W s3 r, W% X
1 o% Q8 B- ]0 ^4 s [ // Then we create a schedule that executes the% `) d8 m- Z y4 F
// modelActions. modelActions is an ActionGroup, by itself it
3 D* S/ Q1 N! Z% @$ S5 j // has no notion of time. In order to have it executed in
& p" [: _* s; H2 ]& k& T3 v // time, we create a Schedule that says to use the( ?# M9 i6 s! T3 U- p2 ?% q
// modelActions ActionGroup at particular times. This
+ B0 M! E! Y/ }6 T+ j$ D/ o" X) B5 o' V // schedule has a repeat interval of 1, it will loop every, p1 K- O4 }( f0 n: x1 P4 r/ V9 d
// time step. The action is executed at time 0 relative to
4 M+ l% O( }* Z) P/ \0 w& J // the beginning of the loop.# |6 `% K$ z4 f& r6 W# U5 j
! W2 |; H9 l* N {3 x* R // This is a simple schedule, with only one action that is Q9 r- V5 z" l/ w
// just repeated every time. See jmousetrap for more' Y6 R* Q4 v& T# @8 Q
// complicated schedules.5 r) X3 O; h5 W% v
; a1 m, Y: v) f3 U( q
modelSchedule = new ScheduleImpl (getZone (), 1);3 h% E/ {, V6 m' X
modelSchedule.at$createAction (0, modelActions);+ Y# Q! Q! `& Z3 ~
5 ^6 r$ _8 Y, U, ?4 B. I- ] return this;
3 X; S! G$ S9 Z; b- \ } |