HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( T' n, |& z3 Y; T" `
) F' d' \2 T2 R1 K public Object buildActions () {
5 E; a+ z1 h; C% ^% |% s super.buildActions();' }, {2 J+ B0 @# I
, u( X" R2 \: P2 e
// Create the list of simulation actions. We put these in
. _) E) H1 \' T* t* k // an action group, because we want these actions to be
9 M; v' `, S# Y: x5 t" K& O' n // executed in a specific order, but these steps should
7 `, y0 h5 K0 W* R+ ^% ^( E; _ // take no (simulated) time. The M(foo) means "The message' S& q. p) E9 J& V
// called <foo>". You can send a message To a particular
+ {- |3 D4 ~2 _0 r1 o8 [ // object, or ForEach object in a collection.
2 ^2 u2 H2 u! N1 _' k4 M / b6 P) t& z+ h
// Note we update the heatspace in two phases: first run2 a( s- G9 U- W9 }
// diffusion, then run "updateWorld" to actually enact the: ^3 i6 E' f% \ r4 z1 ?' N# }! j) p
// changes the heatbugs have made. The ordering here is
5 A7 ^5 m5 K7 ^+ v* V9 L // significant!" i% g+ ~2 }$ b' k- d5 C" P4 P
8 E/ i J# Q6 {! O2 n
// Note also, that with the additional
9 e% r4 ^' X% b8 T3 s // `randomizeHeatbugUpdateOrder' Boolean flag we can+ T. P& _ i/ A" O* T0 ]* [
// randomize the order in which the bugs actually run
; N# q% B$ n4 r5 t // their step rule. This has the effect of removing any
0 i9 e5 S/ h5 | // systematic bias in the iteration throught the heatbug- H; T) l1 Q; T' u$ [; c
// list from timestep to timestep
$ B0 d9 E& ?8 D 8 m- y7 X4 B I3 Y+ q& Q+ g4 L
// By default, all `createActionForEach' modelActions have
, [* H' p- R$ j9 l6 \# T& [ // a default order of `Sequential', which means that the
' S9 ?9 _; i6 f' o) F8 O // order of iteration through the `heatbugList' will be" k8 |; ?) k0 J- J
// identical (assuming the list order is not changed; {' g. y1 o/ ]- @6 ~0 W# T
// indirectly by some other process).
5 O' N1 B N/ ~- { ( M' z! |/ P' j2 Q- [
modelActions = new ActionGroupImpl (getZone ());& m+ R1 Y* n( `, \4 }
8 l; U9 R) t; @# p+ ] try {
, k ?! Y% P6 q) h( m modelActions.createActionTo$message
# |7 l) I$ {7 d (heat, new Selector (heat.getClass (), "stepRule", false));
$ @- w: ~) S4 a2 g; p } catch (Exception e) {
' V5 U) a) b% @: [. W! g System.err.println ("Exception stepRule: " + e.getMessage ());, e( Y; m' F! f0 ~, Q" q
}; O8 ^% N( i: x7 d) D: G
( p ?7 ]( Q Y) B8 ]
try {, I; s# H# Q" [1 E. U* G& G
Heatbug proto = (Heatbug) heatbugList.get (0);5 \# L! Z# P. X+ y" ~ {
Selector sel =
- r) w) S+ p B( u+ q6 h new Selector (proto.getClass (), "heatbugStep", false);) z- J, O& m' |8 _" o
actionForEach =8 |4 X! X; S0 |& b# h% k+ c
modelActions.createFActionForEachHomogeneous$call
( E$ K! {3 }; Q5 L (heatbugList,
2 d n. f2 X( n% D8 w new FCallImpl (this, proto, sel,
( y+ H1 E* f( F) \4 l new FArgumentsImpl (this, sel)));. m$ r' Y$ [, `% I
} catch (Exception e) {
0 q( d8 j+ H& _( Y a: ]4 m e.printStackTrace (System.err);( ~3 Y6 `9 j+ ^" X5 w& ` n
}
0 x1 \6 o% K6 j. q( V
% Q4 g S# H6 B, ~# l% u% \7 q syncUpdateOrder ();
( V7 L; N, c9 ?2 J' @9 Z" I5 R g& c1 x2 m: b
try {
4 w6 ]3 B9 M. j% o1 g- ]" A$ m modelActions.createActionTo$message z1 S0 n: M& K8 s6 q$ T6 B
(heat, new Selector (heat.getClass (), "updateLattice", false));! Q( b: Z0 m2 X) v3 l0 b
} catch (Exception e) {* d6 z+ ?2 ^+ @$ H1 V( j, o
System.err.println("Exception updateLattice: " + e.getMessage ());7 t0 O1 V& ]+ t% `- o% `* q% n+ k
}- u+ m7 l3 V* {0 j5 e
8 h1 h/ z( L6 ?5 y# _, S3 \
// Then we create a schedule that executes the
6 K" ], u' h2 A# M // modelActions. modelActions is an ActionGroup, by itself it
1 N& U( f; h# ]4 L; O6 a8 P // has no notion of time. In order to have it executed in' s* Y3 E$ L3 J% c7 ], {6 {
// time, we create a Schedule that says to use the$ ?( }0 |! f% T' f6 w( k
// modelActions ActionGroup at particular times. This9 W) ?& ?2 ?* k I& I9 Y
// schedule has a repeat interval of 1, it will loop every
" a6 X! P8 ~3 H0 E" n1 p& A- | // time step. The action is executed at time 0 relative to
& p1 n( H; l0 }" O // the beginning of the loop.
* I6 {4 \. n8 |% W( c3 p6 k/ y5 x k( ]% m
// This is a simple schedule, with only one action that is/ @0 }/ s: n, X# j$ _* W
// just repeated every time. See jmousetrap for more
6 H+ k8 v1 h; c) R* [' O5 t // complicated schedules.6 l' W7 n$ N. D; D; o
( g( u+ M: R' c. D3 k6 {. W
modelSchedule = new ScheduleImpl (getZone (), 1);
3 {3 F6 h$ H) r6 @ modelSchedule.at$createAction (0, modelActions);: a3 M# G% O7 q( x; w6 M# e* | d
; S1 r# a0 z" B: }$ ^# t9 h
return this;" u) s7 t9 B7 Q* W- F
} |