HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 [' q5 _, X4 Z" x
, _( ~% ^; [1 _# L public Object buildActions () {
9 M0 a3 n' f' q$ z, E9 i! ~# A super.buildActions();
& Q; G# m, |! ^" K$ b4 g& r+ F * E: s; `$ P2 g' h8 Q
// Create the list of simulation actions. We put these in- x5 x" o9 w- L
// an action group, because we want these actions to be
/ x6 {, {' K( l0 x2 X; M // executed in a specific order, but these steps should0 k# L$ k5 `8 N! h2 z
// take no (simulated) time. The M(foo) means "The message
3 A* V2 ^8 a8 h! Q" p4 }/ S/ u // called <foo>". You can send a message To a particular/ s/ B6 n$ p# G: _# m; I0 ^3 U
// object, or ForEach object in a collection.
! j% u& q9 Y, D/ I- k8 }! T U 4 q: l6 b- Z9 R6 v3 R0 b
// Note we update the heatspace in two phases: first run/ [8 j! g4 g R" j( k$ ], r2 X) v
// diffusion, then run "updateWorld" to actually enact the. x& M' p+ x' ~
// changes the heatbugs have made. The ordering here is
8 A. e a, P4 @7 w+ K. i // significant!3 n; ]" i- d6 M2 T, \ E. H
3 ~% B9 q+ U x1 p* U2 h$ Y: W6 |, ] // Note also, that with the additional
6 `. j9 U* H. R* x // `randomizeHeatbugUpdateOrder' Boolean flag we can; g$ r+ l+ t- |% w4 Q
// randomize the order in which the bugs actually run
8 I! V/ }- n: L( g7 j. u K // their step rule. This has the effect of removing any; E. I8 K' h6 w
// systematic bias in the iteration throught the heatbug
7 [ a. [) [) s5 u+ z // list from timestep to timestep
, q" o; Z6 ?2 E1 e( J 3 S- _2 X; ?0 q
// By default, all `createActionForEach' modelActions have
2 g1 {' w! @0 k N // a default order of `Sequential', which means that the9 t/ {0 `9 f( M, | `
// order of iteration through the `heatbugList' will be
6 \. A5 q, W5 a7 ^$ o: n4 f9 H // identical (assuming the list order is not changed
+ @6 T* c3 N+ t: e2 e! E // indirectly by some other process).
/ ~0 E r1 U" e
& W9 w. [: Y4 w4 J$ R6 N modelActions = new ActionGroupImpl (getZone ());
: C" H8 f1 u1 x6 x& s7 ]+ k, |9 v0 J& W5 K9 F
try {
' q+ G5 }4 N M X modelActions.createActionTo$message
: C( ?6 t- `: l! n (heat, new Selector (heat.getClass (), "stepRule", false));) L& Y) L9 J2 N0 S" R
} catch (Exception e) {
7 D2 d7 ]% \: u1 m, m1 I System.err.println ("Exception stepRule: " + e.getMessage ());
; i9 |" O$ X" h* R0 P4 M( x }
' \9 D; `5 F5 {" a
% P5 S2 [* `$ J1 } try {
) U4 m. |, F% Q9 f+ h7 A Heatbug proto = (Heatbug) heatbugList.get (0);
& q* o7 Q5 i; i8 C Selector sel = / J& q! k. g, A* W" }, A" D% W
new Selector (proto.getClass (), "heatbugStep", false);
" C, u; I" R7 _! k% X actionForEach =* x+ q) X* H- [$ R( a
modelActions.createFActionForEachHomogeneous$call. k: W. ?' t2 @ D/ i6 M2 i
(heatbugList,: }* C/ A' C }" p
new FCallImpl (this, proto, sel,! Z" H( b) G$ |/ w0 ?# B# Y
new FArgumentsImpl (this, sel)));
/ {9 [' M" M Q3 M' ^) V } catch (Exception e) {
; a( V* x. q+ X% @- [" B" k9 L2 U e.printStackTrace (System.err);' s# l# D. w- C9 U, P
}8 @# E8 i- o1 Q: x9 l
$ ?* T! G0 z& {
syncUpdateOrder ();
% T9 z: Z- e5 R5 i5 P1 ]( t0 S, C& U3 G0 G
try {
$ ~8 m* A" [0 r modelActions.createActionTo$message
$ A! \8 {* w1 g$ Y" R ` (heat, new Selector (heat.getClass (), "updateLattice", false));1 r6 @/ K8 O& ~# Q; P
} catch (Exception e) {
8 s7 }3 Z2 ^7 z4 m, C3 I1 X& i System.err.println("Exception updateLattice: " + e.getMessage ());
0 C/ q7 e6 v$ _/ d/ W* Z }% A4 v3 N. n" d, W7 ?
* l Z0 s. v- @8 R' g+ M2 V
// Then we create a schedule that executes the
6 F. K) O! N3 ] // modelActions. modelActions is an ActionGroup, by itself it5 C4 v z7 ~. a4 c9 G! [9 ^
// has no notion of time. In order to have it executed in
& |& D/ [ C1 Q* Q // time, we create a Schedule that says to use the
* Q4 r' k+ W; m6 f: \ // modelActions ActionGroup at particular times. This# ^/ ]5 r+ _ z! |
// schedule has a repeat interval of 1, it will loop every O# N, W% E: p4 f+ X
// time step. The action is executed at time 0 relative to
9 T6 n% X* B+ l4 P+ L // the beginning of the loop.
& K u3 E9 A" j8 g2 P4 z. q
* v5 Q: M+ G$ ?) E; y" h // This is a simple schedule, with only one action that is; }- y5 ~& `. r
// just repeated every time. See jmousetrap for more2 Y; V9 b& X4 s! x" r. g) m1 I% [" p: h
// complicated schedules." l( y. q0 ^2 q4 Y3 G$ i
+ O6 W9 ~# m/ v) D modelSchedule = new ScheduleImpl (getZone (), 1);
! ^6 {9 F$ w# M' _ modelSchedule.at$createAction (0, modelActions);
' n- x7 K# R& K. d1 R( ]
, I8 ^% \/ V- l# e return this;: J4 W0 A( X. T$ H
} |