HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" K1 D6 K) H0 @+ T! ]& X
6 V& s1 @ ?# ~8 R- t* q; ? public Object buildActions () {
# F9 d6 c U! I( G super.buildActions();0 j# p4 e" v* | c+ n+ q
5 |3 ^5 r% z* q# T# ~
// Create the list of simulation actions. We put these in
~4 k( z5 Q3 X9 I6 C( _ [ // an action group, because we want these actions to be
: n4 p. Z/ }: X( N- {5 p$ r // executed in a specific order, but these steps should
1 M' q& ^- ^2 b* n9 Z7 Z // take no (simulated) time. The M(foo) means "The message# \9 `2 c& _# C. p$ H
// called <foo>". You can send a message To a particular* j3 K) O8 f) O. k5 Z
// object, or ForEach object in a collection.
/ P% z) s2 Q+ e( N ' `3 z0 ?& [# o" I5 L
// Note we update the heatspace in two phases: first run8 n9 C6 s) ^! a
// diffusion, then run "updateWorld" to actually enact the+ s) G/ K$ ^0 l5 S) o. U# p! t
// changes the heatbugs have made. The ordering here is' Y% }# C( S5 z- w. ^
// significant!6 ^* a3 |' d' r
! S1 a2 d2 z* k. R) J& k$ b! {
// Note also, that with the additional- n1 n* i; I/ w; E3 Y: a3 ], @& j6 o
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( P: b" n: l# @0 F% Z( G! L // randomize the order in which the bugs actually run! Y. e9 v/ X, S( z- {
// their step rule. This has the effect of removing any2 ^3 G$ D5 E6 N' B& g
// systematic bias in the iteration throught the heatbug
8 B' x. ~7 J( k& W // list from timestep to timestep% |; k* I4 o3 i! O$ I
- v, H) K) P+ L) z9 x. e9 W9 \4 r // By default, all `createActionForEach' modelActions have
. Y/ T. s& `$ ] // a default order of `Sequential', which means that the6 ?' ?- {4 g6 Q+ y6 I
// order of iteration through the `heatbugList' will be
$ `% M( P ? W6 ` // identical (assuming the list order is not changed. n: ?, s, |1 d1 d* {
// indirectly by some other process).
- U; p: K# d9 t$ {% }7 N . [4 `+ M) Q+ `1 ?) Z1 r5 ^
modelActions = new ActionGroupImpl (getZone ());2 s/ @# w# l# q7 N
( x: e2 T& T' G2 O* Z* v9 I; H
try {* j" F# N- o1 G1 u3 s( a% n
modelActions.createActionTo$message
0 _% ^% m8 B7 A (heat, new Selector (heat.getClass (), "stepRule", false));
8 f8 n+ f( F$ r3 y C } catch (Exception e) {1 J5 ?7 K$ Y: p1 o3 r" u6 C3 n9 Y4 `% f
System.err.println ("Exception stepRule: " + e.getMessage ());
) M/ v5 J% \! |2 Z }
. W) b7 N- m' ~" Z2 M& P2 ?
9 ?( k$ U1 p8 u C0 [ try {
. R% F/ `4 {* ]" O Heatbug proto = (Heatbug) heatbugList.get (0);! O7 ?1 ?$ C F- h# s( X$ }% t' h8 j
Selector sel = 1 ~8 n9 Y, Y( S4 U- j
new Selector (proto.getClass (), "heatbugStep", false);: t( _9 S, `! j4 r: @! M/ S7 k4 m
actionForEach =3 n% W8 h$ |, G2 ~, p
modelActions.createFActionForEachHomogeneous$call
) `) @3 C& N/ G6 j/ ^, q8 w# A% d+ K (heatbugList,
0 i2 E3 t' T9 |; r) r, l. ^9 F new FCallImpl (this, proto, sel,
+ k" t& B5 @* I# o( p2 z9 Q: g new FArgumentsImpl (this, sel)));
6 p- y( J. `5 l# L- u, k$ A } catch (Exception e) {8 w5 B: b5 L: p9 \( x# |
e.printStackTrace (System.err);9 M. [* k' t3 }
}* O* l/ y: k, I% i' j, t
3 m5 Q. ]" [* Y% p' O8 ~4 j+ f( q
syncUpdateOrder ();
5 X+ m- C- F) B$ K! ]3 J( i! ^
try {$ q4 n: e; v- M8 @+ ]; G/ k
modelActions.createActionTo$message / b, ^% f. a! s# f) Z0 y% |: D
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 X" y; A& B, J } catch (Exception e) {: z+ f6 u% ]% E% H
System.err.println("Exception updateLattice: " + e.getMessage ());
) l0 O4 F$ a) l6 D" b: p }
+ d: B# x2 I' o% _
p: _9 N0 d; M0 F // Then we create a schedule that executes the( z1 \! N; W+ P0 O
// modelActions. modelActions is an ActionGroup, by itself it$ f4 |# g+ Q+ E2 ]: ~
// has no notion of time. In order to have it executed in% Q1 [( M, Q8 |7 d0 f
// time, we create a Schedule that says to use the
5 d3 }0 J P% g% E/ I# m u) v# B // modelActions ActionGroup at particular times. This
2 u! R* i* w' f0 a0 r$ }: d2 F2 n // schedule has a repeat interval of 1, it will loop every
. F( z! v3 b! @1 a, A8 X // time step. The action is executed at time 0 relative to
0 f! s/ @# A; z+ Z" i // the beginning of the loop.
2 M/ k, J' S6 }# g) X7 Z9 ?- i) R* N& Z. a2 w7 f
// This is a simple schedule, with only one action that is6 _; T* p/ o: q. T8 q+ v
// just repeated every time. See jmousetrap for more
2 @1 E/ \/ B6 G) \0 k8 Z // complicated schedules.
* N1 E8 _& d6 x
% X/ I" D# Y& G5 q \/ t" Z' Q! g modelSchedule = new ScheduleImpl (getZone (), 1);
1 c+ t, [. n4 U S. Q modelSchedule.at$createAction (0, modelActions);5 h& a9 u7 |4 o# `( u8 g
7 h: G. E3 o: L0 Y7 X
return this;
5 G0 u1 I' X7 j, U, x8 c) d } |