HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 b$ U2 B. z3 C; h. G R
/ X* V# D7 o* k" G* z- W public Object buildActions () {
+ m9 e. ?8 ~* b D+ S7 N. |3 I- c super.buildActions();+ @0 E, o1 T1 U- j' s. q
5 v9 q7 A, C) Z+ j& U/ ~ // Create the list of simulation actions. We put these in
% j1 H$ Z' q Q3 u( g8 {4 y ? // an action group, because we want these actions to be3 v% \5 n2 R8 |7 `
// executed in a specific order, but these steps should
# v6 r/ |. ?0 c // take no (simulated) time. The M(foo) means "The message
3 B/ h3 ^5 z1 W: R: z4 Q: @7 x // called <foo>". You can send a message To a particular
" ^9 r9 t# {& m# [# T' L // object, or ForEach object in a collection.
0 q. `3 M9 H' v/ q4 Y( [ $ I% r, l* U6 ^5 D" e0 Q
// Note we update the heatspace in two phases: first run
1 r3 ?/ s8 c+ g0 K1 G3 @* J // diffusion, then run "updateWorld" to actually enact the
3 w/ A* V$ M6 u% \ // changes the heatbugs have made. The ordering here is' i6 u* r: C# m6 b9 C1 H" W J! v0 F
// significant!* J1 \& Y9 ] l
0 ]8 k, C7 Q A% M3 L+ R // Note also, that with the additional
d; K% P! j- \6 `( N. P // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 B6 r" D# ^+ `! G2 b, L$ i // randomize the order in which the bugs actually run0 Z; c2 y8 y' Z$ ^, f% f) H
// their step rule. This has the effect of removing any
- g* D' x7 V) Q& b8 W) V // systematic bias in the iteration throught the heatbug" h" ?$ d. s9 P) b) g. j- o
// list from timestep to timestep
2 X' V3 F( u) Z2 ^; `
K( p, y8 G3 `& J+ t // By default, all `createActionForEach' modelActions have
) s2 Z' X5 q* } // a default order of `Sequential', which means that the" M4 z+ @$ C; F
// order of iteration through the `heatbugList' will be
$ I/ h3 Z2 G0 u$ H& a // identical (assuming the list order is not changed
: q- t; e( \) S: ^) J // indirectly by some other process).* C* G$ F' _# ~& z# L
, M+ e# e# {" f- B
modelActions = new ActionGroupImpl (getZone ());
0 I9 y f @# y3 @! F; c X$ s" b6 b, z
try {: Q3 s) ]: S" d
modelActions.createActionTo$message
' s4 P0 u$ y5 n8 E* F p (heat, new Selector (heat.getClass (), "stepRule", false));( p x/ A$ {/ J1 s. A
} catch (Exception e) {5 \3 ?& u) y2 U; ]
System.err.println ("Exception stepRule: " + e.getMessage ());
Z5 h5 b* O D+ d1 R' h, B }
% a( A2 ^) ]9 q. s0 w8 z: y7 L! O' b& W
try {. n" i; K% V- g
Heatbug proto = (Heatbug) heatbugList.get (0);
F3 r+ D6 Z9 |. G3 G0 K Selector sel =
2 K o$ M5 N7 \0 k. ^/ ` new Selector (proto.getClass (), "heatbugStep", false);
8 w% Q% i' |( ?0 n. G/ b actionForEach =7 d0 @. F1 V% D0 b
modelActions.createFActionForEachHomogeneous$call$ ?# a+ g1 O, I4 P
(heatbugList,
6 F7 m4 x0 v) ~7 ^- C new FCallImpl (this, proto, sel,- o4 Y2 J$ w& P! B" ~
new FArgumentsImpl (this, sel)));" B" _3 f [7 k# n" r z
} catch (Exception e) {
% m6 N8 o* r. q y! A0 T1 c e.printStackTrace (System.err);) Y/ _; _6 p8 ^
}0 A( W) E7 |0 B
2 [# j- U/ Y! e( y. P; M syncUpdateOrder ();
6 h- k$ |$ I" Q( D8 r1 C# c( ~3 Q( E( {) y/ D, e
try {: y0 z# W2 o0 Q3 l u6 x
modelActions.createActionTo$message
; e4 {$ Q6 c, b' x) w (heat, new Selector (heat.getClass (), "updateLattice", false));5 f4 x4 r' K* B9 H1 N4 O
} catch (Exception e) {
. I, {7 D) U3 m8 Q7 } System.err.println("Exception updateLattice: " + e.getMessage ());& u! h4 n" c [
}6 j7 I4 T2 t' c/ u T* F
' }* ~ m1 |6 N" [9 V" ]
// Then we create a schedule that executes the4 D0 I8 R- ]2 J4 |; s3 E5 A
// modelActions. modelActions is an ActionGroup, by itself it" Y; y! S# y2 m m% s$ z9 T
// has no notion of time. In order to have it executed in% [/ \/ D' t' E3 `
// time, we create a Schedule that says to use the
( I d% g% ~/ a- l0 g+ i( W: B // modelActions ActionGroup at particular times. This# w& N0 d/ ?) H% u& B9 ~9 U' x
// schedule has a repeat interval of 1, it will loop every
, c# a& K2 l. `" q) |& K6 G7 N // time step. The action is executed at time 0 relative to7 o* i4 j3 n& y$ X8 @, J
// the beginning of the loop.: T4 z$ D8 ~8 f/ [# d, n
H5 R0 i1 l I
// This is a simple schedule, with only one action that is; @+ i5 x5 M b" ]! u) E7 l8 w
// just repeated every time. See jmousetrap for more+ s2 q) Y5 A0 j2 m; e ?2 \* J$ x2 V
// complicated schedules.. w8 w6 @4 A& _# E1 b
* @* Z" u1 ^8 @5 }) A q( G3 M modelSchedule = new ScheduleImpl (getZone (), 1);
" [ E# f! X- M, C/ c: U modelSchedule.at$createAction (0, modelActions);
$ j* ~1 g2 O- M& Z7 G6 V ; {4 I0 k- k9 K: n9 g5 E9 e2 M8 ~
return this;( D* m7 L! r+ v2 i h' B: h
} |