HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
E2 p* v. d: L: Q; j3 B$ _5 `1 r6 f5 ^
public Object buildActions () {* R# L0 P4 C% @ z' Z0 e: @ S* j
super.buildActions();9 X% f4 c5 `* H6 r
* W4 F9 G5 R, c" u3 W- T // Create the list of simulation actions. We put these in" m0 n' T* _! x+ m. k
// an action group, because we want these actions to be
( J n8 }& O/ z1 c2 `, O // executed in a specific order, but these steps should
; q. P# z3 p3 l% s# C // take no (simulated) time. The M(foo) means "The message
" f5 t: Y; `$ T3 G" R6 H // called <foo>". You can send a message To a particular5 j3 L/ p- w8 J, y/ d& O
// object, or ForEach object in a collection., R2 D; G0 W8 I5 ]% w
0 x- M6 B) I" R f& f! E // Note we update the heatspace in two phases: first run/ E" C2 k& g7 L8 ^9 s) X- h* g, @
// diffusion, then run "updateWorld" to actually enact the; j/ T0 b' A4 ?$ u+ g1 {! X, i
// changes the heatbugs have made. The ordering here is
* J' |) W2 ~; e* G! v) K1 y9 T // significant!0 d5 l3 V6 h7 r" w
! V( t8 j& t5 |) v: d3 D$ _
// Note also, that with the additional! A. i! S+ K& i1 D: V1 P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( w' l+ M2 w( U // randomize the order in which the bugs actually run0 L& g- _* b) A( |/ m, B* v) Z1 D
// their step rule. This has the effect of removing any
$ W* _8 j1 W+ L7 J* ~$ `& ]. G6 x' W // systematic bias in the iteration throught the heatbug) A9 y8 b: B6 J
// list from timestep to timestep3 u- l7 y+ n$ d
* m* r! `) a e1 b8 B# z& O0 v // By default, all `createActionForEach' modelActions have: p, ]( h" @( [4 H
// a default order of `Sequential', which means that the
' J& ~- o+ D9 \ // order of iteration through the `heatbugList' will be
! {; t8 k9 T G // identical (assuming the list order is not changed
! L' A/ l5 y$ Z6 L6 b // indirectly by some other process)., u' S, U# d4 U/ P V% U
1 P/ P! ~- \! }
modelActions = new ActionGroupImpl (getZone ());
' R# M5 B W1 U2 H3 l* k o, g: R1 v$ ~% _6 f4 a
try {4 [2 L7 g: F9 X$ j
modelActions.createActionTo$message
8 R% Q7 G+ S: d& V, r' d (heat, new Selector (heat.getClass (), "stepRule", false));/ m1 L" p* S+ J0 t4 Q( q$ A/ x) [
} catch (Exception e) {
" L; _6 r" q# D% l$ a, B System.err.println ("Exception stepRule: " + e.getMessage ()); R- y5 ^' ]' h: m$ b6 d
}
# ~5 [6 F5 T i2 w0 R5 u" I3 Z! o, L F. N) B1 C' Y
try {$ q6 T: q Q( W h! \8 l% X0 u
Heatbug proto = (Heatbug) heatbugList.get (0);+ F' J/ x/ ?! x2 s! z: f
Selector sel = # S7 T3 I. T! R6 `. f' c& Y" L
new Selector (proto.getClass (), "heatbugStep", false);8 X$ v* ?7 T) L' w2 w7 O2 _* H
actionForEach =5 h7 R* w3 F9 ]1 w8 Z3 X: {9 R
modelActions.createFActionForEachHomogeneous$call3 `0 Q H r' }) ]2 r* I+ G
(heatbugList,8 p1 A5 W* C' L; z$ Q& r$ R
new FCallImpl (this, proto, sel,/ f# s0 d: A$ }! J1 @: @
new FArgumentsImpl (this, sel)));% ^ ?! |7 a9 s* a( x2 k: m \
} catch (Exception e) {
) H+ J$ {4 S* N+ j( _% {3 I/ { e.printStackTrace (System.err);4 z2 N* H2 j, d b
}% {/ k f4 K4 r+ L
" z1 z. J* W a syncUpdateOrder ();
( f3 `- V0 T3 y$ u3 L4 x7 s. W3 Y
9 g8 S* Q: i: Q: n" ^! t) |) |" q try {
6 j2 p7 C8 p1 T! D1 d- X# D modelActions.createActionTo$message : o( I; i% a! i D& ~4 x
(heat, new Selector (heat.getClass (), "updateLattice", false));
' |. S4 |- z7 x* B; A( L9 ~ } catch (Exception e) {
, k( S# ?2 r# j0 t1 S! H% R System.err.println("Exception updateLattice: " + e.getMessage ());2 y! |; E5 g: j7 ^) k% Y" q/ G
}
7 _7 [+ R, T0 X' F/ y & m$ A [: h7 G9 H, r& f" Y
// Then we create a schedule that executes the
[, {" _- U6 H" S. K4 a! W6 Y // modelActions. modelActions is an ActionGroup, by itself it
( S, N8 V5 C" ^6 r6 T+ z // has no notion of time. In order to have it executed in
7 ^- F, h2 d* P% M7 O3 x' w // time, we create a Schedule that says to use the2 d& F& Q1 k H4 Z9 g) o
// modelActions ActionGroup at particular times. This$ h3 e# Z$ J( J. C9 G+ Q5 K( U( e( P
// schedule has a repeat interval of 1, it will loop every
3 B3 U8 ?+ n( C0 A7 f6 } // time step. The action is executed at time 0 relative to: n% p" }3 C/ g8 L4 p- G" U# y1 j
// the beginning of the loop.
+ K5 z/ b& ^5 p& c; d" h$ f9 c. k3 i0 d6 }( O' w: j
// This is a simple schedule, with only one action that is% K# u Y/ B! ?3 X& ^
// just repeated every time. See jmousetrap for more0 H3 T+ b* ?( p5 h; ]2 \: C9 l1 c
// complicated schedules., L' A0 M8 R+ H5 N* \9 i
( v/ C. M! `7 w# K
modelSchedule = new ScheduleImpl (getZone (), 1);
2 u3 b& ?: C) B# j$ |( E0 ? modelSchedule.at$createAction (0, modelActions);
5 A. J0 Q; o* m+ p
6 A" {+ J8 d1 f; n; G8 V return this;0 C4 Z9 l) W6 d0 D4 z
} |