HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 E! z% d. w. n% }' a
- M- w' Z7 ~8 M; w! U5 _9 y' `! n public Object buildActions () {- \/ z# ?, O# |2 W2 Q
super.buildActions();' h/ [' T$ {: v! j! F
- _) S* P" Y9 `" X; n) g
// Create the list of simulation actions. We put these in
; e3 N1 H3 M G, `+ {" v$ _* ` // an action group, because we want these actions to be
& z ~! J( r# `5 }$ H // executed in a specific order, but these steps should0 u8 E5 W, {( S$ ^" P& n
// take no (simulated) time. The M(foo) means "The message
/ f4 x( l) [" V2 C8 } m // called <foo>". You can send a message To a particular# f* [1 E w: s, o8 N: q, A. C2 h
// object, or ForEach object in a collection.
4 K3 u. B/ A2 X# F0 t& J
$ P# {# h& G* @1 x // Note we update the heatspace in two phases: first run
# x1 }, i* x5 K // diffusion, then run "updateWorld" to actually enact the0 C1 b' j, l4 _* U; A# j7 K3 ]
// changes the heatbugs have made. The ordering here is* v4 Y( W# ?2 u& t
// significant!
2 v2 \* a+ |4 J' ~$ C/ a1 ]( O ' ~2 f* T$ ]9 L5 `
// Note also, that with the additional- l, D1 v/ H+ Y" Y7 K5 K3 G* |- z
// `randomizeHeatbugUpdateOrder' Boolean flag we can* t; U# S/ {9 P5 u5 R2 d
// randomize the order in which the bugs actually run
# l5 l2 p8 H: ?: A* r) S# l // their step rule. This has the effect of removing any
& R" t; R) O' A6 S* g // systematic bias in the iteration throught the heatbug% \* P. K8 S& W: v3 y) A
// list from timestep to timestep0 w b) I# f! G0 z a$ ~( W
3 Y9 p; ^' B0 r# h# B+ J" `
// By default, all `createActionForEach' modelActions have* K# |- c/ Z% _6 ^
// a default order of `Sequential', which means that the
( p3 u; v( E) [/ H, ^, N3 J/ { // order of iteration through the `heatbugList' will be
$ W0 O1 X5 E& w8 r // identical (assuming the list order is not changed' c. D% A' H" i4 W% q4 w) X
// indirectly by some other process)., `+ g4 z) O0 V: [* H9 F
" Z& F3 C9 {" G u) e4 B modelActions = new ActionGroupImpl (getZone ());3 _0 e0 }9 @" |% j* L J9 V, Z8 K
+ O" s5 @, K! S( N! C" l. Q5 ^5 N# f
try {' m) e' S9 t+ A" q7 u3 A+ t
modelActions.createActionTo$message
$ D7 }# B- e J! v6 A% Z (heat, new Selector (heat.getClass (), "stepRule", false)); {" l# c$ R I4 A4 I4 \
} catch (Exception e) {
; H& \) h6 b4 k5 i5 ^. B System.err.println ("Exception stepRule: " + e.getMessage ());$ L* w5 P; d' q: F% L7 G
}4 \# g* v2 V4 A' q7 i( K! c
( U2 I& l7 X5 ?" E4 N( w
try {1 V8 n6 e$ Z! s1 Z9 L0 b
Heatbug proto = (Heatbug) heatbugList.get (0);
* `5 n2 b$ c* s Selector sel =
( A# Z) G9 o$ _ g2 M2 _ new Selector (proto.getClass (), "heatbugStep", false);! v9 a/ F# S+ s- A: c/ x% x9 [! ~
actionForEach =$ M' z# \# [% p6 ]6 Z6 W) g
modelActions.createFActionForEachHomogeneous$call
) T3 v* G* a+ d* B (heatbugList, A! G: K8 D- j3 w4 P! N
new FCallImpl (this, proto, sel,
. T+ l6 g$ ~* C# t% G+ g% g. R# ] new FArgumentsImpl (this, sel)));
4 [) w5 f0 C3 y, j. K2 _) l3 s } catch (Exception e) {3 J3 `) f/ \2 v
e.printStackTrace (System.err);8 l8 h3 [: y! |7 r0 m* U$ X* }
}5 @+ N; r2 l+ a S, [( O
F& t7 u S& ^/ q% A7 t# E: l
syncUpdateOrder ();
# f2 D7 I7 p" a3 R4 k
* l' V7 k7 I1 _2 E try {! N w/ k$ {- C& k) m
modelActions.createActionTo$message
: g, Z8 l( H- t) \8 ~ (heat, new Selector (heat.getClass (), "updateLattice", false));
) q+ v1 M! j; r7 [" L } catch (Exception e) {' T. Q3 b' X5 i$ k! Q5 g' k3 e6 `
System.err.println("Exception updateLattice: " + e.getMessage ());, F M- D0 Z# K# m0 @# Z, |" O
}
" N3 H5 [) U3 Z# o9 F
% F3 x! o! G/ h1 K9 P // Then we create a schedule that executes the
: Q8 i& m" n. {3 q3 q // modelActions. modelActions is an ActionGroup, by itself it- n2 L* S" L5 I- ]1 b+ s
// has no notion of time. In order to have it executed in* D$ T* D# X# T& r- x/ E2 C0 T
// time, we create a Schedule that says to use the
. p" m% I! @: E' K' t // modelActions ActionGroup at particular times. This
( X9 n& d" H& O- I // schedule has a repeat interval of 1, it will loop every7 |- V- \. S0 e: U1 b3 c
// time step. The action is executed at time 0 relative to
1 D( x8 e/ w. q" B- M) N" l# N! i$ P // the beginning of the loop.1 x9 J/ d: r m7 n! k0 i
8 P. S5 {- _+ }9 V- d // This is a simple schedule, with only one action that is
" h& k& f* B0 B; n // just repeated every time. See jmousetrap for more3 G0 V( }) D, k9 x4 f& z
// complicated schedules.
" Z& `" b& \' L' j 2 ~# e' I$ h2 H% |, ^
modelSchedule = new ScheduleImpl (getZone (), 1);6 `: x4 G F$ I/ x
modelSchedule.at$createAction (0, modelActions);' M% D. T ]! Y! s3 L7 C! a d
, l( _* O9 e$ ~; f. l, |& ~
return this;6 l- T( R3 I* M4 P4 X) f1 r4 c8 P
} |