HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, ?+ t6 l7 R) ]
3 l/ }9 w' [* t0 A
public Object buildActions () {' @# F2 [ p6 U9 B
super.buildActions();' o |$ Z2 ^! C4 t- Y
9 g" P4 \2 ~" `3 ? // Create the list of simulation actions. We put these in
% v g% L- D1 @7 Q* m // an action group, because we want these actions to be
1 I9 }! _' u! I# { // executed in a specific order, but these steps should
* T: c' x& h& U // take no (simulated) time. The M(foo) means "The message
1 `" C8 `- F) Q // called <foo>". You can send a message To a particular# q0 h, d* x( ?9 Q; l' H
// object, or ForEach object in a collection.
+ |) l6 ~# y' t2 q 0 A. v8 N4 T( y0 j5 Y9 x
// Note we update the heatspace in two phases: first run. n! J6 Q+ w- Q6 X2 Z+ n4 y
// diffusion, then run "updateWorld" to actually enact the/ b/ O( y9 h& C) Y
// changes the heatbugs have made. The ordering here is
; M% n; r4 D8 H! ?5 W // significant!
V! Y% a; W! \% }* x5 M . u7 [6 z) N. \8 v& d1 g
// Note also, that with the additional6 C+ p" |9 \% o/ r
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ \/ [; L8 u' ]; D) h5 f: k' p! d
// randomize the order in which the bugs actually run
0 h2 i* a& y S& K // their step rule. This has the effect of removing any1 ~) _2 H( ]0 F% J/ X7 h
// systematic bias in the iteration throught the heatbug
. w0 e. K' s$ s5 }9 {! [: i( {& p6 j1 ^ // list from timestep to timestep% j+ I( c7 j/ U3 b
- L2 D; H( h9 X" _+ \$ q
// By default, all `createActionForEach' modelActions have0 @: T1 v* }2 a/ M
// a default order of `Sequential', which means that the3 q+ ~: R# `2 {
// order of iteration through the `heatbugList' will be- t$ ^0 L2 j% g2 [+ w$ o
// identical (assuming the list order is not changed: D/ |2 `5 ^$ i/ k( e: n
// indirectly by some other process).
+ w3 F+ R" v& V; T* [5 U: k- K 0 C, o8 t P5 ]: X+ h
modelActions = new ActionGroupImpl (getZone ());* ^% [4 ]. I* E
( D# `: T* D6 V7 j" m: R) { try {
: n! C" c; I2 W modelActions.createActionTo$message8 U6 o D8 e. O" M Q0 H0 O h
(heat, new Selector (heat.getClass (), "stepRule", false));
# k. J5 ^+ e0 k5 E, f } catch (Exception e) { [/ B7 U( h4 t3 w
System.err.println ("Exception stepRule: " + e.getMessage ());
! P8 n `3 a/ d1 G }/ Y( n! O9 H7 {/ f2 N* F
& r T: b# h$ g/ q; e2 B# e
try {
* t0 S: J- l) V2 l* ^. S Heatbug proto = (Heatbug) heatbugList.get (0);1 h0 F( N' u: s6 \# l* _# ? ]
Selector sel =
' k+ L1 g' M0 l: J+ t new Selector (proto.getClass (), "heatbugStep", false);: U, ~. g7 O; i
actionForEach = e( L/ C6 G* j( F* ^
modelActions.createFActionForEachHomogeneous$call
0 F7 n1 I' A; ~- D9 T (heatbugList,
0 w0 L' I: g$ z+ E8 O new FCallImpl (this, proto, sel,* X) g- z' j+ ], d6 L8 [ g7 r
new FArgumentsImpl (this, sel)));
' e* ?2 K+ n0 w( J } catch (Exception e) {
* O0 T/ E, M: U! B7 C* \. d e.printStackTrace (System.err);
0 Z0 o& N; a& Z. }7 h, j }' I3 y) \0 |% E7 U6 b
+ `$ Q! h6 i! s2 d% X
syncUpdateOrder ();, {, C5 F' r; T; {) U+ k
% @- ^3 t/ T5 R) R, Y4 D) [/ b# P
try {
! z U0 J/ A* J) q& Z modelActions.createActionTo$message
& l( N- N6 \: S0 T3 m) } (heat, new Selector (heat.getClass (), "updateLattice", false));
. r, L' j# f: a" c$ Y5 P } catch (Exception e) {
/ I& W4 ?1 l/ u* a, N System.err.println("Exception updateLattice: " + e.getMessage ());
! [& i. o) ~& Z }
5 s1 E# L- L7 Q( |
3 [& e$ N, a0 k // Then we create a schedule that executes the
6 Z1 f& H/ A* H( w% N$ V" d // modelActions. modelActions is an ActionGroup, by itself it
1 ?7 W2 A( U" h1 e; \( ?$ X& x // has no notion of time. In order to have it executed in
. k+ {3 A& L# t5 Y // time, we create a Schedule that says to use the, O. S5 s8 } m6 @ m) K+ a
// modelActions ActionGroup at particular times. This
/ s0 d, Q4 D6 W& a% v3 S6 [ // schedule has a repeat interval of 1, it will loop every
' w A3 z4 ]8 @ // time step. The action is executed at time 0 relative to
" _0 C8 \4 }; R! O // the beginning of the loop.
& \# y2 |' Z% j+ x5 c% K% \
( `% `6 y, t/ c. W8 w // This is a simple schedule, with only one action that is4 m; r5 W) U1 Q, i$ w; O
// just repeated every time. See jmousetrap for more d. n6 b! Q0 y( T( g' _6 X6 e
// complicated schedules.
; e z: i, a |' ?* X7 u6 W " e: s+ X$ [# h' \% Q
modelSchedule = new ScheduleImpl (getZone (), 1);
! r. ^# [) |; B; i1 _ modelSchedule.at$createAction (0, modelActions);
( i' W9 o9 t% k: p L7 q# b! R+ \- c
return this;
* `8 m# D! _+ ~ L } |