HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; E" v7 o# N+ H+ G( Z6 {, U
! A; F# a9 I( L; L public Object buildActions () {( a1 R8 D# H7 y* {
super.buildActions();
3 Y, a3 O3 \" R4 l+ g
( H" o7 ?3 ?% |9 A0 V // Create the list of simulation actions. We put these in1 _" \/ f c. _1 h2 u
// an action group, because we want these actions to be
( ?2 ]# V% s B1 H4 w: B9 ]' X // executed in a specific order, but these steps should
: l0 `3 U; x# I! b" k) @ // take no (simulated) time. The M(foo) means "The message
6 g. J) x0 h3 ?' J8 l // called <foo>". You can send a message To a particular
! F& ~5 r* o. d8 ]5 @" l. K // object, or ForEach object in a collection.
" g+ R: A1 m& D# i4 c" ? : ?+ ~& N! _! u) c$ B
// Note we update the heatspace in two phases: first run& N L( _. t7 z% ]/ @& D' ]' F5 O, J
// diffusion, then run "updateWorld" to actually enact the
( `5 C4 \, r2 ?: x2 o) Y5 T! t( N // changes the heatbugs have made. The ordering here is
4 [( n( v7 H- |4 ^' V/ E' f // significant!/ v8 p- \3 B* A% t2 V
8 P, f' u( u( q; U' I" j+ m0 l // Note also, that with the additional
; y3 ?) h! J- f4 }7 q // `randomizeHeatbugUpdateOrder' Boolean flag we can1 M# k; q! a# `3 O
// randomize the order in which the bugs actually run
$ a0 U7 D, J# ]2 A, N$ D5 f( D* N j- g // their step rule. This has the effect of removing any
* m; [, [6 z$ q! G7 q n; o // systematic bias in the iteration throught the heatbug
2 o# g3 g3 d4 Q/ A9 X) _) O% h // list from timestep to timestep
, |5 C& U& Q% t& x
; j5 y4 q1 S* S I // By default, all `createActionForEach' modelActions have
) P5 F a5 _5 v- C& K( [ // a default order of `Sequential', which means that the' a& P. g3 i2 T2 S/ F
// order of iteration through the `heatbugList' will be
- T0 p0 b6 b" {' E; D+ U/ s // identical (assuming the list order is not changed
* |# u+ q! s" L' \' h7 U6 m& W // indirectly by some other process).2 e0 A6 S' n0 U) S4 C+ m
. i" ?! @% `! ]9 E modelActions = new ActionGroupImpl (getZone ());4 O2 y h3 P* `7 A
9 i$ u# I0 Y! h- I' Y- E% g( ~+ W7 {+ K
try {
2 v x, m% q7 i9 y9 ]$ D modelActions.createActionTo$message/ _ P# F" r/ b1 f0 @
(heat, new Selector (heat.getClass (), "stepRule", false));5 R( ^6 w' ?, ?
} catch (Exception e) {
3 ]) M3 D# w) U System.err.println ("Exception stepRule: " + e.getMessage ());3 i) o) \1 t! k
}
" u! O$ V1 p* I2 x
, h0 w# ?% I$ L% Y try {( c- t* N( O. M' j' N$ h
Heatbug proto = (Heatbug) heatbugList.get (0);+ R& J6 p0 E$ g% u. l( g3 u
Selector sel = & |9 |3 K1 q2 C: G; u( I) j
new Selector (proto.getClass (), "heatbugStep", false);. P8 b+ U. {4 q" }3 d1 G& s
actionForEach =
: E4 f, g+ f7 w: S ^: Y2 X modelActions.createFActionForEachHomogeneous$call; r8 X" k E' H5 u2 E3 [- h- N
(heatbugList,
+ C) n/ N# F: |, T+ Y3 w4 ~# t new FCallImpl (this, proto, sel,
( W; K$ c; L/ I/ I! s8 f6 h new FArgumentsImpl (this, sel)));; p) m" Y; i( X0 k
} catch (Exception e) {
( a, W% j/ u8 J& m e.printStackTrace (System.err);6 ?. S9 {, b3 g1 F1 Q K
}
' S1 x1 [% W8 t% i$ C8 g $ \. @# _" h; O. d0 F
syncUpdateOrder ();, S* d! y; Z: v& D+ i
, P5 l0 D" F! X3 h try {$ L" |; F* W( s, W0 G
modelActions.createActionTo$message
( y9 g! L. S0 F (heat, new Selector (heat.getClass (), "updateLattice", false));! v- M/ o3 r2 p* P
} catch (Exception e) {
. m$ s" U: z% `+ V System.err.println("Exception updateLattice: " + e.getMessage ());
4 @4 g! N. r0 _& N7 U, f }
) ^4 R9 X# E7 n3 E7 X
) |: u8 `. V8 b! u# D // Then we create a schedule that executes the2 [+ @$ s0 ?$ `/ @
// modelActions. modelActions is an ActionGroup, by itself it
8 j5 J6 p0 @+ u+ g // has no notion of time. In order to have it executed in L+ w! C- y+ l( F+ M$ @
// time, we create a Schedule that says to use the
4 P- B" i/ o) J% X0 v% x // modelActions ActionGroup at particular times. This) }- u+ x6 V" D% c+ A7 d/ T+ [
// schedule has a repeat interval of 1, it will loop every% K% ?* v5 u+ W6 w5 P, X6 r
// time step. The action is executed at time 0 relative to& i" c( g# v+ p, _4 W6 ?
// the beginning of the loop.
U% E0 v4 \) v& I3 k# V! |, q' i! Y8 P E
// This is a simple schedule, with only one action that is
4 B, e+ G' W3 C // just repeated every time. See jmousetrap for more
6 A, b1 t" I# H // complicated schedules.
. J9 A: _) M* @4 d8 ?: p7 y3 v- ^
- ] T4 U9 X3 @/ Z modelSchedule = new ScheduleImpl (getZone (), 1);
* M8 o8 _; a6 r. u6 _ modelSchedule.at$createAction (0, modelActions);# q& b6 c# M: t6 d$ A
: M9 D8 O9 x, Y5 ]: e. A7 B2 m
return this;% _% w2 j/ s% e5 j7 n2 x! Y
} |