HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 d$ D, x) R% `: B0 ^+ K' q
7 i$ I2 ^1 t0 {) e- _
public Object buildActions () {
" O* \2 U+ \1 s9 z8 O, U, S: o super.buildActions();( e3 T2 P v5 R6 N& t6 o
U! U0 W4 }+ u9 ^9 R, m3 o& D+ ~3 l // Create the list of simulation actions. We put these in# d% {8 J7 M; g% ]) h$ J+ Q$ @# K- c6 a
// an action group, because we want these actions to be9 P5 Z# V% k8 N$ F4 c8 x
// executed in a specific order, but these steps should# W; }8 f; {9 Q* n, R+ ~2 g
// take no (simulated) time. The M(foo) means "The message0 E- b1 K1 c9 Q/ C5 Z- k; J' l
// called <foo>". You can send a message To a particular' b0 C& x. ~ c. B% Z
// object, or ForEach object in a collection.
5 m; R$ P7 O4 f2 T 2 d0 e; F8 W& k" O
// Note we update the heatspace in two phases: first run
+ ~0 [, n5 U2 ~% ` // diffusion, then run "updateWorld" to actually enact the
- w4 `; x7 \+ m; W; G // changes the heatbugs have made. The ordering here is- k8 d a3 B% v
// significant!
0 m! ^9 f c& ?1 i9 X7 F, S # n3 g" B6 w( m& Z; t/ ^5 m
// Note also, that with the additional% n$ {% T/ c3 j8 `
// `randomizeHeatbugUpdateOrder' Boolean flag we can- O4 J# _8 c# F$ A6 l
// randomize the order in which the bugs actually run$ C' }* K0 J- f( d8 y" f( ?# o, J. v
// their step rule. This has the effect of removing any
+ [: b0 P2 v" P7 \: ~& o0 A // systematic bias in the iteration throught the heatbug
; O$ w+ o8 x- i) N // list from timestep to timestep
2 a& u0 ]( W! E! \% ^1 p
8 F$ L }& L m3 }2 i I // By default, all `createActionForEach' modelActions have# ^5 ^# `7 @ Z) i$ i9 }2 L
// a default order of `Sequential', which means that the. N. G, B8 a+ A* Y
// order of iteration through the `heatbugList' will be
2 c; f: \ x' P0 R# i7 R) J% E) s // identical (assuming the list order is not changed+ J. t* ]! K! @8 H2 w/ N6 T8 E) q
// indirectly by some other process)./ B- ]5 u0 x- Y, i0 V
* I8 I- c8 E K; Y) X1 X; V$ S5 O
modelActions = new ActionGroupImpl (getZone ());
& Y( q1 n; {. p! s
6 ^: B$ Z, Z) \4 B1 |7 A; B try {
! A! F* X7 \2 r/ _ w/ L. h1 H modelActions.createActionTo$message$ U+ s x9 }8 i+ d2 Q' S' g
(heat, new Selector (heat.getClass (), "stepRule", false));( l: Z8 b4 {5 K- c" W% r
} catch (Exception e) {
+ g/ _+ ^3 ~: m9 e% L/ Z% w System.err.println ("Exception stepRule: " + e.getMessage ());
/ W' y9 N( r1 O& n+ E }6 c Y7 y+ M! K* K) x) Z! `
0 ?! j6 S4 r3 p9 c
try {
2 n6 R" P3 @2 t6 V2 Y! y. M6 M) ~ Heatbug proto = (Heatbug) heatbugList.get (0);
( C% A. x% L2 p: ] Selector sel =
8 Z9 P6 @0 N" B9 o- X$ g new Selector (proto.getClass (), "heatbugStep", false);
6 c9 z* h* {- N% Q0 A$ N' k* E actionForEach =
' `: F, n2 \4 N( B8 b, O! Q4 @4 X modelActions.createFActionForEachHomogeneous$call
$ [6 N3 `# N \5 Q7 a; P (heatbugList,( g; ~- Q3 `9 n' x/ {6 |" N" N
new FCallImpl (this, proto, sel,4 l% N5 C, p7 M* R9 }
new FArgumentsImpl (this, sel)));2 J) n5 K* w ?$ E1 u4 K
} catch (Exception e) {0 n9 W9 @3 N4 R6 i: }* w1 M* v+ ]9 l
e.printStackTrace (System.err);8 a4 |, d% Y; N2 C
}6 p3 B$ }6 X# s; j* V" \
1 y: w* P' d% a- v5 F4 L
syncUpdateOrder ();
8 M/ e5 O6 k* |3 W4 m
/ V- N8 e: j) ~ try {
. \. H5 J. {7 O, h+ o modelActions.createActionTo$message
; }* a0 {) F5 A9 S, U (heat, new Selector (heat.getClass (), "updateLattice", false));
9 m3 u% P) g l+ w$ ^ } catch (Exception e) {/ \. B3 g" }& K9 R; e5 l! {9 T, z
System.err.println("Exception updateLattice: " + e.getMessage ());
5 R! L! A% ?5 r }
$ y; ]% h9 y8 O2 H- [
* z$ S) \& {. Q# P( @; a6 h3 r // Then we create a schedule that executes the3 R: i( V4 d; N
// modelActions. modelActions is an ActionGroup, by itself it) `% h! Q$ j& t
// has no notion of time. In order to have it executed in
" m4 z- t% Y' r; x // time, we create a Schedule that says to use the
+ w* o4 g! }; Q! K# Q# \# B$ H. R# ? // modelActions ActionGroup at particular times. This
) a) z- G; ]0 m) v9 k // schedule has a repeat interval of 1, it will loop every
1 a/ ~, c, c. b( N // time step. The action is executed at time 0 relative to V& S, v6 [7 g; P; O& D T) B0 }
// the beginning of the loop.) q( x* X5 i' T3 Y' v4 k9 n3 u
$ A% X% l( Z: j/ C; c$ z // This is a simple schedule, with only one action that is, W. @* o. T- ]5 l/ z/ `% _( `. L/ l
// just repeated every time. See jmousetrap for more
! J4 I1 e+ a7 H; Q // complicated schedules.
2 x/ u v& F* t
+ `8 Z$ D% v( X$ L1 G, M modelSchedule = new ScheduleImpl (getZone (), 1);- C( l' r+ D8 P2 r
modelSchedule.at$createAction (0, modelActions);8 @$ H* G+ l5 }5 |4 H
: n3 ^' _1 `5 ]5 x- h; ], G6 @' U r return this;
1 `$ R. \1 B+ D( o8 V" { } |