HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! U% J( R0 S: U/ e5 D4 L6 L9 w& K( q& h8 {0 ^, v
public Object buildActions () {
) E4 m$ i+ T4 l super.buildActions();, M2 N+ g9 m# B5 U8 J
5 a) t( h" }: }; r t/ U9 r
// Create the list of simulation actions. We put these in9 a @1 L* {- V4 w
// an action group, because we want these actions to be
! [) \1 J% a7 \8 e* V0 k( h // executed in a specific order, but these steps should
0 P! K3 Y& x P9 X9 U4 Q8 L2 R% k // take no (simulated) time. The M(foo) means "The message
X. ^9 Y3 ^1 ^: r9 q // called <foo>". You can send a message To a particular
~$ k8 G9 w; Z+ g // object, or ForEach object in a collection.
) x. i* u: p5 A1 \9 w- x! u* `! y 1 x; p; I R8 m V5 b" k
// Note we update the heatspace in two phases: first run8 M' B+ `( l( c2 r
// diffusion, then run "updateWorld" to actually enact the! ` W4 ?$ X- p$ B% ]7 @) B
// changes the heatbugs have made. The ordering here is% J- T0 e2 o, g- x3 H V4 k
// significant!$ ?0 B2 B E8 Z5 E8 _6 n
' S1 c% W! }5 s* r1 ^0 o3 z) w) `
// Note also, that with the additional9 }3 o! Q5 f N- K; w) |
// `randomizeHeatbugUpdateOrder' Boolean flag we can! x! g7 _) T# o' x
// randomize the order in which the bugs actually run
" y# q1 k& E ~! y! L/ M" x // their step rule. This has the effect of removing any' _: p' D/ j& o( u) m0 {
// systematic bias in the iteration throught the heatbug
" d8 a5 U% X7 y- g. u2 T* t2 z/ ~ // list from timestep to timestep6 J" w" x+ o" `0 z
" U+ p/ Q. C6 r, Q- c9 ]) ^
// By default, all `createActionForEach' modelActions have
# h" ^. c( C; ~! F // a default order of `Sequential', which means that the
) g- ?) ?7 \- r2 \3 j: a // order of iteration through the `heatbugList' will be
5 J5 J9 g, `8 y // identical (assuming the list order is not changed
7 O3 i! J: R4 U: ~* f // indirectly by some other process).0 z5 w U% K# x" z! W e6 ]
+ g$ M( `* R/ I- |0 q# O( J+ \& J
modelActions = new ActionGroupImpl (getZone ());
0 e5 \5 m; z2 T3 L
- _3 ~/ \# u6 n4 G. X try {4 J E" u# @6 A
modelActions.createActionTo$message: d; J- u2 \( Z, b6 l
(heat, new Selector (heat.getClass (), "stepRule", false));" v- X9 s+ ~1 ]( G% Q7 M8 w4 H; y
} catch (Exception e) {' I& ?; h6 R/ G* ]0 d1 b
System.err.println ("Exception stepRule: " + e.getMessage ());
( U P; _, F0 C4 R7 N }
$ X, Y+ V _) Y. T6 h2 R
2 F0 ?3 k% }% w9 J try {; z5 v- Q% K9 m; L
Heatbug proto = (Heatbug) heatbugList.get (0);: { p2 \5 j/ ^8 X, \1 c& E' Z
Selector sel = ; B8 T: X; h7 ^& p; w/ B; q' c
new Selector (proto.getClass (), "heatbugStep", false);- b" C! J2 }6 }$ m+ r
actionForEach =2 ~- y: Y) t( c9 r3 K- C/ Z
modelActions.createFActionForEachHomogeneous$call
; f) X2 L: R6 J, n (heatbugList,2 G6 u" j9 M; O" r
new FCallImpl (this, proto, sel,
4 ^" |# w, K: }: j" d new FArgumentsImpl (this, sel)));/ E. b6 h2 q: c6 t( c
} catch (Exception e) {# m$ k: z. |) V3 c2 r1 P
e.printStackTrace (System.err);4 n i- C* w, A, b6 B
}6 x5 L; D2 d; W
2 Y; {3 M0 d( I" f( m. C
syncUpdateOrder ();
5 Q/ ?# j, Z2 R' U" X1 `# U5 H1 ~# M, {7 e' Y/ ~# V: H$ c: \: v
try {
& d5 ^' v6 ]7 N% a* {+ z! E; O modelActions.createActionTo$message
2 X p5 B. R" t4 Y J5 F B (heat, new Selector (heat.getClass (), "updateLattice", false));
% Z# e& ?% e. p } catch (Exception e) {
% i! O+ H: h: s7 A6 q' V System.err.println("Exception updateLattice: " + e.getMessage ());
% Y; ^1 ?5 [6 c4 F9 [ }4 y9 S' O& S9 @- E4 s, b
( x; ?' Y( W2 N& b$ H( p // Then we create a schedule that executes the
4 [4 [- h1 a$ O( z s1 x( w // modelActions. modelActions is an ActionGroup, by itself it
% m W8 t' Q' y2 Z+ ?0 a3 C // has no notion of time. In order to have it executed in
$ W$ m$ s4 m7 Z$ D! E, f( Y5 I // time, we create a Schedule that says to use the
0 I! a: a5 ?: R$ C // modelActions ActionGroup at particular times. This% C5 K# d8 h! x9 S2 e) W w, v0 Y
// schedule has a repeat interval of 1, it will loop every/ T) Y9 s2 u/ W. O
// time step. The action is executed at time 0 relative to- e! {/ n/ K6 l
// the beginning of the loop.2 Z+ N* V* ^, |! K$ K3 L
: p6 O9 u" C, A0 [% l. L! Y/ s6 K // This is a simple schedule, with only one action that is9 t" I; |9 N: G) n( F7 C$ {
// just repeated every time. See jmousetrap for more
6 \. F. |5 ^+ t // complicated schedules.
8 L1 r/ w3 r' _: N + y4 f8 [9 V2 d
modelSchedule = new ScheduleImpl (getZone (), 1);8 J, c8 G. w8 p8 Z8 V0 s: C
modelSchedule.at$createAction (0, modelActions);
, T2 f4 P2 W3 @5 ~& @! T0 f 6 K' O* s: C3 s+ l) n9 u
return this;& K2 F( b1 D! E8 [, F1 X
} |