HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. e" Y3 T0 @! K" G; T( s
# _# p; |/ Q1 k4 {' t# m% Z( G
public Object buildActions () {
5 R& D- N; B+ @9 @ super.buildActions();- e8 {' O3 v( @
) H; C2 s/ Y \$ e5 Y
// Create the list of simulation actions. We put these in5 I0 M- H6 x( k! |, b2 n- w( G
// an action group, because we want these actions to be
& C9 g3 a- Z8 Z4 c+ D6 Q6 G9 e // executed in a specific order, but these steps should
. v+ c9 G' e4 @; u2 A3 _ // take no (simulated) time. The M(foo) means "The message5 o* a$ R: [8 _$ S$ N
// called <foo>". You can send a message To a particular
; I$ [* k; @, Q // object, or ForEach object in a collection.7 n! |7 G, l, `) w5 A
0 m0 c, M( ^! h' g- i7 } // Note we update the heatspace in two phases: first run, r# M# h5 [% V' H6 q; W
// diffusion, then run "updateWorld" to actually enact the) d& A- O' ~% b& B) A
// changes the heatbugs have made. The ordering here is2 D5 ~. U, x9 G) `# w U( E( z# L
// significant!0 B! W7 j$ t4 E1 L: O
7 B: q. K0 A, `! v% t // Note also, that with the additional
& G( X* w0 E. S9 s // `randomizeHeatbugUpdateOrder' Boolean flag we can* U' l0 C" o% t5 J; {! X
// randomize the order in which the bugs actually run$ V7 ^. y' d/ W k
// their step rule. This has the effect of removing any
3 H% {# ~6 v+ J/ x$ W ?* i // systematic bias in the iteration throught the heatbug9 G6 i. Z i% ~8 G% A
// list from timestep to timestep
( `; k/ ~/ D8 ^3 A) J
, l( B& O5 h; b) e! P // By default, all `createActionForEach' modelActions have2 I% `1 }8 N C+ [
// a default order of `Sequential', which means that the/ Z* L/ {5 I. x
// order of iteration through the `heatbugList' will be
" t8 S, Q: t' s. M5 J7 K. e9 ~ // identical (assuming the list order is not changed/ I4 S$ x' r% x8 w8 D' a# j% W
// indirectly by some other process).4 j# C$ p. Z7 a0 ]" T
: E! S+ P5 d& T$ ] modelActions = new ActionGroupImpl (getZone ());4 }" U. B* q, o0 o" B1 k* r
; f- D& f: D7 b: X) k: R+ j9 z
try {
4 h# }* {; A; ^3 { modelActions.createActionTo$message; W& r+ \% X5 t
(heat, new Selector (heat.getClass (), "stepRule", false));' @2 y8 e) j J( U' _
} catch (Exception e) {& X7 ]2 t/ b, c2 {8 J
System.err.println ("Exception stepRule: " + e.getMessage ());/ M) m* r! _3 ^" u
}
3 J3 ^3 B% ?# _/ q R3 n. d1 z! K- @ U1 ]( X, V. f y) V4 M
try {( \& B% t L3 U9 x+ [* ]
Heatbug proto = (Heatbug) heatbugList.get (0);* Q8 i) s+ u" i) A3 J v
Selector sel =
) I4 j! H4 S) [" |* e new Selector (proto.getClass (), "heatbugStep", false);8 q# b% D9 d9 B0 V' c8 y
actionForEach =8 N; W8 H2 D+ \$ y4 B
modelActions.createFActionForEachHomogeneous$call- v9 \# `3 D J* e8 r
(heatbugList,
2 Z* b4 a& P* p9 p new FCallImpl (this, proto, sel,
4 f! O8 B' @1 C; g$ o3 H" s new FArgumentsImpl (this, sel)));8 \* u- w1 p B; {, z% z7 v; s& A
} catch (Exception e) {
1 ^2 a( ~: c2 H% x% S8 Q2 X6 \; p e.printStackTrace (System.err);
# Z- ?4 E! }3 @/ b- v; F. t }
8 N; P, b! `) Z/ k2 R! [/ e' L0 L. ` " `/ Q* Y# N, S# f. U: r; L
syncUpdateOrder ();1 ?9 m- j! i! T- Y; G- o/ `
( U' N/ e/ C" P
try {( T& m* P: d- x$ K/ q( U
modelActions.createActionTo$message
9 C' G1 L, r2 z5 _% C. O (heat, new Selector (heat.getClass (), "updateLattice", false));1 }% G8 y" k2 t" O( B/ H
} catch (Exception e) {
6 U7 X& `! G0 u System.err.println("Exception updateLattice: " + e.getMessage ());! U5 N. c" H: M6 c6 d- |; n
}
0 K$ [3 H& c$ ~; p
' s+ @8 I3 g" `, E$ J+ j // Then we create a schedule that executes the/ L5 ~9 l2 X# N7 E- Z9 X
// modelActions. modelActions is an ActionGroup, by itself it9 S% x8 C6 ^& H% H" D' i
// has no notion of time. In order to have it executed in( \- W" l' x+ L {: Z* c8 s
// time, we create a Schedule that says to use the
R K: N* a0 ]- Q4 k. k // modelActions ActionGroup at particular times. This
% C1 G" X' z- L9 i( @5 ` // schedule has a repeat interval of 1, it will loop every
- _. A0 Y( N, v2 K. j% E // time step. The action is executed at time 0 relative to
0 @' R& Q! e1 l% l- R // the beginning of the loop., o4 t1 y3 d: _) J; h6 `' d, m
" L6 j: {/ u" D8 f4 e6 ]" b
// This is a simple schedule, with only one action that is
: m' E* H2 d+ J1 A) ~! \4 A // just repeated every time. See jmousetrap for more
, I+ X' y9 u" I/ @; | // complicated schedules.
' @& F/ |3 `( ]" H9 [7 b ! e l2 D/ T9 n5 A& T. G2 s9 U3 M
modelSchedule = new ScheduleImpl (getZone (), 1);& _+ ?1 E& ]6 I/ O
modelSchedule.at$createAction (0, modelActions);
$ P% w$ z8 [( V! u T* G$ G- O" W9 W. P
return this;
2 p1 U* k& c1 {/ A } |