HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. s) H3 y8 U5 @) K# b& V2 v/ ^# r3 M" x; R/ L1 c% @5 J
public Object buildActions () {
, F8 O9 n1 X9 Z& Q K super.buildActions();
8 @/ b7 k8 ] }' K$ f/ J! l
7 o, ^5 t1 x9 `4 f- V/ ?4 z+ o // Create the list of simulation actions. We put these in0 M/ M4 ~+ N( k/ k6 ^1 d
// an action group, because we want these actions to be
& P( {+ ~* S9 Z5 A' w8 l5 C // executed in a specific order, but these steps should
9 u# f- @( D; w& M // take no (simulated) time. The M(foo) means "The message
% T* y9 l9 \! g; A) S" } // called <foo>". You can send a message To a particular
5 P5 B' w- s2 |. n3 ] // object, or ForEach object in a collection.6 n% I2 Q* U$ y
* O8 z: v7 n7 p" P( E" c
// Note we update the heatspace in two phases: first run: w D. c( Y. `. B0 b8 u ]; s
// diffusion, then run "updateWorld" to actually enact the- J+ i+ S2 Q2 t& _7 M
// changes the heatbugs have made. The ordering here is
& p' S1 }0 f8 N // significant!
3 y4 j S4 \ `6 N* K0 M5 {9 _
$ Y/ a- N9 b* }9 _ // Note also, that with the additional9 T# W* H$ h, S
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ D2 i" R3 M6 O. x9 J5 ~" a5 n
// randomize the order in which the bugs actually run
. B5 ~$ b. j' ~* n' h; a+ l // their step rule. This has the effect of removing any/ Q; T/ ~% O" J5 x7 h
// systematic bias in the iteration throught the heatbug
. r6 Y. v5 O3 \ // list from timestep to timestep1 f) i! Y: g1 [/ @6 Y% X
2 v3 `4 R M) e B // By default, all `createActionForEach' modelActions have: X( Z' |' U1 {- E
// a default order of `Sequential', which means that the
! J8 S+ E8 [6 z" |. Q // order of iteration through the `heatbugList' will be) R! H0 L- n% m4 m) i' T9 ^0 H
// identical (assuming the list order is not changed, E% \' k4 o" v+ x
// indirectly by some other process).) k2 Z. f4 L1 r7 B2 h |
7 m, P; t* n1 B3 p5 c& F modelActions = new ActionGroupImpl (getZone ());) l# ~8 s# s$ _" {& y- A
, ?* y& U( I& g' v
try {' E4 l0 R% [6 }1 c) k5 E' a
modelActions.createActionTo$message
$ h6 n$ j; t0 ]3 k (heat, new Selector (heat.getClass (), "stepRule", false));- g7 { G& j0 ?3 ~
} catch (Exception e) {1 ]* ?7 s5 @ x: i, p
System.err.println ("Exception stepRule: " + e.getMessage ());! a' |. U* W/ C6 M4 d
}* }. ?2 Q" V: [. m6 X
- K- I/ J0 L6 @+ W( s; m) @9 Y try {
* H+ L, M* t# W- i Heatbug proto = (Heatbug) heatbugList.get (0);
/ m7 q: q4 h% U Selector sel = ( G: C+ V. G, t1 N; ?3 X
new Selector (proto.getClass (), "heatbugStep", false);
* {! C$ q) g1 ?0 [" Z actionForEach =
! b) Y/ B$ `& C4 g' g modelActions.createFActionForEachHomogeneous$call: k p5 [9 i$ Z+ g, Q
(heatbugList,
3 U+ j% J U5 B! c new FCallImpl (this, proto, sel,1 Z& W ]9 d6 K" ~* F
new FArgumentsImpl (this, sel)));
: ]0 [0 z' _0 s! d1 z( m } catch (Exception e) {
$ k& K: h/ r; x e.printStackTrace (System.err);, {: x1 C9 C& T: E5 E6 ^& K" N
}# @& s' M) @' @
/ }: U& J+ Y( @+ ?* Y syncUpdateOrder ();6 E1 k, B! r1 K( I
+ x/ W+ p4 n5 \. H1 b% W try {
% F, m8 L3 U9 O4 }! d modelActions.createActionTo$message ; W% c, H9 F6 e. w
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 v! ~0 Z7 Q: R( f% i4 D } catch (Exception e) {
1 s% r* D6 q* r5 U6 | System.err.println("Exception updateLattice: " + e.getMessage ());' ]; Z5 |8 w7 y ~" ~4 x( o
}
+ k Y- D9 I s \' a
: s2 ?' e A" T // Then we create a schedule that executes the
* a) _9 |6 D3 N" h6 C0 _ // modelActions. modelActions is an ActionGroup, by itself it" ^$ s* S+ ]; F6 Y7 @- f) B
// has no notion of time. In order to have it executed in, B/ j# g+ N4 J9 a0 a9 B: p6 j
// time, we create a Schedule that says to use the
5 e; V7 O9 D. S // modelActions ActionGroup at particular times. This4 r/ r. L5 U; Q2 n, j/ ]
// schedule has a repeat interval of 1, it will loop every% X: C; E, |1 i8 ]
// time step. The action is executed at time 0 relative to
6 e. y, T6 Z: x // the beginning of the loop.
9 Z3 J, y' m, T0 z! D. B+ W! r% g% w; W& s2 [1 \
// This is a simple schedule, with only one action that is
7 o3 C7 P8 E7 Z4 s( P // just repeated every time. See jmousetrap for more! Y1 u( z4 T% q+ {9 u5 G$ }
// complicated schedules.3 M, g' D" N, D4 k1 n
* }0 h, M6 }2 i7 N+ _ F; l) f
modelSchedule = new ScheduleImpl (getZone (), 1);8 B/ s0 D% [# `: {# w
modelSchedule.at$createAction (0, modelActions);; F' x5 W: q# o& x9 b$ A, l
. w# e6 w. l' U4 c return this;
6 ]& l# t0 _8 |, x# r) R7 ~" V5 c } |