HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 R% Z# Z" r/ p
0 B4 ^; ~( p8 j% {0 z" j9 k& g% u# t public Object buildActions () {5 }4 q4 x* V6 E) e
super.buildActions();. V" L8 W0 h! m; L" {8 K( S
6 [3 R' e4 c( s5 W* m
// Create the list of simulation actions. We put these in p/ K( e/ Q- f ~! f
// an action group, because we want these actions to be
# o; } l: {# ^: K // executed in a specific order, but these steps should$ w" q( V' V* o2 ?3 @
// take no (simulated) time. The M(foo) means "The message; M; O: e/ ], X) t- J4 [! W
// called <foo>". You can send a message To a particular
0 u; w7 o" P8 Q) N; Q: o! h6 H // object, or ForEach object in a collection.' W# Q! A5 I+ @+ P" [6 f
0 e( `& ~% |' s8 n+ ? // Note we update the heatspace in two phases: first run7 \, b' b3 R9 h0 \% s7 q
// diffusion, then run "updateWorld" to actually enact the
5 {# m1 K4 T% {1 I8 r) m // changes the heatbugs have made. The ordering here is4 S% O& @/ c" B. e
// significant!
) z! q1 e6 ^6 ^6 Z) R# e1 j
1 q4 f2 h* T0 Q* u/ { // Note also, that with the additional
4 n( Z/ p9 P) ]) Z: |0 T ]/ G // `randomizeHeatbugUpdateOrder' Boolean flag we can+ s( ]" R h# m; _% W
// randomize the order in which the bugs actually run M R9 L( Q+ {8 I( s
// their step rule. This has the effect of removing any6 _: L% @1 c. v
// systematic bias in the iteration throught the heatbug
' {$ v. B2 n% q // list from timestep to timestep
. p6 C" i2 D3 C* m: A
. ]! y1 u! z b/ v+ Z9 R" X7 B // By default, all `createActionForEach' modelActions have
$ q# U7 E) F, ~/ R+ N* Y // a default order of `Sequential', which means that the* {* w6 w# U+ @, w; }/ E5 d# u
// order of iteration through the `heatbugList' will be7 K) }. `6 e' h* d. F: q
// identical (assuming the list order is not changed, G( C3 l8 A. C0 z* c7 @/ U
// indirectly by some other process).
/ V( c* c5 {. x. G# i2 a6 p
& f) S- k- \% L; n7 F modelActions = new ActionGroupImpl (getZone ());1 s" i& o! Q2 D6 D+ r
% ]# Z5 ~$ {. L6 A, b3 w. y: h6 ~9 ^$ F
try {' z5 f) o* j4 E
modelActions.createActionTo$message7 k/ G8 t& k2 K. G3 u: @
(heat, new Selector (heat.getClass (), "stepRule", false));
7 Y2 V8 ?5 L$ b& h9 O( ^6 ] q } catch (Exception e) {
! \/ q2 h& K9 k, {2 V9 Z System.err.println ("Exception stepRule: " + e.getMessage ());3 z" ^6 _& K% Z
}
% o( t. [6 M# K) k1 N- p9 K {7 o. n1 U% E
try {( ]+ b/ m4 l6 q u4 G" i; i0 M
Heatbug proto = (Heatbug) heatbugList.get (0);6 Q% q( U8 ~) h) b H
Selector sel =
, V) U# A, U" t. L: L new Selector (proto.getClass (), "heatbugStep", false);- u6 ^6 G T2 c! n7 a
actionForEach =
! e& h9 H, a- j modelActions.createFActionForEachHomogeneous$call
/ u6 i% s) ^: o2 v (heatbugList,! d8 k) D* B) q- n$ |# c7 U7 N4 B! ~
new FCallImpl (this, proto, sel,
: g/ y1 h3 \4 Q9 f new FArgumentsImpl (this, sel)));# \6 g$ ]: |" p Z9 ]4 {$ e: F
} catch (Exception e) {
+ L/ @) X6 A3 s3 q9 Q8 C2 z% Z; M e.printStackTrace (System.err);. d9 U( |7 O& m+ @9 h& r6 l
}! ]" Z* ~( U0 L# K& u9 w# e
2 |9 o; h. J& P syncUpdateOrder ();
: B! l9 |6 |" r% K4 z8 }& W8 {$ }7 f2 ]! t3 C! |* I
try {
; G2 Q# G( X# a2 h; t modelActions.createActionTo$message 6 f7 t9 R% H& N9 c9 [
(heat, new Selector (heat.getClass (), "updateLattice", false));
, T$ Q1 i! f/ V; n+ X } catch (Exception e) {( y$ Z/ p' y' {5 d% p! T1 a2 N
System.err.println("Exception updateLattice: " + e.getMessage ());
% Z& g f" H: Y5 _2 @/ g }5 N- ~6 W/ U6 E/ V0 @) N( W
0 e1 C2 H+ } O* f. g$ ?+ d // Then we create a schedule that executes the
/ Y, O% s/ Y: j2 Z: A; | // modelActions. modelActions is an ActionGroup, by itself it
) S3 ?% V7 g* u9 F- [ // has no notion of time. In order to have it executed in( k- ~- ~+ b! ^# u& ]5 W
// time, we create a Schedule that says to use the9 Y5 W1 T3 d$ @9 @5 X9 T* J
// modelActions ActionGroup at particular times. This3 y F7 T' k3 I( |' Q" O
// schedule has a repeat interval of 1, it will loop every) w2 @4 v6 r2 G, }/ Z+ P# G! E
// time step. The action is executed at time 0 relative to1 g2 R$ v: ]- a$ p" e* V
// the beginning of the loop.
. j* x& I% I6 q: u! ?0 N
# u# P% L e1 o // This is a simple schedule, with only one action that is
8 Z/ m9 Y8 d/ o: c8 T$ d // just repeated every time. See jmousetrap for more
' l" M0 t9 m$ ^: f- J' B // complicated schedules.: K1 b7 r5 b6 _4 y& b7 o5 D( R
& w) n% T b7 r$ V! o
modelSchedule = new ScheduleImpl (getZone (), 1);- k" N& d9 I6 `/ U& J
modelSchedule.at$createAction (0, modelActions);% _/ D0 K! X$ f1 n; p
8 v' o9 r% t/ S return this;
( P( ?4 ^3 v7 h, q" Z } |