HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& x7 i/ R( {1 K/ a& F! b& X! B, W
$ W" V9 ?; r: C1 E public Object buildActions () {
) z- m( r3 B+ |: u super.buildActions();+ p( M- A/ P& N* {" G; Q
" S8 }3 s' W0 X& u
// Create the list of simulation actions. We put these in5 G) M& m5 B. D% O7 T9 {) ~" x
// an action group, because we want these actions to be0 I) j7 Q' `5 x8 p$ j6 y: u0 I; k
// executed in a specific order, but these steps should C- K U' m0 q/ m, K
// take no (simulated) time. The M(foo) means "The message
- J! ~- Q0 `% J. H. V. m // called <foo>". You can send a message To a particular
2 }# j. o6 N* T; K: C: s7 h+ v // object, or ForEach object in a collection.
+ _! w# D8 \; h; n
! j5 Z1 ]/ y; y% J! p // Note we update the heatspace in two phases: first run: Z9 D7 G, T& w" e/ ~
// diffusion, then run "updateWorld" to actually enact the% u' i7 n* a8 l6 b6 c- u# X" m6 D
// changes the heatbugs have made. The ordering here is
. g! B& J1 B9 \ f3 c+ r; y // significant!% S# c8 f, i, ~3 P) _
! \# V3 ]& Z* I' s
// Note also, that with the additional' \ I' q) X$ e7 g/ }) t( V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- H) d+ f6 v. {' ^. D" R' \ // randomize the order in which the bugs actually run
+ U- Z9 i8 j0 G" E- a // their step rule. This has the effect of removing any
* t( j) I8 [4 N# u' @ // systematic bias in the iteration throught the heatbug8 b0 L9 w; d3 f
// list from timestep to timestep. I$ s: f! C6 l! L
9 H& u, N2 P5 q7 c; ~
// By default, all `createActionForEach' modelActions have
/ l! E$ t6 r* Z4 Z // a default order of `Sequential', which means that the* z5 J7 O; [' F0 z# {- D
// order of iteration through the `heatbugList' will be5 ^( ]# L7 ~) g8 g% v1 y
// identical (assuming the list order is not changed
, m f8 h, u7 Z' B' S. Y // indirectly by some other process).
' p# n2 S% Z+ V- Z5 V; @, Y1 q * W. ]$ L7 y; x( \" I
modelActions = new ActionGroupImpl (getZone ());
2 K1 l' K' |/ r3 }
1 j, O: k( k& O d try {6 Y8 B8 K" D* F
modelActions.createActionTo$message- E6 F7 h9 A" e$ q& V
(heat, new Selector (heat.getClass (), "stepRule", false));
4 |0 s0 ~9 M. W' Y9 _! \ } catch (Exception e) {
" Q% C+ w, Z- K. {1 x7 ? System.err.println ("Exception stepRule: " + e.getMessage ());
& P4 @$ I6 {3 F* y9 ` c5 ? }8 g, {3 m0 e4 X/ c% S+ Y
& ^1 I5 @" D& p1 B2 Y
try {
/ B8 r6 n, v8 M Heatbug proto = (Heatbug) heatbugList.get (0);0 }+ q9 T+ V. B& \9 }* v5 g3 z
Selector sel = 2 n ^' ^) o. k$ E8 i$ g u6 w
new Selector (proto.getClass (), "heatbugStep", false);# i, j: Q( Q$ j Q, s( ?
actionForEach =- r4 R8 g& k( j& d5 o
modelActions.createFActionForEachHomogeneous$call
, q$ X& w% [& W8 Q' X+ ^ (heatbugList,! K8 K8 }5 I6 M7 _5 C
new FCallImpl (this, proto, sel,9 L! ^2 n' x. R; o
new FArgumentsImpl (this, sel)));& i2 i+ |8 Q* ~9 l4 @. O3 }' Q
} catch (Exception e) {
+ H& X7 ^, v& |3 b8 r e.printStackTrace (System.err);
. ?; A" x) Z, I h) Z) {0 U/ a; @% D }: _9 @: b: j9 x5 L# z
4 P$ ~4 G; d9 s% m! H( d+ B4 r X
syncUpdateOrder ();
2 s1 Y6 V: Y& H
3 O9 n0 o& g5 V7 k* ] try {
3 A& E+ s B s& w j modelActions.createActionTo$message
7 c, l$ f+ S$ u; |0 E (heat, new Selector (heat.getClass (), "updateLattice", false));
+ j( f) a8 v6 X } catch (Exception e) {
, g! V8 I, y+ r System.err.println("Exception updateLattice: " + e.getMessage ());9 b$ o+ J4 h `# k
}
) E: Q" L" j- @! a7 G7 D# |) J % B. Q( h: O+ j! Q
// Then we create a schedule that executes the
A: z0 K2 W1 W# R // modelActions. modelActions is an ActionGroup, by itself it' l# C: t4 k% \$ g- T4 ?8 \
// has no notion of time. In order to have it executed in
; ~$ R' R5 \* u$ s/ X8 d; Z% y% G% V // time, we create a Schedule that says to use the
9 d+ B% ^- O% `/ R // modelActions ActionGroup at particular times. This
& y7 f. \' z8 t# [5 A( b# k // schedule has a repeat interval of 1, it will loop every
# z/ q1 H K( w4 R( l // time step. The action is executed at time 0 relative to
# v7 v7 o h+ u* U% F; e // the beginning of the loop.
' y6 g4 }" Z, ]! ^
7 K9 A8 }% P9 q2 J2 v // This is a simple schedule, with only one action that is
2 y# T. E/ m3 B // just repeated every time. See jmousetrap for more
7 c+ g* K& k7 _% a! p# B: d9 S6 ? // complicated schedules." ^, O0 ~) y6 _) o# \
`: J- M) D/ i* P
modelSchedule = new ScheduleImpl (getZone (), 1);& K& B/ ` f1 K7 b! V
modelSchedule.at$createAction (0, modelActions);
8 E* @2 \3 _( {( C
0 j1 F* z- `. q return this;, @6 \; ?4 f [9 c# C
} |