HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) m2 H; B7 |9 c9 ?+ U7 t
( t5 s- \; z1 V# p public Object buildActions () {
: J4 k- _0 ]2 X% b+ }, k super.buildActions();
( A; l! ^1 R6 t, y
& G* a) O9 O7 ^- A // Create the list of simulation actions. We put these in# h7 d- F; k+ ^6 [! W' O a- M; E
// an action group, because we want these actions to be
3 ?( M7 E3 f" B: _! x% o // executed in a specific order, but these steps should: h, D$ [ m: H3 @$ A
// take no (simulated) time. The M(foo) means "The message
8 }, u6 o/ s3 G% H' K4 c; x // called <foo>". You can send a message To a particular
m$ m9 T$ W( ^; f% x5 H // object, or ForEach object in a collection.
# r8 R+ k2 j8 a
2 |4 \- _% ~. h0 P0 o6 E // Note we update the heatspace in two phases: first run
8 Q; ]. m' j9 I8 H // diffusion, then run "updateWorld" to actually enact the
' |" j0 Q/ p' d l* o3 G // changes the heatbugs have made. The ordering here is
+ [: V% B6 ]/ F5 V: t& Y1 G // significant!8 s" l: r/ ~0 \- d( c) _. ?) N
6 x; }, j+ j7 ?' ^; q4 V
// Note also, that with the additional( [9 I w( T3 ^9 s( q K* V' C
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 G' t7 b1 T* W# y+ K // randomize the order in which the bugs actually run# P& d& R* g1 ]& ?+ z# }; H8 d. @ t9 P
// their step rule. This has the effect of removing any
8 A8 G. j2 D( i# R, |! r // systematic bias in the iteration throught the heatbug2 ~& s& q3 ]( k7 t! B! b* S6 l; A% R
// list from timestep to timestep5 x# T+ U7 w* l) ?
5 Y- L7 _& @0 A% N0 X+ f
// By default, all `createActionForEach' modelActions have
; O. b% W( Y+ r v# w // a default order of `Sequential', which means that the4 V4 b$ K# V1 u1 ]
// order of iteration through the `heatbugList' will be! w0 b1 ^7 [5 d6 @
// identical (assuming the list order is not changed* t2 A" j- X. Q8 ?* r' v
// indirectly by some other process).
6 p$ V6 A/ `/ s; ^' `+ H! A
5 E' k" s' O e modelActions = new ActionGroupImpl (getZone ());: T* R( P/ U: _3 x
- I y" l) z& a+ i/ W* n. v$ |3 J
try {
9 `. B1 ?! Z6 X6 n0 h modelActions.createActionTo$message
) b7 X% C0 o$ c( \ (heat, new Selector (heat.getClass (), "stepRule", false));3 z8 e. b. k% N7 {2 P+ z6 Q
} catch (Exception e) {$ Y7 L8 p U) i6 c" m8 p7 S! o
System.err.println ("Exception stepRule: " + e.getMessage ());" N9 a2 a0 j( v+ O2 @! [9 o
}0 N5 Y+ v! y/ @: d$ z4 L) i
+ _7 P5 ?7 R) R try {. @" B5 g* {2 v+ z
Heatbug proto = (Heatbug) heatbugList.get (0);, |3 m& U6 _) @. I8 `
Selector sel =
" W5 A; z4 D. K; t1 V+ l' V4 {/ C new Selector (proto.getClass (), "heatbugStep", false);- B' _: u% U2 J
actionForEach =
+ G+ U5 l1 U- l/ j+ T3 k modelActions.createFActionForEachHomogeneous$call1 E+ v4 R& u8 {' Y; Q) u
(heatbugList,5 e/ j. z$ z5 ] Q( R9 J
new FCallImpl (this, proto, sel,
7 ^+ M6 @+ c4 K6 J new FArgumentsImpl (this, sel)));
! b& G) v+ Q+ y } catch (Exception e) {
) H. k! M) s8 T( k# T e.printStackTrace (System.err);0 y) ^* l" u! U( N k
}1 F9 z# p. X3 |3 v
) O5 X/ [' b( y; ~. r
syncUpdateOrder ();+ @* t: w. g' m3 o
- r! n6 {( j V. G
try {8 F j8 J. D( G0 Q' H+ a7 I% b
modelActions.createActionTo$message # Q: }1 F+ V$ @% F& j. ~7 h
(heat, new Selector (heat.getClass (), "updateLattice", false));1 _2 @7 ?% W& D4 t
} catch (Exception e) {) b M# a4 j# x0 [
System.err.println("Exception updateLattice: " + e.getMessage ());
7 |; M) K5 s- B }
' `& s# A7 ^* C5 r. u9 n9 p
7 W; L+ I5 G" E$ A9 T9 A% A8 x // Then we create a schedule that executes the
8 d6 b4 W, S+ X* w* S" o // modelActions. modelActions is an ActionGroup, by itself it
- H* n3 _3 o8 N7 n5 Y( W // has no notion of time. In order to have it executed in
9 Y( D+ Z: b1 e& V/ i // time, we create a Schedule that says to use the$ F7 t, Y* B. w( q# q% Q' x4 b1 [" i
// modelActions ActionGroup at particular times. This" [6 k/ @5 L: w
// schedule has a repeat interval of 1, it will loop every" z) ]. O- p+ [& J0 @
// time step. The action is executed at time 0 relative to( C) E( k. D- u! E8 I' w3 n0 R x6 Z
// the beginning of the loop.
. G% d* v/ l! H
+ b/ ]* w5 ]6 Z% C& B" N* g // This is a simple schedule, with only one action that is
) m. M8 N, T7 z5 V // just repeated every time. See jmousetrap for more4 A. [1 n$ a; `; Q, T# C
// complicated schedules.: q$ K3 o9 a' _9 O, h' w
6 l! J$ }: y4 ?8 s
modelSchedule = new ScheduleImpl (getZone (), 1);
4 q& D* K, N: @* \0 h modelSchedule.at$createAction (0, modelActions);
: t" |; s1 {5 d9 d& R 8 T/ u/ \' B% M, [
return this;
# B# x: z% C9 I: J5 R- U4 o } |