HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# a8 Y" w0 g5 \. F) R
+ l& H* o! M; G" { public Object buildActions () {& t& w4 h7 j4 V
super.buildActions();
% b/ G) w9 [1 g- f) @
0 \2 _& S8 I- P3 @" [* O // Create the list of simulation actions. We put these in
# Q( m# c% p8 l9 R8 k // an action group, because we want these actions to be
/ u% {7 d/ W F) e // executed in a specific order, but these steps should0 s5 f+ d0 j( {
// take no (simulated) time. The M(foo) means "The message2 V {: z0 x( T$ J. L
// called <foo>". You can send a message To a particular
) l$ R. a) O. U A+ Y- f8 _ // object, or ForEach object in a collection.
t" `8 U0 C% ?4 q
$ W& s: c+ q9 @$ M- } // Note we update the heatspace in two phases: first run6 U1 g! W/ D, G0 x1 N
// diffusion, then run "updateWorld" to actually enact the( R) D' I* w6 r' q
// changes the heatbugs have made. The ordering here is
1 z2 X) K* C2 X // significant!
4 R$ f3 K$ a3 L) j* ? 9 R6 m# C0 w9 X0 ^$ O$ z
// Note also, that with the additional
6 m: D5 r. i' o( h# e9 ^' o _1 i // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 p/ A; t2 Q% U/ \+ Z- R // randomize the order in which the bugs actually run: s5 r, j5 m( p* n3 l
// their step rule. This has the effect of removing any
( u, f( h1 \9 X( @; E- u9 C // systematic bias in the iteration throught the heatbug* K; b$ [9 X Z# L- K
// list from timestep to timestep
, w- m* Y4 [9 S* S 7 t! T0 ^- t7 J2 B
// By default, all `createActionForEach' modelActions have5 ?# c) `* a+ k3 N! l9 A( @
// a default order of `Sequential', which means that the$ L- r8 X1 _; F/ }) e
// order of iteration through the `heatbugList' will be2 T/ V- B8 y5 f% y- {# D! G' Q
// identical (assuming the list order is not changed, G+ K# B% n+ r1 v
// indirectly by some other process).; K( r4 w1 S- @- @* u
5 X0 {5 M' Z! ?! s5 Z- @7 ] modelActions = new ActionGroupImpl (getZone ());
+ Q! Q3 r* Y7 b" N5 l: a
, c: I) c @: _2 V0 B5 Y try {$ y; E0 E, e- S' y1 x/ e& t3 U
modelActions.createActionTo$message. j; V( S" e6 M* c6 H* O" E8 \
(heat, new Selector (heat.getClass (), "stepRule", false));
) {+ i3 S, J: L5 n& w% T' { } catch (Exception e) {
3 [- n U, W% l/ l4 z7 k6 \ b: w System.err.println ("Exception stepRule: " + e.getMessage ());7 B N7 u* w8 s) G+ w4 }" Q
}
+ F% \, W$ ?* |- ]$ l1 s% o2 c1 Q& v9 H- x
try {# j; k* u, Q4 w" F6 i5 z$ y+ r
Heatbug proto = (Heatbug) heatbugList.get (0);
6 \' J7 [8 `: n2 g Selector sel = 8 E1 A% }5 G+ V( s: {5 A( G) u
new Selector (proto.getClass (), "heatbugStep", false);
8 h( U1 d3 J& q% K6 `/ g2 Z4 l actionForEach =
2 b. Z$ @ I, X* S0 R0 ~/ ?7 n modelActions.createFActionForEachHomogeneous$call
* L# c t$ F) x+ A (heatbugList,
+ ] R# }1 d, n* Z% p K# T9 D% X new FCallImpl (this, proto, sel,. n* c! H' L+ W
new FArgumentsImpl (this, sel)));& z! _( J% `8 g* n ~
} catch (Exception e) {
6 D! X; V$ q& B! M3 A0 Z e.printStackTrace (System.err);
7 n' q; f' v6 ?6 c7 m. W }0 C: ?3 k+ A2 L* d b
2 _, W& S% |5 V* w1 C' w2 ?
syncUpdateOrder ();2 [5 A. J9 ^1 k
% z6 P/ |! U, _4 T# k% ~ try {
6 s8 J+ j" V! N$ D- A modelActions.createActionTo$message
0 p ^# ~! X V; l) a0 b$ Y( R (heat, new Selector (heat.getClass (), "updateLattice", false));- ^* Q6 L$ g( r$ A4 q; B8 K
} catch (Exception e) {; q" G" \" n1 D! S8 h
System.err.println("Exception updateLattice: " + e.getMessage ());# b# H1 E8 r, H% j2 l& ^9 A, a6 a
}
8 B! o2 X: ^4 _( H% ]+ v* ~3 k + j" L! B4 a6 ]3 t; i3 R* X. Q
// Then we create a schedule that executes the
0 G, w2 A/ S' B) w( M4 R // modelActions. modelActions is an ActionGroup, by itself it
# }6 _" W# w- `4 T, r" ^( z // has no notion of time. In order to have it executed in
# \; I$ A; F- s" n f0 n // time, we create a Schedule that says to use the$ e/ V: O4 s, W* i7 u5 I! \
// modelActions ActionGroup at particular times. This
7 y6 l1 y1 V( T" @# Q6 u // schedule has a repeat interval of 1, it will loop every0 C) l' d9 B7 y9 b# h8 ]
// time step. The action is executed at time 0 relative to
( R) O6 T4 l$ r/ X // the beginning of the loop.
* w) H% J8 z8 u, t; i9 D/ }
% N- k4 C( G2 V2 y // This is a simple schedule, with only one action that is
$ J- |# N& b; q1 s6 f! J- \( f // just repeated every time. See jmousetrap for more
+ [& n: T) C- |8 U // complicated schedules., a8 E5 ^4 W! G t
3 C, R3 E, H* F; q modelSchedule = new ScheduleImpl (getZone (), 1);1 ?7 s' ]/ M% G3 S$ A( \' q+ g
modelSchedule.at$createAction (0, modelActions);
% @3 `9 m( W& Z . r% H% V* l8 ^: \; l
return this;
( \* H* [' w: w) B h; h2 A } |