HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ R7 E' u4 L& R* V( ?1 q6 n. b, L9 [2 S* w- z u
public Object buildActions () {+ Z( @- X2 I' i7 e. ^. G$ D
super.buildActions();, I9 j) Q, Z, u1 E$ W
; o9 m W; l$ c7 b5 n // Create the list of simulation actions. We put these in" y8 t! \$ w& `# z$ d; j0 [
// an action group, because we want these actions to be
0 J+ Q# Y, I' t1 _( ^ // executed in a specific order, but these steps should
* m2 I2 _+ u' N3 E5 z // take no (simulated) time. The M(foo) means "The message
1 Q6 ^) _1 q" v( Z9 x // called <foo>". You can send a message To a particular. G" `2 `) {3 M2 z9 L; m
// object, or ForEach object in a collection.( V+ p/ D9 ~; K% V3 u* I
' U; q' x/ w, N& E
// Note we update the heatspace in two phases: first run
+ V- x0 g+ m: F/ ~ // diffusion, then run "updateWorld" to actually enact the6 R' o! j0 p; b, {: b8 ]' w* I; d i
// changes the heatbugs have made. The ordering here is4 @8 _( H" D. N/ d0 i
// significant!3 m' z5 \6 Q% ^: a4 ]
- x' D+ g# \' y7 ` // Note also, that with the additional
# ?5 Z* B6 I9 A# r2 t1 a // `randomizeHeatbugUpdateOrder' Boolean flag we can/ E t/ a F$ @. D; D+ m. Y
// randomize the order in which the bugs actually run. Q; Z1 F' i3 U& L) F2 G
// their step rule. This has the effect of removing any
) S, y: w* E4 M7 K // systematic bias in the iteration throught the heatbug
: y: X# t2 u/ K! | // list from timestep to timestep% ^, h6 m5 `* W/ B! D7 |
% S% p) O: Z6 I/ \2 j& ~
// By default, all `createActionForEach' modelActions have
& }& s* S. J1 f // a default order of `Sequential', which means that the
8 a+ {2 [' }$ b! |8 G% e) ] // order of iteration through the `heatbugList' will be
4 D- ~3 L6 h$ t% @ // identical (assuming the list order is not changed
% C! {3 g2 I, i; F5 c4 C+ a // indirectly by some other process).
. `5 n' N& | [; z! f3 x : p7 B+ g& d( P7 F( O
modelActions = new ActionGroupImpl (getZone ());
0 ] h* V0 X$ G7 Z+ H
' a* N' o+ ~; a7 C+ b' x try {0 f5 X0 ?4 ]4 w- O N
modelActions.createActionTo$message
$ a6 u, C% I& _1 Q# v/ S (heat, new Selector (heat.getClass (), "stepRule", false));
) v- ?) j# s, x } catch (Exception e) {5 ~, D$ J0 L l: B5 o4 T. r
System.err.println ("Exception stepRule: " + e.getMessage ());
" w$ e+ V! M$ c7 t3 h e } ~! f" B( N: K* Y& w, [5 g
0 t6 z9 ^3 y3 b; ?: I0 E
try {) }6 I; t1 h' p- s9 g+ @
Heatbug proto = (Heatbug) heatbugList.get (0);
& v5 o2 _3 I& D( _& |' S- D& \ Selector sel =
1 h% \+ `% |- H- [ new Selector (proto.getClass (), "heatbugStep", false);
: i/ Q/ p- u) |% J& l/ e! e actionForEach =
: h" X: X; y# T# B( K" K# Y modelActions.createFActionForEachHomogeneous$call! ^9 h) [! E+ b+ L$ t' U9 j. Z
(heatbugList,& L6 n, U9 d" t4 y
new FCallImpl (this, proto, sel,
+ t$ X- a7 o/ [0 X1 N" f new FArgumentsImpl (this, sel)));$ \9 k( I! Z0 e; [: [
} catch (Exception e) {* u1 R" O" H7 n3 Q; h2 ^
e.printStackTrace (System.err);: K! `8 c" B3 F3 \1 ^4 K; I# ?1 B
}
# q5 U* W J+ a& O; k
. O0 S3 y9 {8 B* x# |5 L8 j0 L syncUpdateOrder ();3 h8 R' C% {( Z# }
6 ^+ U3 A8 k6 N7 s+ j0 t% r
try {# x7 ~# I( A" o4 j# K
modelActions.createActionTo$message : B# z/ J8 q- U+ L! |( V6 ]7 _' ^
(heat, new Selector (heat.getClass (), "updateLattice", false));
- L S$ A3 G, y0 J/ I( Z } catch (Exception e) {7 K0 [7 }! z( Y! Z
System.err.println("Exception updateLattice: " + e.getMessage ());0 f, }2 h8 ^( j" V5 C
}
- r- n ~3 w! P& j* k
' a! V4 ]. V* p, a7 w. B+ J: d // Then we create a schedule that executes the$ h% }# @& p' \. {8 V
// modelActions. modelActions is an ActionGroup, by itself it4 V, H! g( y2 Y9 b% E/ c
// has no notion of time. In order to have it executed in
2 i! G! e' u1 w- z5 I2 v/ G: l // time, we create a Schedule that says to use the
2 ~: P. R$ H4 ]" h; {8 `, H // modelActions ActionGroup at particular times. This% {& D0 v" F" m9 r7 ~% I+ [, G4 }/ V* V
// schedule has a repeat interval of 1, it will loop every
) S3 ^8 x( Q' n // time step. The action is executed at time 0 relative to
& W# J4 ?4 J* q // the beginning of the loop.% `5 x- [( ]. t0 N9 m5 |: ~' S
& m: J& j" S* d4 n+ M* {" N
// This is a simple schedule, with only one action that is! h, O2 l; ?1 c; D
// just repeated every time. See jmousetrap for more
" b6 @; a4 ]5 y5 G // complicated schedules.) u3 b' i2 s+ Y
; o6 l9 P3 [" M: ]( E C# Z modelSchedule = new ScheduleImpl (getZone (), 1);
, f8 @% R: J0 T$ d, `7 L' v8 p modelSchedule.at$createAction (0, modelActions);
4 ~' p f" Z- L* G' ~- f8 {
( u2 @. V/ m) L; K! ~ return this;# d$ ^' \! m5 [9 w* m6 i
} |