HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 [% K( I+ F$ `; {: e/ S
+ z; r8 l& S* o* B% c public Object buildActions () {8 i. N* q' ]# H4 k6 Y0 l
super.buildActions();1 A" q# v* `) a, ~8 S7 C
# V" m, M: q5 X- z
// Create the list of simulation actions. We put these in
1 z$ d7 T' l# M- C // an action group, because we want these actions to be
4 S( K5 z" V1 S0 e // executed in a specific order, but these steps should
, h( }: U6 S& R# x; { // take no (simulated) time. The M(foo) means "The message
6 e5 {7 p. V3 o // called <foo>". You can send a message To a particular: L$ ~! ~2 ~, i4 ~2 H9 A" i
// object, or ForEach object in a collection.. O: ^9 A3 D2 q: z6 E7 [
9 A7 L6 `; _, k% U
// Note we update the heatspace in two phases: first run9 d, p' I' K- |% K' C3 u* p
// diffusion, then run "updateWorld" to actually enact the) b, k4 B- L# q, j6 ~5 ]+ Q
// changes the heatbugs have made. The ordering here is
' e) d4 y/ F" v8 s4 h" [% l, c // significant!
! O' q# }' V( ^9 l ' h0 F, q0 @8 O5 G f8 |: p
// Note also, that with the additional
% d/ ^0 {! _2 K7 z/ c, L4 V- X6 o& ], n // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 ], G( `9 S' d // randomize the order in which the bugs actually run
9 Y8 V8 Y9 s% o u0 t! e // their step rule. This has the effect of removing any% ?4 J; K) r" L/ F
// systematic bias in the iteration throught the heatbug
) F9 p+ M; @9 t1 @ C // list from timestep to timestep1 ^ b- T; L) p B9 `/ v2 n" |
& z2 ], R! C& w1 Q // By default, all `createActionForEach' modelActions have- y3 z% i( D# @- {# n! F
// a default order of `Sequential', which means that the
3 Z# f" F0 I6 {* d8 o // order of iteration through the `heatbugList' will be
- O9 x X6 f. o# J% O( s // identical (assuming the list order is not changed+ B$ ^2 ?. e7 u
// indirectly by some other process).
; O, u% ?; l( \7 i+ O # _+ h6 `5 t1 T8 m2 i. _0 H
modelActions = new ActionGroupImpl (getZone ());
% O; r' s5 ?! s9 Z3 [6 d' ~% b/ Z6 S0 [+ H
try {+ i, j& N1 c ^, s' ~4 N
modelActions.createActionTo$message
; ?+ O: {3 ?- `4 s3 ^ (heat, new Selector (heat.getClass (), "stepRule", false));* F9 `3 J5 F! m' t; g' _. c
} catch (Exception e) {
; w% } U% \& K* S! p% } System.err.println ("Exception stepRule: " + e.getMessage ());5 O" P l! ?# K( V- k" A2 Q
}
2 u) u: T4 D& z) l& B9 f, g
" q& m5 X& u4 R- n% N3 F" B try {- N- w' b4 Y( L: U: K `, \
Heatbug proto = (Heatbug) heatbugList.get (0);/ p) U1 f) {! R, w2 b6 I$ U0 j- |6 N& M
Selector sel =
' s4 x/ E7 O9 H5 P9 @7 S+ p new Selector (proto.getClass (), "heatbugStep", false); q0 ~# I; o" ~/ a5 z8 ?
actionForEach =3 m! ?' F6 Y7 P
modelActions.createFActionForEachHomogeneous$call
+ S0 B( r$ s5 C# M% j( O" e (heatbugList,/ @3 g! D7 E3 Z( X- t- r# `
new FCallImpl (this, proto, sel,
) t* p: S* k, k3 i3 N new FArgumentsImpl (this, sel)));, U# N2 L0 C: s: K; ~% Q& `
} catch (Exception e) {
! R9 } O3 S2 u* q' j' ? e.printStackTrace (System.err);6 Y# H) |5 }) J( g: Q( A. r
}
6 ?- }9 a' i& |6 ~* ~ . j) `# P1 U6 ]) N( n" ~0 ?
syncUpdateOrder ();( e% Y3 e8 c- \9 n& A
3 J# C7 ~( P. ~3 V) q try {
* `+ J9 G9 C5 W) {. t modelActions.createActionTo$message
$ R- \3 a6 d) A( N* o: ?1 I (heat, new Selector (heat.getClass (), "updateLattice", false));2 m! Y( c3 d/ E9 h$ f0 H
} catch (Exception e) {: y. U7 y }. A1 r2 Q, B: }; x4 p" Z
System.err.println("Exception updateLattice: " + e.getMessage ());# H* v) V8 Q( H% p' I" y
}: B: a* w2 P# @- d
6 w. a, c2 q' x7 D" O! F. L
// Then we create a schedule that executes the8 v; t' _/ j8 Y0 L
// modelActions. modelActions is an ActionGroup, by itself it
. a6 t# h( e- `2 [: Z) X // has no notion of time. In order to have it executed in7 r! o, }* d8 P5 ^* L2 O! {. _
// time, we create a Schedule that says to use the5 L& A( A& ~6 u$ m
// modelActions ActionGroup at particular times. This
1 [* r/ B: x: N+ _/ | // schedule has a repeat interval of 1, it will loop every
& k$ r/ N6 ?- d0 W/ \; b! Y // time step. The action is executed at time 0 relative to9 C0 j' m) U+ \8 g9 H
// the beginning of the loop.. e0 h5 g8 w& ?7 I" O! x
3 V1 P a/ q" D) M- S
// This is a simple schedule, with only one action that is
5 k, r( {4 P+ ^ H3 ^3 J7 x // just repeated every time. See jmousetrap for more+ T, o* e4 }6 i! c
// complicated schedules.
+ x* O/ V4 v- y+ s, c- q, o" Y 7 C4 E9 R: Z9 }# c& c7 K4 u
modelSchedule = new ScheduleImpl (getZone (), 1);8 Z* T1 U2 N8 E8 \, R: V
modelSchedule.at$createAction (0, modelActions);
$ t1 R; y$ S( e
; o7 r: _0 r5 I4 C* z7 X return this;
; a2 X/ H9 N' E6 ], e/ i3 B$ P3 F } |