HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; K* [, o) s4 k7 U1 _) _: e3 f
6 Y' B1 j6 U$ R1 V: J0 ^ public Object buildActions () {, a$ D5 a6 u, p% x
super.buildActions();2 f# w4 E0 l+ `" O
) ]% j+ ]8 b$ t/ j0 n // Create the list of simulation actions. We put these in- x. }6 b$ h4 G
// an action group, because we want these actions to be
, a- h2 G) }. B D0 V // executed in a specific order, but these steps should" _1 ?; s, a% d' x3 q8 G+ ~
// take no (simulated) time. The M(foo) means "The message
! m# U- n; L C9 S7 \ // called <foo>". You can send a message To a particular1 c1 F3 W" C7 h2 d
// object, or ForEach object in a collection.3 G4 W* R6 o1 e, @ v
; P: L) `) j( l% y2 Y+ z* U // Note we update the heatspace in two phases: first run0 H& ~3 @( O' d) Q. t2 j6 C; H
// diffusion, then run "updateWorld" to actually enact the
5 I! G/ s3 u, s7 H+ B7 `* i9 p // changes the heatbugs have made. The ordering here is9 m# p5 ?. I2 W+ f% N, a- K4 `+ w
// significant!
7 D8 ^4 a# N, a, `- q. b; X( D # @$ N4 N. T" a4 Y, a- Y
// Note also, that with the additional
$ j/ g( c: d+ e! C- l) C // `randomizeHeatbugUpdateOrder' Boolean flag we can
# F9 a; W. a7 u$ x4 {5 b // randomize the order in which the bugs actually run
( B( Y, }# r! | // their step rule. This has the effect of removing any
) k; J2 f/ `! `% L // systematic bias in the iteration throught the heatbug
; a2 c8 {( R; t! V! P5 U* V4 A3 t l // list from timestep to timestep5 t( Q# l( T5 @) k
/ b5 N! S& n8 R7 V1 H$ O // By default, all `createActionForEach' modelActions have
3 L( o5 t/ _8 D" U! u. ^ // a default order of `Sequential', which means that the
% Z7 L3 c1 P1 M // order of iteration through the `heatbugList' will be
: Q4 ^2 j% f# U // identical (assuming the list order is not changed
( M& ~6 `2 J6 |1 |- j( y // indirectly by some other process).
0 d* A4 U9 [6 X% L& @ 3 C( M# Y% R' b% X$ Y [
modelActions = new ActionGroupImpl (getZone ());% O0 J2 D7 c/ E- g u
; Q/ K: s- s, i0 c# z& i1 d
try {6 v( O* `% m u
modelActions.createActionTo$message
2 r% V i. I5 [3 | (heat, new Selector (heat.getClass (), "stepRule", false));
, M: W8 X! e7 X( W9 O } catch (Exception e) {
0 g' b3 N0 R4 ] System.err.println ("Exception stepRule: " + e.getMessage ());
) k3 k% x4 e2 N( [9 K8 c2 \& | e }- [5 A, j! R {+ c. x
6 H3 E* U, | A4 J2 I) T$ s& N* I' e try {
1 s5 Y1 I) H/ s( a Heatbug proto = (Heatbug) heatbugList.get (0);
8 p7 `4 x7 z; P9 ~ Selector sel = / i4 l" n& j& o
new Selector (proto.getClass (), "heatbugStep", false);: b+ u/ b8 B/ {
actionForEach =
4 @0 V( t- `1 D; T! T/ y7 t* k modelActions.createFActionForEachHomogeneous$call( `/ \& t0 l( q, o6 Q- s
(heatbugList,% H1 n$ G5 P1 d2 H* ]; \1 ~/ {
new FCallImpl (this, proto, sel,
; S+ r3 j4 B! f new FArgumentsImpl (this, sel)));! a0 B8 g" d/ q6 t9 L0 S
} catch (Exception e) {7 S: E. o2 j' t# ~
e.printStackTrace (System.err);8 F R) c" i( v- d
}# \* D# t) Q: _# i6 }
. y0 J9 n5 ^, X2 E+ I syncUpdateOrder ();
0 \! {6 ^. y8 ?, A% B4 l% C' ~. W. n7 E5 I8 x' T
try { J4 F5 w1 _! e0 w/ ?+ x8 i" I. k
modelActions.createActionTo$message
* Q) f; w3 X+ n9 q# ? i& D (heat, new Selector (heat.getClass (), "updateLattice", false));2 S- n' p% J. ]# K
} catch (Exception e) {; ]7 u' R( v- ]& D& U( Q% D
System.err.println("Exception updateLattice: " + e.getMessage ());
( b$ M/ c) Q; S# z' |/ F }" i/ h0 U: m; z0 M) h2 {
4 [, K5 J* r5 P1 [
// Then we create a schedule that executes the
6 l& y+ ^/ O- @3 E# \1 g // modelActions. modelActions is an ActionGroup, by itself it* t+ y" d4 j$ l% }' i) _: ]( t
// has no notion of time. In order to have it executed in- E5 e5 c; M% M
// time, we create a Schedule that says to use the
: }# |# R! u; q+ x* x // modelActions ActionGroup at particular times. This
; S4 x+ @$ R0 N+ d // schedule has a repeat interval of 1, it will loop every
( e/ x& D% K4 d. m // time step. The action is executed at time 0 relative to
6 d9 u9 A& t/ G' t. k$ T- v // the beginning of the loop.
, ~9 L x) @' T$ `( e* s1 E# q; w# x" W( @# M* b% q8 C- ~/ `
// This is a simple schedule, with only one action that is1 B0 I7 h7 U" g& d7 I6 A4 p: ^
// just repeated every time. See jmousetrap for more$ v' q* S. `: m- `
// complicated schedules.
- v5 v z' A( W- F* r4 E, J
( A, v: O3 u. B modelSchedule = new ScheduleImpl (getZone (), 1);
& v q3 z6 O4 Y, E* t! ?7 C/ h) x modelSchedule.at$createAction (0, modelActions);' ~( ~- ]2 S. E( r
& M( r" J# D) Q6 \9 ~8 D* a return this;1 X+ Z) r9 S6 T9 b
} |