HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' T" ]$ r7 M3 _& i
- c. F( h0 k0 Z+ V/ B" x7 O
public Object buildActions () {. E2 P5 v/ }" L3 c' e
super.buildActions();" Q$ O# V1 Z7 q9 T+ G0 A8 O9 S: e
" z' v# A) T2 c" N' |: f
// Create the list of simulation actions. We put these in5 q" P( _+ b' l- e! O' P7 U4 F" j
// an action group, because we want these actions to be
& I% t" W4 |! C // executed in a specific order, but these steps should
9 X- G0 [- S* p- i5 ^! o" x // take no (simulated) time. The M(foo) means "The message0 f/ U' D$ b; I# O) ]) Q, ^
// called <foo>". You can send a message To a particular; Y3 X; p. C$ G9 G$ ^
// object, or ForEach object in a collection.( H K/ J0 u8 P0 f
+ f+ r& Q( y1 L: j
// Note we update the heatspace in two phases: first run; l0 j4 C! {0 {+ M: Z/ d1 [
// diffusion, then run "updateWorld" to actually enact the+ _, f$ }5 Z: _6 w; h$ |2 L2 \
// changes the heatbugs have made. The ordering here is) d1 M1 {+ T7 q0 q/ l
// significant!9 Y3 X9 ?5 ?9 P' Q9 ^' I4 a9 g
2 s" K+ M4 s. K# ~) N
// Note also, that with the additional/ k: P' _: _4 `! L1 W& M
// `randomizeHeatbugUpdateOrder' Boolean flag we can* J: q' @0 _! q: F
// randomize the order in which the bugs actually run
0 @, D/ ?' u$ |, X2 H // their step rule. This has the effect of removing any
8 F1 ` z- q/ }: e7 `6 \ // systematic bias in the iteration throught the heatbug
* y# E1 C$ S% F" s) q' Z // list from timestep to timestep
" U, E. x1 D9 l5 Y
, F7 p5 p# s2 N5 f& n; x& M // By default, all `createActionForEach' modelActions have
. L1 ~1 O0 N& ^ |& G // a default order of `Sequential', which means that the# |9 m3 B3 O6 e1 ^$ m1 }
// order of iteration through the `heatbugList' will be
1 E/ D. \2 Q+ M: d' o$ _ // identical (assuming the list order is not changed4 p- R4 i, C4 _5 [
// indirectly by some other process).9 E' s; C: E7 z
7 @( X' F; `+ F% _' U
modelActions = new ActionGroupImpl (getZone ());0 I/ ^7 s( u& X. t5 r; q0 t Z) V) E
+ H5 T# S' s: ]4 o% [3 u try {3 D- t9 K0 y4 d/ _( S( d7 c
modelActions.createActionTo$message8 A2 i0 @5 K( d; O' Q
(heat, new Selector (heat.getClass (), "stepRule", false));3 x: w( {6 `: n6 b. i' L* I
} catch (Exception e) {, x% \, U# v$ M" s) w' r
System.err.println ("Exception stepRule: " + e.getMessage ());+ T" n# ?- F8 e) w5 ?
}* N" \4 W: {% u) w
% e8 g- Y6 o; b, E1 P
try {+ `! e7 T3 e2 [6 [! `: S% O
Heatbug proto = (Heatbug) heatbugList.get (0);/ x& C9 Y" l7 d x) Y r# \
Selector sel =
" Y7 _) }3 [6 c9 l% ^2 j1 v new Selector (proto.getClass (), "heatbugStep", false);) y7 t: m9 R6 T- b0 I6 M8 @, O" t
actionForEach =
# z+ x# ~2 g2 R' S modelActions.createFActionForEachHomogeneous$call
' ~6 k- s4 V5 f5 L5 }3 p( {3 ~ (heatbugList,. F# V( ~$ e- J: x6 U
new FCallImpl (this, proto, sel,
3 y, P% P* V+ ~7 | new FArgumentsImpl (this, sel)));: W8 `$ W1 t2 t
} catch (Exception e) {
% S, J/ D8 M! @8 u( |1 E e.printStackTrace (System.err);
3 ~- ^) C" ^4 X1 B }6 Z- \+ J( g4 c/ a u, |* H# E& d
4 A v3 F- N# A R3 A* P( j syncUpdateOrder ();; [* `( Q( ~- p* u b! g
+ H. D' F8 v6 V! G) w try {. b4 L0 U. m0 ]- i0 m' v/ s: c
modelActions.createActionTo$message
, L. U$ S5 I& z) E6 t& ] (heat, new Selector (heat.getClass (), "updateLattice", false));
# W( d* ]/ g" T } catch (Exception e) {7 d9 r6 j4 [$ q) S( R8 w
System.err.println("Exception updateLattice: " + e.getMessage ());8 h4 u: U( i2 _$ c, O3 L
}
+ q/ z1 G+ H5 f6 E$ M 0 r- _* q( ]& o. B* L( R; Y9 I$ k
// Then we create a schedule that executes the
9 m3 I |+ F7 j: w1 f6 [. d$ C // modelActions. modelActions is an ActionGroup, by itself it
% H! o& q7 r' K3 ?1 C // has no notion of time. In order to have it executed in7 U; n- X: c4 z' O. Z( v
// time, we create a Schedule that says to use the8 L* H1 r; Q" F) m. g% X
// modelActions ActionGroup at particular times. This% x4 F* \/ l2 g3 n2 e
// schedule has a repeat interval of 1, it will loop every
2 @9 \& G$ V$ t, q1 {! r // time step. The action is executed at time 0 relative to6 B0 `2 K" c! V& f* @( b$ q
// the beginning of the loop.
: X- ~, `2 e( L! W, _/ Y( [$ H; Z4 Y8 F# s5 H& @
// This is a simple schedule, with only one action that is
9 k& `' b9 u& B // just repeated every time. See jmousetrap for more" `7 x8 y! I3 |9 L
// complicated schedules.! Z1 O: e/ Y3 ]! H5 }7 T
" {( b. O6 u. u: q( h! n( z3 ?
modelSchedule = new ScheduleImpl (getZone (), 1);
; T5 W" \. U4 @. x& r' Z" T; I modelSchedule.at$createAction (0, modelActions);' N4 v$ R8 ~" m, [8 d
2 q1 j3 O. p/ k/ {3 i# Y return this;
o" J& L! \' `" w } |