HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) R" B& ^. i0 `& `# ^+ P
, m% G3 z/ H& F; V+ L public Object buildActions () {5 q6 C( X5 _& N! b; a
super.buildActions();9 o( N/ b w1 x( n1 j: k0 l# n
; \/ L! Q, v, p" ?
// Create the list of simulation actions. We put these in
4 j" }6 w: n( j2 m // an action group, because we want these actions to be
. [- |. ? T* j* J% l7 S // executed in a specific order, but these steps should
* b2 X' g# S( b$ t% s# K2 O // take no (simulated) time. The M(foo) means "The message
" L5 t+ Q# z0 T H0 E" l // called <foo>". You can send a message To a particular+ \; n9 x4 K2 \0 D
// object, or ForEach object in a collection.
2 B r/ [0 _ G' D1 e : b" l0 u3 A) R+ s$ s
// Note we update the heatspace in two phases: first run
: R- v/ q* u% R- N# A' v- j // diffusion, then run "updateWorld" to actually enact the
9 C3 z! V% m4 j4 q7 M1 i // changes the heatbugs have made. The ordering here is
5 s( X1 q+ N5 A2 W // significant!: T4 q0 t7 j8 ~
; i$ u4 V% }$ s# ]
// Note also, that with the additional
6 p, S! E. I6 K5 q, Q! A) j# R // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ i- p, D. V" P, e/ V // randomize the order in which the bugs actually run
* h% X- r! d( r+ e6 }! Z" | // their step rule. This has the effect of removing any' Q( d7 u. r9 `0 j/ ^& |) h
// systematic bias in the iteration throught the heatbug1 D! V, t- I. s! |
// list from timestep to timestep
2 V" D" Q# R. T$ t3 z % L$ M# m; S9 ?( J/ e
// By default, all `createActionForEach' modelActions have
$ y/ b- [; D# f0 @" } // a default order of `Sequential', which means that the$ h4 n# {4 H7 J Y' k& ?
// order of iteration through the `heatbugList' will be
/ ?' j% ?8 T1 M" [ // identical (assuming the list order is not changed4 ^- f* ?# _# {- j: Q" j; E
// indirectly by some other process).
3 Z& _8 H( t2 j+ Y( z & M0 n- O% m! H n
modelActions = new ActionGroupImpl (getZone ());
# ?5 w' E3 p& M8 {$ D
2 A z) L- R. j! G+ _2 s: Z try {$ R* ~7 l2 P8 |" K1 W& f
modelActions.createActionTo$message
; B+ X0 U, T- r# ^3 O, n (heat, new Selector (heat.getClass (), "stepRule", false));( h7 {7 c' ` E& C' l
} catch (Exception e) {7 J7 b8 L/ z8 m/ ?. g8 a5 T
System.err.println ("Exception stepRule: " + e.getMessage ());
; g% c3 s- U8 Q* X7 I }9 D$ x: W3 G; D( W6 [- T
/ x- j" ?! K9 Q( F
try {
# s) A7 |- _% a0 H Heatbug proto = (Heatbug) heatbugList.get (0);8 R, D/ p- u7 ]
Selector sel =
. T9 n8 O' K( h; d$ H3 c& L. |7 j new Selector (proto.getClass (), "heatbugStep", false);* u4 r& ^* k% l8 h9 F U- A
actionForEach =
/ a+ Z- D0 \# c) q4 _! t6 F modelActions.createFActionForEachHomogeneous$call# b& x7 h3 O3 E8 |
(heatbugList,, }5 B, `6 C$ \. `1 [ f7 j% Y
new FCallImpl (this, proto, sel,; X, p9 L) U( U# N
new FArgumentsImpl (this, sel)));
% ?8 ^4 f/ i" I( A9 h d } catch (Exception e) {
& c0 m6 p' r" l+ f3 N4 V% Q e.printStackTrace (System.err);5 z, ^9 Q& P. q. U, `8 P
}
2 {# {" e9 k$ n+ i# b % |" K( s7 b/ U) i
syncUpdateOrder ();
3 S8 t! p# t2 ~+ \) `" A8 D
& z: t$ N- `+ \- f try {1 x$ m' |$ i% G" d
modelActions.createActionTo$message K! y; v8 P6 V4 g; ~8 ?, z
(heat, new Selector (heat.getClass (), "updateLattice", false));7 f" I5 D+ {( Q
} catch (Exception e) {8 E3 Z2 X: b- m; V d6 i8 ~5 C) ]3 N
System.err.println("Exception updateLattice: " + e.getMessage ());
6 e8 c: V& D, q* q }% q7 F9 o' Z* f: n9 U, B
% c( m9 s5 T/ M! d& r6 J/ x+ P
// Then we create a schedule that executes the
9 T& c' ]" _& o( s$ R // modelActions. modelActions is an ActionGroup, by itself it
+ P3 e+ j, X1 S" u7 f // has no notion of time. In order to have it executed in
2 c0 t _8 f7 l // time, we create a Schedule that says to use the
$ N7 G: f& O8 W* {4 w( | // modelActions ActionGroup at particular times. This+ e( q5 x; b3 b" u. D
// schedule has a repeat interval of 1, it will loop every7 L, ?& e; i- q
// time step. The action is executed at time 0 relative to, F- C- r/ P, ^8 ~
// the beginning of the loop.& L2 w; A' i7 p8 L0 T9 V. G5 }0 x
6 {- g8 e2 j( a7 O; p' f x
// This is a simple schedule, with only one action that is2 H" C. c+ B/ |) Y
// just repeated every time. See jmousetrap for more
* H+ i2 s A8 V3 \$ I$ L) D // complicated schedules.
9 W3 h9 w3 |3 q' a* [& U; Q 9 b6 N$ J& X" A/ a' d
modelSchedule = new ScheduleImpl (getZone (), 1);' h" S* o! T) B0 o
modelSchedule.at$createAction (0, modelActions);% M3 C/ l4 }0 x1 S$ C; c
" e) O e. c' k) e6 Z& v7 i return this;% ^# F! o8 M) @& }. X0 H
} |