HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, K. U# u& A0 S
7 y5 S H3 Z3 K" K. n/ W
public Object buildActions () {
9 |( Z2 S* Y! L! D, ]/ O super.buildActions();0 M$ X4 _0 o8 r: [" J7 L
+ `, Z' f, l+ F! b
// Create the list of simulation actions. We put these in
+ n. E3 S' W" Z: f // an action group, because we want these actions to be
* }/ z! C- B5 W7 u+ k$ c // executed in a specific order, but these steps should% d- k. k, d' L% d; V( T
// take no (simulated) time. The M(foo) means "The message0 X9 r' v& w" y. z4 d- u U
// called <foo>". You can send a message To a particular t" ^- r) q* j, A, p1 B
// object, or ForEach object in a collection.
7 l2 X* r" ^$ `
3 k3 G9 N5 x B' J3 X6 ^ // Note we update the heatspace in two phases: first run
5 I$ N8 N0 a& T6 A) e( i7 E4 g // diffusion, then run "updateWorld" to actually enact the: h1 x1 C; G8 i9 U1 x2 U
// changes the heatbugs have made. The ordering here is
1 ?0 Y& j- p _& _ // significant!0 F( X6 M e- X: P2 A+ A' b& \
: L- x" x% j, D9 U8 ]$ \
// Note also, that with the additional
' |% Y+ ^3 y2 F& O/ O0 z // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 I8 e6 W' q5 \9 Z. Q // randomize the order in which the bugs actually run% M. u( O7 |. ?" \
// their step rule. This has the effect of removing any: \1 U0 y- j1 |+ C: t- f. b
// systematic bias in the iteration throught the heatbug
/ Z/ S1 m( @$ ?' H // list from timestep to timestep$ p; F% Z: g) X9 t" I& H% [
9 G' k8 r9 q2 L( @* k; y( Z) J // By default, all `createActionForEach' modelActions have# c+ S) ~. Q/ `5 l; a4 N
// a default order of `Sequential', which means that the' J/ _/ l8 S& w5 P$ N: Y) a8 o/ K1 g
// order of iteration through the `heatbugList' will be! B, d) O8 i( r8 T3 @4 H6 [7 P: E* e, T
// identical (assuming the list order is not changed
3 ]* u1 ?; E% w) p7 i ?5 h/ y // indirectly by some other process).
; r: o& x q6 L5 z, O) S/ ~
8 t+ a" J$ _" R( h! N9 D modelActions = new ActionGroupImpl (getZone ());
6 z! b' Q7 G% Q+ s2 ~* D7 [8 v- J; j& A9 d1 u, F3 ?0 G4 F. k' g
try {
3 \3 y# X7 m% [+ v1 r4 l9 b o modelActions.createActionTo$message
' R9 Z0 j! P6 y/ a1 X/ C' W' w5 X (heat, new Selector (heat.getClass (), "stepRule", false));. \+ c2 P v6 E# E6 ] F$ ]
} catch (Exception e) {
4 C+ E o3 B- M System.err.println ("Exception stepRule: " + e.getMessage ());
! W! N6 l! [0 t. i9 f6 n* a" q }
; Y7 E Y! k8 U% u5 H. ?
! q. K9 j5 r2 l( x$ R3 P try {
6 g$ k" n: o+ s' Y* } Heatbug proto = (Heatbug) heatbugList.get (0);
0 N! }& N P( o h1 Y! V Selector sel =
" ^$ q' ]; l, w( F' E new Selector (proto.getClass (), "heatbugStep", false); S) y' e" r7 n1 }. p' W' H- t
actionForEach =& y/ E" n$ g9 Z7 @
modelActions.createFActionForEachHomogeneous$call# `) P) u( }9 w; G$ t
(heatbugList,
$ ?6 A, M' B# {- R new FCallImpl (this, proto, sel,4 W" G3 Y$ |7 }* N( l
new FArgumentsImpl (this, sel)));) I& Q4 ]' @5 O4 ~0 X, H1 o
} catch (Exception e) {6 T! x0 V) s1 h/ V7 ^9 L; T6 g
e.printStackTrace (System.err);
3 N0 a2 D z& T }$ i* v) S0 N) ?3 c! b
$ ^1 [4 `5 t( w7 A
syncUpdateOrder ();6 Q* v: L9 ] \8 W$ s- p3 z- ~' g( k
q) f+ a5 t6 `/ c$ n
try {% _/ L) ?. r+ ~# C( R: w1 f
modelActions.createActionTo$message
. M! \0 }2 c& f; E$ l+ D( y (heat, new Selector (heat.getClass (), "updateLattice", false));
5 i4 c/ B) ]9 K8 |; ?9 D8 { } catch (Exception e) {
" H) m9 h! z, l0 x5 A& q9 \( H& i6 Z System.err.println("Exception updateLattice: " + e.getMessage ());
7 w7 j, E9 G/ A5 r }
7 a; K8 j, y* Z6 o3 Y
9 t- ]4 u' V' N9 a$ G, P: A8 W) m4 s9 ~ // Then we create a schedule that executes the# ]! n+ }+ H4 Z7 r1 a
// modelActions. modelActions is an ActionGroup, by itself it
6 _5 _: A0 D( Q$ T5 b/ E // has no notion of time. In order to have it executed in
+ H; z3 P ~ F H8 M // time, we create a Schedule that says to use the @ N4 d7 j! [& u, \2 H
// modelActions ActionGroup at particular times. This9 i' N+ p) O2 [6 p0 A9 Y
// schedule has a repeat interval of 1, it will loop every
8 J4 J* Y K3 ~* e" ]) ]$ T // time step. The action is executed at time 0 relative to
$ K# V: b0 y# a // the beginning of the loop.
% T5 @1 j: D2 U4 |3 G
* `5 C* l- t1 r" L6 } // This is a simple schedule, with only one action that is
2 x4 k y: U/ q& Q, N: u u // just repeated every time. See jmousetrap for more
& F5 r% d$ K, \4 R; h1 W n6 y7 X // complicated schedules.
" ]. w' _% X+ w5 `
# ~' `7 t$ `, i7 k; j& V; f% X modelSchedule = new ScheduleImpl (getZone (), 1);4 n, j2 C% E( N' U+ M8 g' o# ?: a
modelSchedule.at$createAction (0, modelActions);' C5 B2 A) I8 _, k2 [9 R& V. y
% r& H) _5 p2 r* o, C4 y1 ^3 ]& U
return this;
6 L& r" {/ `4 k* l/ r } |