HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' ~& d! L; A s5 o. M9 H
, O) G/ M4 I8 i& h8 J" z1 A$ o) Q. i public Object buildActions () { T9 s6 R/ @. p/ b9 u9 Y9 T- s
super.buildActions();
- R* ]2 P7 t0 \ W! ^& s
% v; J6 e; o6 w0 }1 A // Create the list of simulation actions. We put these in1 i) `; \; z- s! @9 W6 H
// an action group, because we want these actions to be9 O. [1 v% o. f) b
// executed in a specific order, but these steps should
* ]9 X: x* s, v // take no (simulated) time. The M(foo) means "The message
+ d* c. [/ E1 j" p& {2 Q // called <foo>". You can send a message To a particular G4 i& D' q; ]
// object, or ForEach object in a collection.+ e5 E+ g, }. A
# P, E; u) A! O9 {" d6 N: c7 ] // Note we update the heatspace in two phases: first run( b* d' [& x# F, |: P
// diffusion, then run "updateWorld" to actually enact the7 O8 Q' l8 A$ y0 d6 I
// changes the heatbugs have made. The ordering here is
; i% X& i; B2 B // significant!
: }6 ~4 }6 {+ V3 G0 p2 j % x( J3 ?" a# X* x5 d8 E
// Note also, that with the additional+ V# \8 f8 a* {" q. Q a1 Q3 D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 ~4 V8 F# w* t. E" G. X // randomize the order in which the bugs actually run
- z2 v2 Q2 C# l' {$ B // their step rule. This has the effect of removing any
. V# r# `9 ~* ?2 u2 e // systematic bias in the iteration throught the heatbug
7 n$ Z2 B/ r. z4 p2 } // list from timestep to timestep+ N) ~, n; [& I
3 [) q1 I2 Z9 z
// By default, all `createActionForEach' modelActions have7 H4 c9 M/ E* e, _. k, u
// a default order of `Sequential', which means that the7 o8 ?, V+ A5 s) e" |6 h. R
// order of iteration through the `heatbugList' will be
9 Y8 z' a& W- j d/ A. f. `. v- ]# ^ O // identical (assuming the list order is not changed
- i# k/ D1 R- D9 `, @! N3 W1 s! Q // indirectly by some other process).4 h5 S4 i: T' L l/ G% h
# C1 i0 ~+ @" n, f modelActions = new ActionGroupImpl (getZone ());
! H# ~3 G" ^/ \) N2 Y* [ s0 s! y3 n) f
try {
1 p1 I& P1 I" Z& T modelActions.createActionTo$message* M' G+ _* \% S2 d1 b3 G' @
(heat, new Selector (heat.getClass (), "stepRule", false));6 P( j8 s( ^( |% |
} catch (Exception e) {
u% @3 L" [" N1 p, ~) a System.err.println ("Exception stepRule: " + e.getMessage ());
% G1 q8 ^# A3 @$ P2 C2 }3 J# U }
2 g* V- a1 e: _" i( n7 C1 e, l$ U" e+ j% q# Q. f
try {0 B! }' z }* q8 k. @/ J5 ^
Heatbug proto = (Heatbug) heatbugList.get (0);
3 B/ n2 E/ u( {6 u Selector sel =
; I1 O+ P( h- L/ e$ G new Selector (proto.getClass (), "heatbugStep", false);
, `+ i2 t0 U, \! N/ E9 l actionForEach =
9 y4 J; ~% |* c modelActions.createFActionForEachHomogeneous$call
: r0 e/ K* u- A4 u (heatbugList,6 E B B' P& I e5 L& V: V
new FCallImpl (this, proto, sel,
( |9 {) \5 D3 _1 A, I new FArgumentsImpl (this, sel)));9 e& N$ p( ]( _8 ?( U0 ?* r; }
} catch (Exception e) {
5 k0 y! ~% w& B/ Q e.printStackTrace (System.err);
7 I$ T2 {( B9 J0 F) u) Q" ? }
y2 C" z* |( M! G, _2 K 5 T: R9 o q" y) u
syncUpdateOrder ();& h& j3 t$ f0 k4 T
- b8 U( y7 D8 b1 u% A try {
+ K6 e( J, \- r& M; `2 _# z. T+ y modelActions.createActionTo$message
; s+ x' a1 q% c$ V9 ]8 Y (heat, new Selector (heat.getClass (), "updateLattice", false));
3 }# ]6 `. ?6 _1 w2 d6 ? } catch (Exception e) {
9 \& |6 Q6 Q3 j7 z. V2 Q System.err.println("Exception updateLattice: " + e.getMessage ());
; x' X) z( c1 d2 G- I" c- {" d } l' K' b: R, S) B5 o0 b
2 p- a- I6 Y# F% G# h( c% x2 k6 l // Then we create a schedule that executes the- v$ X- l, Z: \1 o' {/ H# A* ]
// modelActions. modelActions is an ActionGroup, by itself it
2 s/ U W$ `9 G4 B* A! Z1 Z( z: j // has no notion of time. In order to have it executed in7 V& ?% d/ ~9 r; |! O9 F! Z- O/ ~
// time, we create a Schedule that says to use the
" N6 C( J9 e% [; h) n% ? // modelActions ActionGroup at particular times. This0 u$ y0 N. E5 z' x
// schedule has a repeat interval of 1, it will loop every/ a7 G5 i! ~ E7 m2 y
// time step. The action is executed at time 0 relative to* I5 d9 Z& A1 P9 [& q
// the beginning of the loop.
" W9 O; P+ B" j# F* g) W4 h9 L$ m3 ^9 _) O- e8 \/ j
// This is a simple schedule, with only one action that is
$ C3 M' u" ^3 }2 { // just repeated every time. See jmousetrap for more
( l( \! m% n; ^; B // complicated schedules.
4 k) ]) {! G3 d" Y
' z- D+ @" @/ z% `7 ? modelSchedule = new ScheduleImpl (getZone (), 1);1 f, l! B0 h; i4 f# h
modelSchedule.at$createAction (0, modelActions);
4 E- O1 f4 m) y( O, r" { * R" u$ `+ l' g+ ?
return this;. y$ b' k$ L8 _: a
} |