HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% ~0 e+ D3 i+ G5 C+ ]
4 M9 v* O7 I# ~" r1 ~0 z; `! @+ k public Object buildActions () {* a" o/ ^# f4 m2 l- l
super.buildActions();
5 d& }4 m0 w% ?: L! g
" n& j" b, d4 Z // Create the list of simulation actions. We put these in
7 D ?* W8 u6 \, D; z // an action group, because we want these actions to be$ w9 V7 t/ P; k+ ~6 y* X# d$ U
// executed in a specific order, but these steps should
0 n3 F0 R; p1 U1 H* x3 [ // take no (simulated) time. The M(foo) means "The message0 m" p* r% ^" u& K$ e: B9 m2 I
// called <foo>". You can send a message To a particular
% T7 F0 q1 }: Q4 ?+ n. z- Z: ` // object, or ForEach object in a collection.
6 |/ K# ]* P' {+ b9 W
; L! @& m3 Y3 s // Note we update the heatspace in two phases: first run
& s0 H* p; W3 c5 K- @- r, {- l // diffusion, then run "updateWorld" to actually enact the
) L1 Z( Z( v" X7 O // changes the heatbugs have made. The ordering here is; H2 }# i- x4 O: B% p
// significant!9 K# [3 U' g. D4 d/ w
$ F x( i! M" z+ L( `* t // Note also, that with the additional
( o9 k4 G* ~% J- }% h2 F! w // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 q- Z1 e" t+ y& j n' h // randomize the order in which the bugs actually run
3 I4 |& J& P7 ^ c2 n/ w // their step rule. This has the effect of removing any
@ y$ H; J5 Z$ K2 ?* |& P // systematic bias in the iteration throught the heatbug
& ]* M! B3 Y {3 ] // list from timestep to timestep; k4 D t5 J% X/ T
$ {* K$ v8 {( F+ H, t' H1 z2 o- o
// By default, all `createActionForEach' modelActions have, x2 y* A A4 } \* k
// a default order of `Sequential', which means that the
; M; l- M' E% g" {2 _& | // order of iteration through the `heatbugList' will be0 {6 n* Z1 F1 k9 W& B4 R
// identical (assuming the list order is not changed
* p: M& x1 X/ w; L5 F4 w // indirectly by some other process).
/ S$ R9 C4 Q- g) Q7 m
7 Z, o# Z! w9 e2 B) Q/ Q+ o modelActions = new ActionGroupImpl (getZone ());
1 r% a2 C* P9 v7 T8 s7 l# A) A7 ~& z9 U% h* \1 ~' k W
try {
& e- S3 \) {* s0 K, b# Y modelActions.createActionTo$message
/ K5 H f) N& o4 j4 t& P: V4 Q6 C (heat, new Selector (heat.getClass (), "stepRule", false));9 ~) ~1 ]6 e+ g7 ]3 V
} catch (Exception e) {
7 C# ^ u2 S5 E! T% f, x& R System.err.println ("Exception stepRule: " + e.getMessage ());
4 X2 y* w4 B: |# D$ t. w9 c. r7 N }; W* ]2 ]9 j J) d
' _3 _; J: u$ \$ _" |$ \ try {
' _7 V7 x) ]* J. D3 c Heatbug proto = (Heatbug) heatbugList.get (0);
+ \! J% K& C- u4 l Selector sel = 0 S h, o# y+ `; {: m& q$ Z
new Selector (proto.getClass (), "heatbugStep", false);
$ j3 F; K v- E; [6 c/ G0 W* y actionForEach =
8 J4 y0 N9 L' J2 I/ A, a modelActions.createFActionForEachHomogeneous$call
- X3 C. q* b) s$ O }, n (heatbugList,9 H: q$ U/ W t# F h. h1 B
new FCallImpl (this, proto, sel,7 A+ K" V% t8 m- A- s
new FArgumentsImpl (this, sel)));0 G6 Y! \% _& D- W
} catch (Exception e) {: v3 O$ V3 r' t! S: E: O; M
e.printStackTrace (System.err);& V* \8 k; ^$ q; y, ] _
}6 H8 j( Q" z5 L7 z% n, C& o
& \0 _& b; O4 @5 J, M syncUpdateOrder ();
7 T$ K4 C I* m* T7 | N7 K. X/ h0 e* l$ W
try {8 p$ T) ]* Z* {" ~
modelActions.createActionTo$message
! D4 W% \8 m' y& ] (heat, new Selector (heat.getClass (), "updateLattice", false));
/ l# ] y6 M, D! U7 m9 T* w } catch (Exception e) {
0 h& e( x5 \9 o4 J" d7 f* V System.err.println("Exception updateLattice: " + e.getMessage ());
5 ?# O5 T5 h, _6 Y2 a }7 j$ L( y0 F g* b1 f
1 A# H4 c6 ?: f, ~6 g" f
// Then we create a schedule that executes the
; e: P3 p8 Q2 n# J5 z. g- @( k // modelActions. modelActions is an ActionGroup, by itself it
E4 ~# ^: L, i3 F1 Z0 ~ I // has no notion of time. In order to have it executed in
2 m' d/ l, O! M // time, we create a Schedule that says to use the! n: I; [: a3 m* R2 F f
// modelActions ActionGroup at particular times. This6 m- t& f7 b( t/ M: ]/ D" v
// schedule has a repeat interval of 1, it will loop every
$ F, U% r6 }1 g$ h7 R7 s$ B3 Y // time step. The action is executed at time 0 relative to
7 Q9 ^- L& r* N3 @5 e/ k // the beginning of the loop.
# Z0 g+ m& F. |" o! M4 ^! V5 F. ]9 X* h
6 Z% I, \8 J+ z // This is a simple schedule, with only one action that is
8 q# n0 J4 h c1 E // just repeated every time. See jmousetrap for more) T O( P. p* g+ M
// complicated schedules.- q7 F/ m) k) c" v1 ?4 M
- P" S, p6 n$ \9 }+ |: m
modelSchedule = new ScheduleImpl (getZone (), 1);
0 p w* d1 H; \9 K! D, {+ s. P0 ` ]$ a9 h modelSchedule.at$createAction (0, modelActions);
& }8 N, _: r% O+ {: c- F
; \& U" G1 g6 n; F return this;# R, ]0 S/ \) P0 G& Y& D2 K
} |