HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 O, {0 b# S% D+ |5 q
, W$ L& ^2 Q( K( b& T public Object buildActions () {0 f" A/ o' V+ r& L" D+ l# v' J
super.buildActions();
5 A. i- x- n3 O( }
% h. g+ d: e& g5 H0 U6 s& }7 O // Create the list of simulation actions. We put these in0 |- ^4 q3 v! T" o) `
// an action group, because we want these actions to be
- V. ~3 ^: _8 Y6 a& c // executed in a specific order, but these steps should$ R2 G3 y, a7 l2 ?5 B+ U0 Z T
// take no (simulated) time. The M(foo) means "The message+ y: b: d3 m& N+ O8 y1 q3 B
// called <foo>". You can send a message To a particular- e$ ^. ?" Q4 C) ^3 |: m( o
// object, or ForEach object in a collection.) @9 b( Z2 A" m3 z& t( c# I; e. q
! q \6 d, T5 Y5 k# B // Note we update the heatspace in two phases: first run, V! K% z+ I. P
// diffusion, then run "updateWorld" to actually enact the5 i+ g+ p/ M" r6 Q' ]
// changes the heatbugs have made. The ordering here is# F, o% O1 M; d2 N+ {
// significant!. S: D7 M. P: S2 T! j! }
7 O b3 E t9 Z4 @! C
// Note also, that with the additional( A" l+ Q, i% R# l
// `randomizeHeatbugUpdateOrder' Boolean flag we can- a" E) A1 l. `& a- R! Q" x* u
// randomize the order in which the bugs actually run; p( ~+ {; d0 F
// their step rule. This has the effect of removing any! a! }7 t0 }/ H' j' P. n( p% w8 Y
// systematic bias in the iteration throught the heatbug
6 U- F! Z# ?7 D: r) O$ c // list from timestep to timestep" l- n& r- r7 q
0 Q) x( m7 B3 f& i // By default, all `createActionForEach' modelActions have& @% P* ?9 E, C& x* \, B- M
// a default order of `Sequential', which means that the7 D/ D A3 v1 I% s/ o O
// order of iteration through the `heatbugList' will be
3 V' n( E0 F$ ~, y: y u! E/ |7 p // identical (assuming the list order is not changed
8 e# D% V6 _. ?' E // indirectly by some other process).
" |6 A( P1 r+ g. ~ X% }4 \; Z9 x2 L4 l
modelActions = new ActionGroupImpl (getZone ());4 z8 {9 q C9 e2 {& c1 t
9 H+ u6 `& p$ _% R; p/ \# m- z/ I try {
$ f+ n9 w4 F; j( K modelActions.createActionTo$message8 R; M; {6 j) I# H2 M$ Q1 B/ D
(heat, new Selector (heat.getClass (), "stepRule", false));
; F0 `+ F* n$ z/ N } catch (Exception e) {* V, F! o. f' P( v h
System.err.println ("Exception stepRule: " + e.getMessage ());
; R8 ~5 Y4 p6 r# {7 ` }
7 M( u6 M Q& J+ g7 B7 |2 u/ E
+ E0 D1 P* b4 Q% l7 |9 s try {' @8 U9 P/ \& _: R9 P1 G
Heatbug proto = (Heatbug) heatbugList.get (0);
5 D" e' h% B/ V2 g) v9 L0 w. O Selector sel =
4 T. D+ | Q0 `$ f; V8 y new Selector (proto.getClass (), "heatbugStep", false);! k9 I4 p; K4 x7 `( X
actionForEach =- s6 D4 j+ M t' | V
modelActions.createFActionForEachHomogeneous$call
# N+ v8 f' h* {7 v" H (heatbugList,
# }: O/ O& s3 V# M8 U1 P4 S new FCallImpl (this, proto, sel,2 z8 {5 g- u" _! q9 b8 |! `1 q) T
new FArgumentsImpl (this, sel)));: |7 p6 q" u& g
} catch (Exception e) {
5 E8 N1 x2 S; x( G3 O e.printStackTrace (System.err);
) Q8 H" p% f# }4 k& f+ y- F, H }
% o) ^9 N% G$ V) I2 u* a5 P , [2 p7 Y- p& p7 V' z
syncUpdateOrder ();! r( Z" h% o9 ^! ^+ P
% h1 X: J3 A% D, z5 s- v try {
, Y+ A" L: X R/ R- L& g modelActions.createActionTo$message
6 m7 E: M+ J) w' t- P: u( D5 r! S (heat, new Selector (heat.getClass (), "updateLattice", false));
8 P6 r+ D% }7 H$ E' a8 [8 C } catch (Exception e) {/ J& C8 L- a8 Q& r4 W- k6 K2 k3 v+ e
System.err.println("Exception updateLattice: " + e.getMessage ());( B! I" g( q& P; l# H
}
5 l! H; M ?, ~" j0 @ ; _- ?1 C) w( S9 e7 H
// Then we create a schedule that executes the
! J: C$ P }) n: T' x // modelActions. modelActions is an ActionGroup, by itself it
0 W# P' r0 `5 k# V // has no notion of time. In order to have it executed in0 |% K% y% H" ]- Z# ]& ?7 E
// time, we create a Schedule that says to use the
9 S" M- V3 [% Q: @) ^5 \ // modelActions ActionGroup at particular times. This: j% b6 y( @! V' V( X0 Q4 S
// schedule has a repeat interval of 1, it will loop every& L. G, ]9 i0 D# c$ p
// time step. The action is executed at time 0 relative to
3 l& E5 ^5 o) a: @! [+ t+ \/ \ // the beginning of the loop.
7 j; l% t4 ?4 z3 \8 Q2 H
$ O7 w* {1 i" o. H // This is a simple schedule, with only one action that is
+ _1 L2 V p+ b/ o; A5 c5 f+ V; u // just repeated every time. See jmousetrap for more
8 Q4 I( e, x% D! U1 N1 w* V0 Z // complicated schedules.
6 G) F; W/ L; _* F" o- { L8 _- c8 @ E: D. U; a) `! D
modelSchedule = new ScheduleImpl (getZone (), 1);
4 ~- k* o7 `" S modelSchedule.at$createAction (0, modelActions);
- v1 |$ Z" O$ I . @& U j! B4 j7 u& s
return this;
2 b$ B' u& \) R0 Z- B3 t } |