HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, b8 [/ L7 _) \5 I, d
9 d5 j9 k, Y* J" y; R public Object buildActions () {2 T, T I s# O1 t6 i. o. `( O
super.buildActions();2 `7 z, C& r. a p3 d9 h1 f5 j
* x/ `' M- @3 B+ u5 F2 t
// Create the list of simulation actions. We put these in
9 y( S3 M% j6 g% J2 F( } // an action group, because we want these actions to be
8 x6 J9 \ u& K( P* |( ] // executed in a specific order, but these steps should
, I- p% K5 J, F( x8 B$ @ b0 w! W6 W // take no (simulated) time. The M(foo) means "The message& T# ?& D+ H; k6 K. o
// called <foo>". You can send a message To a particular
/ M( W( d$ C, U9 {* l // object, or ForEach object in a collection.2 N, G8 @. y' u t! L
4 [% _: }" C3 S // Note we update the heatspace in two phases: first run! I$ ~4 e+ n0 `! _
// diffusion, then run "updateWorld" to actually enact the$ L B+ D2 |0 N: C- Z
// changes the heatbugs have made. The ordering here is
1 |' u8 {/ H( q% A' s // significant!2 I' @/ S2 B- d2 L1 H
9 r" }8 Z- T& A" y; ]/ \% J // Note also, that with the additional
/ F" @1 r2 c# n8 [$ T% S1 k // `randomizeHeatbugUpdateOrder' Boolean flag we can
! o q/ b( b8 f; j0 u // randomize the order in which the bugs actually run
' \5 |) |1 V* G( J+ R, B8 C: W // their step rule. This has the effect of removing any
' ]" `* G1 w0 T9 i9 U; [ // systematic bias in the iteration throught the heatbug" }# h) c* Q3 M# }
// list from timestep to timestep3 E( T' n" \& e+ z& I$ z" x
( ^4 b0 ^8 f+ Z8 S( J$ a
// By default, all `createActionForEach' modelActions have
% N3 ~) k2 t N \ // a default order of `Sequential', which means that the1 b& _& f. l) j2 k. ~
// order of iteration through the `heatbugList' will be
$ \6 r/ G5 T# E. K- ? u4 ]0 D // identical (assuming the list order is not changed
1 S; y" j* e, o1 e, N9 L! c // indirectly by some other process).
, I) O( C1 U4 v+ ? 4 O) C2 U' H4 ~- x/ _
modelActions = new ActionGroupImpl (getZone ());
9 }9 Y& F8 u: n* a: m2 e, ^9 d
& \; f) ~" N. L" } try {2 |3 n$ o1 @" o) v! I
modelActions.createActionTo$message
% W2 |+ y+ J, V& I (heat, new Selector (heat.getClass (), "stepRule", false));
0 D1 O9 X, S6 Z8 P3 G" j } catch (Exception e) {
/ W" J9 d/ ]- K System.err.println ("Exception stepRule: " + e.getMessage ());. o G+ B* u% r" \
}; W. \: c& f% Q- f' \2 D) X) ?9 n
% n* `6 k) a6 e+ \" F' B% a try {
3 |5 ^' G# A) ?5 {: g- C1 w3 d" b Heatbug proto = (Heatbug) heatbugList.get (0);3 h: q" u. ~3 r. m
Selector sel =
/ u# H/ B7 c& A0 Y( Y new Selector (proto.getClass (), "heatbugStep", false);
* j* _0 S' I8 I actionForEach =
% ~7 G' ~9 W" b6 Y; C) o1 D4 T modelActions.createFActionForEachHomogeneous$call
+ @3 q# f6 e' f8 E7 ? (heatbugList,
& u: K0 z7 j9 F4 O new FCallImpl (this, proto, sel,1 V( f7 \# Q: R2 d8 ]3 @# j
new FArgumentsImpl (this, sel)));+ k% h6 T0 _& q6 D
} catch (Exception e) {
* E3 K1 I1 p# Y Y9 ^- _* n e.printStackTrace (System.err);. t" y3 U, M( t, X
}
! b F3 T! m: x: W$ R; c
) ~5 | {# X8 S1 V syncUpdateOrder ();
. g" B" l$ W! t+ P8 j( {& R3 i! V" n
try {$ o4 |' @: X% O- t# X
modelActions.createActionTo$message & ^1 ^# v5 B/ p" C* W! x- [
(heat, new Selector (heat.getClass (), "updateLattice", false)); R) m" {- D B+ Z1 O
} catch (Exception e) {
+ k/ o3 y+ h+ s( f" J; i5 b/ K System.err.println("Exception updateLattice: " + e.getMessage ());
: C. b$ t2 [1 I% d9 i( j1 q }. J5 Z' v* e% [( ~6 E5 e# X8 a
% z) ^- G% a, Q, X# @
// Then we create a schedule that executes the
; d% J" |5 C' [- a7 D$ _! o // modelActions. modelActions is an ActionGroup, by itself it3 O' G4 S( q) v) @% S5 _9 o
// has no notion of time. In order to have it executed in
: P6 c6 N$ J- {& a // time, we create a Schedule that says to use the
6 ~7 S3 L' ^4 k5 S4 U! C // modelActions ActionGroup at particular times. This$ a& [! U6 G; e% B* Y8 ]7 l
// schedule has a repeat interval of 1, it will loop every
" t2 P4 }; ?! C: w/ T // time step. The action is executed at time 0 relative to/ R3 R. W1 P/ g5 U
// the beginning of the loop.
7 E: e$ L1 M, R+ g" A6 ~! g/ Q4 O* N! S" F' ^7 O% U5 E. z
// This is a simple schedule, with only one action that is
) Y& Q! z% T- U: J6 [- I! ? // just repeated every time. See jmousetrap for more9 j$ @. I% \6 w
// complicated schedules.( r* f5 ~( h$ R0 ^1 O3 T, F
/ n" e5 o( _- N! M9 O modelSchedule = new ScheduleImpl (getZone (), 1);6 n+ g' ^0 h) H6 h! |2 W
modelSchedule.at$createAction (0, modelActions);" u% j. b4 Z6 p
$ M9 ?- e: T- M/ J
return this; a* i- r. V9 x: J( W% s
} |