HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; k$ |9 F1 p" c5 {# U: B1 k
, b' i6 k4 n" Q# d3 G public Object buildActions () {
+ ~* ^* j% N1 D super.buildActions();
3 E2 {' R5 Y8 T8 J9 C ' c$ O" v Q& N0 u, o' L
// Create the list of simulation actions. We put these in
% V. w* J) |2 S0 |( A4 A // an action group, because we want these actions to be
3 {5 u9 S& p0 M& x. x7 A+ T // executed in a specific order, but these steps should( O8 _- Z/ y. z& G. I( Z: {
// take no (simulated) time. The M(foo) means "The message
7 i" f+ @2 R; e // called <foo>". You can send a message To a particular
1 k* v$ |0 t( K; ?' X( W% V- R4 } // object, or ForEach object in a collection.
0 p" A* R$ E; G m1 | . @0 V) Z4 o+ [* ?% r" t
// Note we update the heatspace in two phases: first run
" v p$ c: ]9 O7 X! M: O // diffusion, then run "updateWorld" to actually enact the
7 E: m5 E% H; ~5 G" p9 B // changes the heatbugs have made. The ordering here is
* x: b3 ]4 T: T // significant!
! f7 U# \: j" r9 Y8 b + `# ?2 u; `+ b' G, j
// Note also, that with the additional$ }- T+ j/ s: `# r
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 }7 N2 k+ S, W! g7 X5 N // randomize the order in which the bugs actually run2 f% ^9 F, W- I% M
// their step rule. This has the effect of removing any) Y* e/ h" c6 T; v. ^/ v: T
// systematic bias in the iteration throught the heatbug
% n' P' t6 Y6 x0 ?$ q' s // list from timestep to timestep+ Q' n2 g5 M9 g$ l6 B% w; c
# K* v9 H6 z7 g4 V2 J2 v% T v9 [ // By default, all `createActionForEach' modelActions have
4 V1 }5 C% X9 G. E // a default order of `Sequential', which means that the/ f' @8 _; s& h1 k5 U# W
// order of iteration through the `heatbugList' will be
. B- c6 j0 y. ~$ N // identical (assuming the list order is not changed
1 T* U1 Z) w9 m+ n4 R+ Q // indirectly by some other process).: k. p# ?' d( P7 M
7 R; |& x u3 ]% M modelActions = new ActionGroupImpl (getZone ());
. v2 F) T, E: ~+ t# f
' M- P8 k- k F9 V try {
9 x( `$ [2 S V modelActions.createActionTo$message
3 F8 [7 d3 h2 q1 M9 Z. x! r( v (heat, new Selector (heat.getClass (), "stepRule", false));: n/ J/ A1 u- x8 q: E
} catch (Exception e) {9 S! t, Y; [8 J- Z4 [3 l4 ` x
System.err.println ("Exception stepRule: " + e.getMessage ());9 P% y& _' e4 D5 J! r: A% m
}
% l; b3 S' J8 S$ {5 K! \+ h/ _0 H1 k8 I; `* b" f( S3 i# d
try {
/ d4 {" E& B8 A2 l2 ^ Heatbug proto = (Heatbug) heatbugList.get (0);
0 R( @' w3 Z5 D Selector sel = * _( ]+ D( I/ ?# S4 q
new Selector (proto.getClass (), "heatbugStep", false);: e9 ~7 S& t# p3 F8 T7 k
actionForEach =& U3 q6 R I8 p
modelActions.createFActionForEachHomogeneous$call
* q2 w1 q9 f: E) L (heatbugList,8 P6 l K' b! L
new FCallImpl (this, proto, sel,% N' P% X& e$ W9 k1 j" C
new FArgumentsImpl (this, sel)));9 \( O/ ^2 i3 \
} catch (Exception e) {: W5 g( R: K% ~( p; T1 L
e.printStackTrace (System.err);# ^$ @0 D( S& r" d9 r$ y9 O
}6 s5 t+ m/ |, C/ f4 w
/ c: {9 H# Q8 }% _4 c1 [# S+ a syncUpdateOrder ();
( h3 g8 K: q0 F* T1 T: i& w3 l
# x, j$ s s* d# U% T4 p try {% m9 P ~8 n9 z, _7 W3 Y
modelActions.createActionTo$message
5 B' R1 g" ]3 S( G R/ f (heat, new Selector (heat.getClass (), "updateLattice", false));; @) _6 _# u) n' f; c
} catch (Exception e) {
- `( H8 j* J6 D Y# n6 s System.err.println("Exception updateLattice: " + e.getMessage ());
! }. N( t/ p" x, h8 g }: i, {: A2 A: @8 g8 ^0 B3 O
% A o( n, E3 q/ n5 n0 P
// Then we create a schedule that executes the: j) \6 U3 \+ s) V
// modelActions. modelActions is an ActionGroup, by itself it
9 {, _5 M I7 N# s8 G // has no notion of time. In order to have it executed in$ z2 Y3 w" j8 k2 {' {1 J5 I
// time, we create a Schedule that says to use the
7 l+ @6 t+ }2 z2 j // modelActions ActionGroup at particular times. This
7 {* v- b; A; @/ e* x3 X( s // schedule has a repeat interval of 1, it will loop every
) g' q& j9 G4 Z9 @ // time step. The action is executed at time 0 relative to
% n2 p. _4 a; l$ n // the beginning of the loop.
2 H- M1 C$ [) }. Y6 A% {4 l' {1 }# k& s# }8 H
// This is a simple schedule, with only one action that is
; e$ d5 \0 c& H; _0 ?* c" Z // just repeated every time. See jmousetrap for more
: g5 |# }; O9 H! Q2 D( k' ]& | // complicated schedules.
8 M3 G/ j- ^6 P; d% c* \4 e
9 ^( D' Z' H7 D0 ] modelSchedule = new ScheduleImpl (getZone (), 1);
) m$ Z9 j, O2 o% h: h$ O& y" k2 [ modelSchedule.at$createAction (0, modelActions);2 I' d! Q6 S$ |$ {+ z& `
' v' _& @3 D* U4 t8 @ return this;
0 M' H6 C1 \1 b) y } |