HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 w+ G) \- H3 `7 z/ k
, F1 W, k4 s& e- i, r, {
public Object buildActions () {/ p& K, G, T8 Y$ ]
super.buildActions();: a9 W% C1 h* ^3 O8 {
3 N4 K+ x+ _. ?: q // Create the list of simulation actions. We put these in
+ g% X3 W3 ^0 @0 H* z N' h8 r // an action group, because we want these actions to be) C! F& a- k" T: |0 V" I9 v) D6 v
// executed in a specific order, but these steps should: F3 ^& C2 `1 e/ S3 [
// take no (simulated) time. The M(foo) means "The message
5 }5 N" s; @0 j V // called <foo>". You can send a message To a particular, ^5 j( R u; e$ B7 Q
// object, or ForEach object in a collection.0 x2 @0 q X/ k# N3 s
" C2 @. g# Y% V // Note we update the heatspace in two phases: first run5 T* x- @; r5 G
// diffusion, then run "updateWorld" to actually enact the. D& H7 g- m7 ^- u# K: `
// changes the heatbugs have made. The ordering here is2 G# }1 n) p8 a( A' \
// significant!
* v: p: f9 m4 S$ A3 t6 E& j/ ~ ! z, I9 A" s% R+ U
// Note also, that with the additional
+ m# d8 a* X+ c // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 { m% K9 Y. h3 ~2 ~( X // randomize the order in which the bugs actually run
( s5 Z; Y4 @4 C# r7 N# J9 q, k // their step rule. This has the effect of removing any
. o2 M; e6 C1 O3 R# f8 \1 g# c9 o // systematic bias in the iteration throught the heatbug% U: s& z5 K- I0 V
// list from timestep to timestep8 L) P/ v' K3 X
) T$ Y6 w' K* Y9 K( A
// By default, all `createActionForEach' modelActions have
+ V% g: ], ] z9 L6 ^9 w5 T // a default order of `Sequential', which means that the$ h) V4 e2 m' Q' S5 [
// order of iteration through the `heatbugList' will be
& P3 c! B2 y* ~9 E6 u, m, G6 K" Q // identical (assuming the list order is not changed& M0 {$ v' M! O' b
// indirectly by some other process).2 \- ~) Z0 Y8 e4 u7 e
6 q3 ^' R1 h! i9 u( L
modelActions = new ActionGroupImpl (getZone ());
4 }8 s- f) o% y* a+ Z j2 M9 s" F
try {
) P. W. I$ A0 J% s' { modelActions.createActionTo$message
8 U" m8 g6 F& e, k3 r (heat, new Selector (heat.getClass (), "stepRule", false));
- U- d: w1 w$ T( U; r } catch (Exception e) {8 A) R/ R3 |7 n/ l3 x
System.err.println ("Exception stepRule: " + e.getMessage ());
8 i# o7 Q2 R5 B! C* g1 ?6 N }" u* j! G: |# s$ ~3 \
) G2 _" R3 z: b
try {
9 _9 b$ A8 _8 M/ ]% z, t2 O; T Heatbug proto = (Heatbug) heatbugList.get (0);
$ M# N0 \ ?7 c) T3 o1 a& K Selector sel =
) S6 C$ |! T6 Q: [2 o. M new Selector (proto.getClass (), "heatbugStep", false);$ h; x* d9 c( L# R; P1 j$ G
actionForEach =
( q6 V; o& X# X" a' ? modelActions.createFActionForEachHomogeneous$call
) s+ ?0 |( |/ a9 G6 P9 x2 P (heatbugList,
% m, A; R( ]6 X# U5 l' f, I1 c new FCallImpl (this, proto, sel,. z& }) z+ |% V' w2 Z# v3 d& e+ J" x
new FArgumentsImpl (this, sel)));- ]0 T( O9 j9 v) r, C
} catch (Exception e) {2 U0 d1 I/ R0 X9 }, Q( r
e.printStackTrace (System.err);
& R, ]0 m' V" P2 g }
6 }2 C1 R; v' o2 ^8 s: h5 t 0 w) F7 j( h+ _( x
syncUpdateOrder ();
! j& x1 J: }+ E8 D5 @* [, _8 S
) t$ H; u' p( [( J5 b/ Z try {
. I+ _3 \) W* a( q modelActions.createActionTo$message a3 S H: U" J1 ~- q$ I
(heat, new Selector (heat.getClass (), "updateLattice", false));2 q4 C6 ?! N5 H& o
} catch (Exception e) {6 q( i2 a- M% y9 m- ^. v6 \
System.err.println("Exception updateLattice: " + e.getMessage ());
2 o7 p5 {7 o1 V* M }
4 S9 p) l- ?' @9 ~( g , A7 n7 V& b7 N9 Q
// Then we create a schedule that executes the7 T, W0 M% d0 f; e0 t' O2 H
// modelActions. modelActions is an ActionGroup, by itself it
& z4 T3 @, A# b) R" ?4 T4 ?$ f // has no notion of time. In order to have it executed in
@* x% M D- x8 s5 F4 w$ }: m // time, we create a Schedule that says to use the2 E2 J7 T) T! n" }; J; b7 x
// modelActions ActionGroup at particular times. This
* H3 n' X' O+ E4 F/ ?1 x* f // schedule has a repeat interval of 1, it will loop every7 q6 H& I N, j' E1 L' [. _
// time step. The action is executed at time 0 relative to
+ V) ^$ t" ?- x/ d' C) F // the beginning of the loop.
5 k k" O) O8 T) g: w
. [9 U4 I0 p7 r8 K5 l( Q // This is a simple schedule, with only one action that is
u* |# M! j2 H! x // just repeated every time. See jmousetrap for more
1 K f/ t" v9 j, }! a; o9 l* g7 T$ l: b // complicated schedules.( y9 U' E' }: d$ u
7 L" [3 p$ r5 _# l$ j' B% X0 V( q modelSchedule = new ScheduleImpl (getZone (), 1);/ @/ V* H3 b# T I2 b
modelSchedule.at$createAction (0, modelActions);
: p& i+ O7 n) |5 x) G9 [; D7 x
3 t4 h# h4 Y: t; C# I! b return this;: W% E! ?6 l9 ]6 g2 o
} |