HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 F6 n0 X: k; E B( B0 a5 M. a. }+ D
public Object buildActions () {& d6 ]+ [ n; `1 s! z0 l$ Y
super.buildActions();
& a/ h# V t( Q$ M S9 ~
+ W, r" z( j+ ]. H4 t0 ? // Create the list of simulation actions. We put these in T3 }3 q0 j4 J
// an action group, because we want these actions to be* P) T. L7 s$ W0 M
// executed in a specific order, but these steps should. ?1 O, r+ r+ ] @2 e! i
// take no (simulated) time. The M(foo) means "The message2 n1 r7 U; C% Q" B7 k/ ?
// called <foo>". You can send a message To a particular: `1 z9 n0 p0 ]
// object, or ForEach object in a collection.
/ o% W! M: r5 y/ c( j6 X" m1 s
' `. a$ l; w$ ]" e: L* m) d // Note we update the heatspace in two phases: first run
4 j9 z- ~( o! C( R9 a7 D& }6 u6 u // diffusion, then run "updateWorld" to actually enact the
! J5 e- x; j- [/ G2 v // changes the heatbugs have made. The ordering here is
- x0 C: Y0 W1 x, A // significant!
- _2 V7 y% `' S + C( Z1 B7 x1 ^8 v
// Note also, that with the additional
- C5 d/ y; @. N) T* v // `randomizeHeatbugUpdateOrder' Boolean flag we can# I5 K! L( r- W! `6 D, k$ ?' ^
// randomize the order in which the bugs actually run
0 K* o2 \. J: F7 U8 Z // their step rule. This has the effect of removing any+ [6 V; P4 l& E8 O1 V: o' T
// systematic bias in the iteration throught the heatbug9 {5 p h& \# M; B" J% K, {
// list from timestep to timestep
( o! X1 f2 U3 `) C5 [: P
/ ^' B7 X$ y9 e+ a8 _/ a Y2 ]; ` // By default, all `createActionForEach' modelActions have% s$ e7 \& {6 e! c
// a default order of `Sequential', which means that the9 ^7 x$ E9 A$ Z
// order of iteration through the `heatbugList' will be
) b! ]% U6 b( H7 b* d- f( r // identical (assuming the list order is not changed/ V0 W8 Q& s6 [% e
// indirectly by some other process).% T G+ S/ `* H% Y# G0 B/ ?# ^
# k2 Q' [4 A6 \5 \ modelActions = new ActionGroupImpl (getZone ());
4 y3 I! o) M) j# R, [# P! y
6 |) N$ R* Z/ O7 c3 ]7 B2 R try {) K) T6 F% E% p3 H$ q( m' T
modelActions.createActionTo$message
! c0 P' X, b+ N7 t* t& q) o1 B$ G: ]9 n, [ (heat, new Selector (heat.getClass (), "stepRule", false));
+ [$ _, y ]+ y0 ~$ d } catch (Exception e) {
' G+ p1 E" H8 v" v% {8 O8 J System.err.println ("Exception stepRule: " + e.getMessage ());7 D) b; @% m) d
}
3 M/ h0 q5 M5 s1 f) T+ Y: F( p6 i3 J( c$ K
try {
: |1 H$ ~. y( S- _# s Heatbug proto = (Heatbug) heatbugList.get (0);1 |3 w2 t- @6 f) ^( ~( D
Selector sel =
1 n: m3 C) O/ d6 i- Q' L new Selector (proto.getClass (), "heatbugStep", false);
9 P- R; }# e8 r actionForEach =
7 F9 T- \- m- g- g. ]/ { modelActions.createFActionForEachHomogeneous$call1 q7 c! G+ g, e! ^9 S: [
(heatbugList,* J5 ]" v! H3 ?8 n* E
new FCallImpl (this, proto, sel,) p8 c/ ]. ~; I; N4 D
new FArgumentsImpl (this, sel)));
1 I9 R( m8 r2 o- o } catch (Exception e) {9 ~1 t6 z, Q" n' ~* Q5 U
e.printStackTrace (System.err);6 U, F6 m6 n. O! }& N
}
# a5 ?3 w* Q, X! b: _
# b+ @3 d0 n. V+ K. b syncUpdateOrder ();
& h% p. M* u8 b/ B+ C0 L* i
) P1 s' |) N8 J& W8 W( h) f3 [5 c try {3 e. v) K& d- a# [( o
modelActions.createActionTo$message
1 [. a2 |2 i# _% G* h1 Q. a (heat, new Selector (heat.getClass (), "updateLattice", false));
+ \9 h F" `9 Y' o/ S9 f. `: o9 {/ j } catch (Exception e) {( T- S8 m" @8 M! [0 z
System.err.println("Exception updateLattice: " + e.getMessage ());9 Q5 ^$ f0 s2 U9 }% b/ I
}( C+ a' ^ v9 p$ V( {' Y$ U
2 }$ V; i; v+ i5 }# f0 W# ~2 I9 C
// Then we create a schedule that executes the# @5 \" b! u, n; `4 w
// modelActions. modelActions is an ActionGroup, by itself it
2 |8 m: {3 T$ t) Z: b // has no notion of time. In order to have it executed in
4 p6 p6 u8 P: R8 i( K // time, we create a Schedule that says to use the% S9 e) Q/ p3 B: F7 u1 ^
// modelActions ActionGroup at particular times. This H- ~* V" k, y5 {* f5 r) D
// schedule has a repeat interval of 1, it will loop every
L* q4 Y( j6 V3 P/ e7 \8 | // time step. The action is executed at time 0 relative to, Z6 ^) G) _9 S& a# E) h
// the beginning of the loop.; y: R. E8 r; p! ~" r9 |7 r7 ]6 y
: s5 q; P4 J, T8 P // This is a simple schedule, with only one action that is
7 q( D/ b' }- Z // just repeated every time. See jmousetrap for more
$ d/ c5 S. J% @: b+ v$ b. o // complicated schedules.
" H2 b X4 a8 G9 g; V1 j 0 D: e' Z8 G% b* I2 J
modelSchedule = new ScheduleImpl (getZone (), 1);
$ B) Y6 k( y- b: G. `/ } modelSchedule.at$createAction (0, modelActions);1 Q0 G4 z* c& ?* D: z# f9 M# A
2 _& ]* ~% D. s S# W0 |8 h
return this;
5 v# {! y2 D$ C0 g( r, v* @ } |