HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; e8 L- q0 s& L% D1 c( I/ v) ?* }. O& F3 A
public Object buildActions () {. |2 q/ Q* K, f0 S( h! ]
super.buildActions();
& _1 J6 c9 P3 v3 Z# w & O- _& O4 M# o7 `9 S/ g' s" Y9 F
// Create the list of simulation actions. We put these in
& p3 e( d- _/ i" l$ D // an action group, because we want these actions to be
: E. u$ l- P9 R& U" C1 _ // executed in a specific order, but these steps should! Z. Y9 z: n ]& q
// take no (simulated) time. The M(foo) means "The message
( b' R! H" ~+ f" r2 f/ D // called <foo>". You can send a message To a particular* Q6 P" g1 ~" a* x; q9 n' W) V7 I
// object, or ForEach object in a collection.! S+ t* p$ ~- v+ E3 M. d$ |
% O' ?4 |2 L' ` // Note we update the heatspace in two phases: first run, X/ G* L0 _! f- j/ a4 ~
// diffusion, then run "updateWorld" to actually enact the
1 M( B' r: e& K* W/ ^6 Y // changes the heatbugs have made. The ordering here is
8 G. `' X# [, S+ x // significant!
) Z0 H4 I3 l8 F: `8 | $ j6 [$ g- K y
// Note also, that with the additional
" i9 F: I$ C$ }4 L // `randomizeHeatbugUpdateOrder' Boolean flag we can
) [/ ?" H" m* v, J8 @. w- Z // randomize the order in which the bugs actually run( D% }$ X4 j0 P' M
// their step rule. This has the effect of removing any0 e& h% F* B# |5 h9 H1 s1 f
// systematic bias in the iteration throught the heatbug
; [' Z% h% g- `+ O9 u: l6 \0 ^, q // list from timestep to timestep
5 [+ }! r) W. x
$ p% i# W& w9 n4 L) B5 K // By default, all `createActionForEach' modelActions have
; y, M" Z* @% k7 i* H4 | // a default order of `Sequential', which means that the
. ~$ k7 ]/ B# P // order of iteration through the `heatbugList' will be6 f$ a1 D4 f& p0 N2 {' V
// identical (assuming the list order is not changed
& m" i) x& i; Z! Y, _; J: {: g // indirectly by some other process).
/ L- E' W% V+ r" y" h
4 t; n% Y' w: ~" L( L2 [ modelActions = new ActionGroupImpl (getZone ());
* u0 P9 }- W1 m2 |
! U' q; A7 q/ v6 \- b1 u try {
1 w! N$ y/ J% w$ [ V modelActions.createActionTo$message
0 {& V8 |2 l4 o! O6 Y (heat, new Selector (heat.getClass (), "stepRule", false));+ i M' `. L: D
} catch (Exception e) {
2 k, B" |) G" L: D System.err.println ("Exception stepRule: " + e.getMessage ());
: Q& D& M( h; R! \: _& _/ e& C }. W7 G$ {+ s) {, j& G6 l' ]" U
# @' |, Z2 x" e try {: }2 B# K0 F8 T% H
Heatbug proto = (Heatbug) heatbugList.get (0);0 w4 |+ b8 H- M' S( i
Selector sel = + `6 e9 \: ^; L2 J' B+ V2 Q
new Selector (proto.getClass (), "heatbugStep", false);8 \% x K; w2 Z. m
actionForEach =9 S1 w0 c; ^- H% P
modelActions.createFActionForEachHomogeneous$call$ M, R! j6 {( S8 ?4 B
(heatbugList,7 w) d' b; Y/ q c. n/ X
new FCallImpl (this, proto, sel,- E' R$ z/ S& `
new FArgumentsImpl (this, sel)));
8 }* ]. O4 h ] } catch (Exception e) {4 ]- v* I# t: d( b2 r
e.printStackTrace (System.err);
8 q% B% ~$ c: q8 _, C$ i/ L6 m }" f" w" |3 g3 [! j' C7 u
; h+ b- u1 A9 t7 O) O syncUpdateOrder ();
5 w5 c' b7 _6 g* i- ]: R% Q" O- y8 ~0 ~2 G( U# d% A. t
try {8 t2 n; L. O. i A$ h ^
modelActions.createActionTo$message / C" _. I+ e7 ]( J3 X7 h9 O2 t
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 w8 u: D9 F8 R } catch (Exception e) {
6 o! Z: I% z. h, I0 X% W" U System.err.println("Exception updateLattice: " + e.getMessage ());
$ |* U* Z; W! w }0 Z: ~ S$ i' A7 l" {. e8 v* s
6 [5 g8 u2 w! ^, g* X9 g3 _
// Then we create a schedule that executes the
, |' Z: j# U/ D2 B/ J; D // modelActions. modelActions is an ActionGroup, by itself it ], e& W+ f1 q9 \4 c
// has no notion of time. In order to have it executed in
/ J- z* U! m0 y // time, we create a Schedule that says to use the
$ E) z& w, M/ Z7 ~ // modelActions ActionGroup at particular times. This
4 K4 p8 |1 m" ^8 S5 o) j // schedule has a repeat interval of 1, it will loop every% d7 v9 T# n, S& T1 ?3 N. D9 Z
// time step. The action is executed at time 0 relative to
- O- h$ f' Y0 r; Z. r; }6 j // the beginning of the loop.7 @. r/ l, O0 @: s7 }' x
) \/ Z% z+ _ v. Z q* Y7 W! A // This is a simple schedule, with only one action that is5 J& I: E t3 z
// just repeated every time. See jmousetrap for more7 \: i. A2 Z$ N- C
// complicated schedules.
$ K6 y1 `' O8 P4 z$ l ) H% _ }6 T8 n% e" W/ i" V
modelSchedule = new ScheduleImpl (getZone (), 1);5 r+ [9 O1 t' c! P( \
modelSchedule.at$createAction (0, modelActions);
. [4 A0 X5 }+ d: F6 y2 ^
* B1 j- {6 p* c/ W; E return this;
; C3 p* f% a. m1 W3 i6 _' e } |