HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: n3 ^) z% _' a9 c, n$ H% E
0 N( J6 W! K( c& Q8 Y# c
public Object buildActions () {
# T! E" s3 ^4 q. d super.buildActions();
" [6 g0 W* M- E6 k: g 3 J4 T3 x! v. N5 r
// Create the list of simulation actions. We put these in& O3 ~$ H' O4 K' I2 L& F
// an action group, because we want these actions to be
- i* D9 m4 Y) M+ H% H // executed in a specific order, but these steps should$ }9 z* K( M$ K: K
// take no (simulated) time. The M(foo) means "The message
7 w; G- A/ C+ v" g // called <foo>". You can send a message To a particular
0 O4 T. |' h( U. k& _- N // object, or ForEach object in a collection.
; z- n/ @. H& z( w6 j
S* C7 }- H# v // Note we update the heatspace in two phases: first run
. G# B) B9 ~7 K9 X8 o# w& } // diffusion, then run "updateWorld" to actually enact the
2 R3 b7 L' b6 }2 C // changes the heatbugs have made. The ordering here is
) A9 C8 k" [+ O* e4 M; `$ y9 k // significant!" g s, x0 b0 ^9 R
* B* S( n$ o- K$ @3 r! x // Note also, that with the additional
; z4 w# |7 {8 B0 L) M // `randomizeHeatbugUpdateOrder' Boolean flag we can6 A; L+ h$ c5 A
// randomize the order in which the bugs actually run1 ?9 G6 v& T# Z. Y8 G' ?
// their step rule. This has the effect of removing any; b1 ~ g+ f2 W, {% z+ c
// systematic bias in the iteration throught the heatbug7 N* g4 m% A6 X* R
// list from timestep to timestep2 X; I2 T" s5 m8 ~
+ O5 g- r6 h- o
// By default, all `createActionForEach' modelActions have1 z) \' B6 P, k0 z; ?1 s
// a default order of `Sequential', which means that the* i2 y& C9 |5 B8 d$ {
// order of iteration through the `heatbugList' will be
: e# _/ L* D2 ~5 C! Z9 z // identical (assuming the list order is not changed
: l5 L5 X M% L' g/ Y" s // indirectly by some other process).
! e( @1 X: D7 f- ]' T! ]- N5 q 1 W, \! d3 k- T9 l
modelActions = new ActionGroupImpl (getZone ());4 s0 Z( ?0 Q2 h5 i8 [4 U
3 G) P- z# ^) ^2 G6 P1 G try {- b& c& l( K: Z
modelActions.createActionTo$message$ Y* B2 }% w! B5 V/ [
(heat, new Selector (heat.getClass (), "stepRule", false));
6 a2 q9 T, I$ O/ f2 g! |3 O5 R( b) K' P } catch (Exception e) {' H2 |* F3 E+ K. P- E
System.err.println ("Exception stepRule: " + e.getMessage ());: r0 Q; O* z9 l E$ N" q5 `" W4 Q
}- O, W) Z: ~1 H7 q% r% X
& e+ V! u$ G3 t: J
try {, b' w8 Y+ K6 A1 L
Heatbug proto = (Heatbug) heatbugList.get (0);
( V. \! Z2 X1 F0 V- n# Y- T2 t5 K5 b$ C Selector sel = 6 _- h: l: K) r" D! l
new Selector (proto.getClass (), "heatbugStep", false);, J( N! x+ ~! T" B) M
actionForEach =
: T8 V7 c9 r5 q, m modelActions.createFActionForEachHomogeneous$call
+ K' L/ \4 \2 x) [* N' [' v2 r (heatbugList,
2 g- `" z* b* ]% }1 j) W new FCallImpl (this, proto, sel,7 l- C/ M- F- q' F! r, w0 U+ h
new FArgumentsImpl (this, sel)));7 `: o! Z) O* W( o* R
} catch (Exception e) {0 J% ~8 j. V% i( G; V
e.printStackTrace (System.err);
J6 L. k4 Y# }8 @: @' e }
S# c- L. `* Z+ V / M, E% q& O' M( ~# Q% {- e6 E
syncUpdateOrder ();
4 ~# d* h+ z! w$ x) v* q5 |5 {. |. M% e2 }+ }
try {+ E$ T; R) Z# i5 s
modelActions.createActionTo$message 8 y; O+ ?: X$ j P
(heat, new Selector (heat.getClass (), "updateLattice", false));
: d" F' v/ r, C" e5 }2 [ } catch (Exception e) {
2 b; V/ B6 ^! @. q' d5 R9 P System.err.println("Exception updateLattice: " + e.getMessage ());) B' f( U) _% H+ S/ ` p2 n6 g6 M; E
}1 y6 w3 _; v& J
* s5 ?( y; G% x, T // Then we create a schedule that executes the" J9 n2 m- B# ^
// modelActions. modelActions is an ActionGroup, by itself it7 T0 @+ `8 f7 ]" Y: I/ Q# Q5 p
// has no notion of time. In order to have it executed in/ k( g6 Q) n: W5 B: ?
// time, we create a Schedule that says to use the& Y# ]! d% X: \% h
// modelActions ActionGroup at particular times. This
* p$ Y: q6 h- v# C2 O& \ // schedule has a repeat interval of 1, it will loop every
9 E- u" U. _8 v. ` // time step. The action is executed at time 0 relative to
) C% P) C8 ]9 O // the beginning of the loop.) ~7 J) R4 W, b. z, Z
" n8 W* Q6 F$ u. V // This is a simple schedule, with only one action that is# }, h- I0 b7 ?) `9 d* h+ A! i
// just repeated every time. See jmousetrap for more
f% k6 Z r9 \6 e: @* t5 } // complicated schedules.
6 u4 @+ I, C$ ~/ v7 t: }( G' ^ ; I# f/ `5 p0 ~! C
modelSchedule = new ScheduleImpl (getZone (), 1);. L! T) P* C1 i6 p: Q
modelSchedule.at$createAction (0, modelActions);" V% x5 N, B+ O( |( a* [7 ^# j
" h6 p4 O* A5 [
return this;& E! U- h+ H' j
} |