HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# [& g; {6 i" S4 z. y2 d
& M" [3 j& a' h O2 g
public Object buildActions () {8 D7 D0 o+ I2 j, `% s9 w
super.buildActions();0 m) j" v" ]( _0 z, ^/ c" f
4 b, N4 H& c& @! u, a! y // Create the list of simulation actions. We put these in. Q: D1 M2 h! K: h
// an action group, because we want these actions to be* f3 o5 p( R A# J6 `
// executed in a specific order, but these steps should+ U* x8 `; L% d' z$ S
// take no (simulated) time. The M(foo) means "The message
; o/ ^6 s" A; [! J# n: A // called <foo>". You can send a message To a particular
: g3 w8 x' ~7 C' a- k+ j( s) l6 K h // object, or ForEach object in a collection.. T5 _' d. F b* i" W9 z3 g6 {4 a
+ i& B3 ?8 h/ J$ o& x9 G4 x; { // Note we update the heatspace in two phases: first run0 H; }2 B5 ^2 [! j. a
// diffusion, then run "updateWorld" to actually enact the
7 C F6 s) S5 S" [/ C // changes the heatbugs have made. The ordering here is/ X# S% A! m- Z
// significant!- x$ _: |! Z6 W' ]1 Z' J" L. }
9 [: l$ ]0 Z5 p7 q6 `5 I2 q
// Note also, that with the additional" h6 j9 L1 g& k7 A& y% T
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ ?9 a" M/ {3 J/ R" p2 G* W // randomize the order in which the bugs actually run
7 _3 Z9 x, K0 o // their step rule. This has the effect of removing any
1 U, o% y7 u B8 T% { // systematic bias in the iteration throught the heatbug
, L g# ?$ J7 h P, h // list from timestep to timestep5 U- c9 B0 a c ~1 d- l
4 a- m+ r/ u3 T8 Q // By default, all `createActionForEach' modelActions have
# q2 \- \9 f! ~, T& F0 y6 P // a default order of `Sequential', which means that the# w' f; `0 u' }# z- |3 \5 i
// order of iteration through the `heatbugList' will be* e0 E9 r, Q( O9 q: o( w g4 R
// identical (assuming the list order is not changed
) k5 w/ n6 {6 {7 Z( z$ E // indirectly by some other process).
* h7 {; p$ K* q! Y3 |& s
3 u0 W: m- ] Q modelActions = new ActionGroupImpl (getZone ());, ^, A" ]" G8 @3 k7 }2 R) e
# Q f; K) n: |, ^+ G5 n8 b try {5 H( D/ _+ g$ X. Y! Y; [& j! w1 H
modelActions.createActionTo$message
- d6 U1 v7 l! @ \! @. a$ \ (heat, new Selector (heat.getClass (), "stepRule", false));6 w5 o {8 D3 C4 y( k9 G' G$ Q0 g
} catch (Exception e) {4 b& z" s/ D2 \ B! x1 M
System.err.println ("Exception stepRule: " + e.getMessage ()); o5 ^4 n3 ?9 n1 i: B
}
1 j8 p; g' p4 t+ _( Y) P
7 b" B' }# v* j. H, d' i7 Q try {$ h+ o7 P0 h" s# v! r
Heatbug proto = (Heatbug) heatbugList.get (0);) t1 q7 {; w* S! S; Y0 B6 u$ ? x
Selector sel =
" g( v3 x% {0 u; I new Selector (proto.getClass (), "heatbugStep", false);! o6 A" k) ?( r- f
actionForEach =" L9 U! y/ [* N; G+ g5 E! D
modelActions.createFActionForEachHomogeneous$call g4 v1 B5 l5 j2 q
(heatbugList,
! r& _( [( S- `6 r new FCallImpl (this, proto, sel,
# I9 k% n& u; z' P$ K new FArgumentsImpl (this, sel)));
0 N" G8 e$ Y p } catch (Exception e) {$ F6 C4 k9 V6 R F! E( r( Y+ _9 H
e.printStackTrace (System.err);# [( e8 f, V$ S
}& Y. p+ A1 W6 T5 `; X, i, L
+ V5 _0 v2 l" b ~& v syncUpdateOrder ();
9 d4 Z3 x4 k0 |2 d2 C
' J0 M" k% B6 I1 f) k2 m try {! z4 f6 ]# P) }% I& t0 t. E3 l0 S2 L
modelActions.createActionTo$message * j6 r. k. y0 d( Z' \
(heat, new Selector (heat.getClass (), "updateLattice", false));$ b. g3 }, k/ \9 q$ d* s! {
} catch (Exception e) {# M5 Z6 Y' k/ U# B3 S7 f6 Z
System.err.println("Exception updateLattice: " + e.getMessage ());
- S* m9 [8 R3 b; p* d3 B }
) r- n& v' c- I9 T & Z; d- o! _6 w$ ]
// Then we create a schedule that executes the* Z1 l" i: u8 C( c. L; V! \& {) F
// modelActions. modelActions is an ActionGroup, by itself it! N+ t) _+ N4 Z: K0 U8 v$ ^
// has no notion of time. In order to have it executed in
: @+ Q5 \' I `6 o // time, we create a Schedule that says to use the( P: w4 F% f6 q3 x( z
// modelActions ActionGroup at particular times. This
( M% g4 \4 Z2 ~ w // schedule has a repeat interval of 1, it will loop every) B! m; V5 L3 X+ |' h4 m& K; U
// time step. The action is executed at time 0 relative to
/ Z3 u( d. }( y d9 K // the beginning of the loop.
8 |( p, D+ Z% E# Z7 b/ b( G/ H& @$ x' N( E/ ^2 t
// This is a simple schedule, with only one action that is
( O4 b! y2 i3 y+ e3 K$ H' b3 r // just repeated every time. See jmousetrap for more
- _: j7 k+ o4 C8 G0 }" j // complicated schedules.
* i+ P8 P# Z, \+ U: ?* Z0 |" A
. `( a8 L2 _# w4 ]2 i* {$ h modelSchedule = new ScheduleImpl (getZone (), 1);! L0 A/ E* M; d) X% A* {
modelSchedule.at$createAction (0, modelActions);
' \- Y% x5 U3 n- i4 ^: T6 S$ G6 }! { j
+ u' L2 s- X& l5 t2 S return this;# C& B+ k8 K8 W$ M( I, x4 Y- q1 K9 T. S
} |