HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% \9 E9 x5 q* B& K1 y3 l8 D W" k3 r) N2 L! M9 m
public Object buildActions () {
1 F" u# l. M3 h2 U super.buildActions();
, j! a, E" j, V( u/ m5 s& T j; i( t5 ]/ }- {% G
// Create the list of simulation actions. We put these in, D- e0 u# N# A) P8 m: W: l
// an action group, because we want these actions to be
# p# W9 [4 e! b) c4 \/ F* Z+ t% i // executed in a specific order, but these steps should d. l" J8 B- C
// take no (simulated) time. The M(foo) means "The message+ D. x, ^/ ]- X4 W7 x- \( `; ^
// called <foo>". You can send a message To a particular! C5 g0 P/ f9 x. V/ i' _/ E
// object, or ForEach object in a collection.
6 o* ^. b& f# v, _) [) \& P% \ ( _9 m6 F5 H9 ~1 k5 i: @+ c! I" B8 j
// Note we update the heatspace in two phases: first run
0 ]3 \2 F. T, d& h' ?5 S // diffusion, then run "updateWorld" to actually enact the
' N- z+ ^! V4 w6 _- A# m // changes the heatbugs have made. The ordering here is
~7 c6 b6 J$ B8 z! g1 j' e // significant!
# B8 I" |3 o% }% H( _
' t" b( _" N1 p" d, r // Note also, that with the additional
, w8 L t( r& X O# w$ N+ u // `randomizeHeatbugUpdateOrder' Boolean flag we can" K5 R1 }7 Y: v5 [' \) M7 b5 Z
// randomize the order in which the bugs actually run) ^: |1 |5 `. u$ ]% O% Y
// their step rule. This has the effect of removing any, b0 ]6 R0 d! v. l/ K8 P
// systematic bias in the iteration throught the heatbug
/ m6 B" e7 K, g' e2 D, x // list from timestep to timestep7 P2 M) [6 ?2 w5 R3 P
6 j0 {& z G, s9 V6 e+ f3 x5 F5 W // By default, all `createActionForEach' modelActions have# Q* R1 |0 y8 r0 H0 V& g
// a default order of `Sequential', which means that the5 s- n: t l& Z* V
// order of iteration through the `heatbugList' will be! j8 z4 `# {1 E# u% o" B7 x0 @1 ?+ b
// identical (assuming the list order is not changed
7 j$ O- F1 b# }6 P$ e, K, [* Q // indirectly by some other process).9 D) G7 P0 q, B+ N
6 L" Y/ b' A4 z: T
modelActions = new ActionGroupImpl (getZone ());) N! O1 b2 i+ z1 u; w
; x/ E- [" S- S4 g) C" P
try {. a' w0 ^, S; t$ A3 x4 b1 J3 i6 v1 H4 `
modelActions.createActionTo$message
8 C1 ^4 S* _5 b8 k: l (heat, new Selector (heat.getClass (), "stepRule", false));
' I& z* ^! J, z% j) j [ } catch (Exception e) {
% ]- P, i) s6 s4 J8 y4 w. N System.err.println ("Exception stepRule: " + e.getMessage ());) E0 y* [6 Z8 w" [% ~
}1 g) [. @9 e0 }
" p' p; x9 a" [( d3 B
try {$ |7 n5 M' B% F, K+ F C
Heatbug proto = (Heatbug) heatbugList.get (0);
/ p' a2 f9 ~% M Selector sel = - j- M2 x) }# j
new Selector (proto.getClass (), "heatbugStep", false);/ n% }; q$ B+ w' x$ Q' V, d
actionForEach =
, j% _: t- ^. r- F% R" ~$ F1 A- W modelActions.createFActionForEachHomogeneous$call
+ @( q0 `2 v$ C; l8 l j1 p% s (heatbugList,! G. I# h0 J7 I
new FCallImpl (this, proto, sel,
2 g. q/ j: w0 U/ G new FArgumentsImpl (this, sel)));
. Y& W* L" Q- R$ O [6 i } catch (Exception e) {
; a) Y! u; O) z! n5 h$ M; T e.printStackTrace (System.err);
# }0 w; [ g+ l) T" n7 S } w5 N1 t2 @1 S
0 l2 r: w2 o k syncUpdateOrder ();' M& R1 |( \$ c
6 c4 Y( M) l$ D2 \# `8 g6 g) K
try {8 l: Z5 z x: T' L- \0 Z
modelActions.createActionTo$message * l1 {: S. x# r( `
(heat, new Selector (heat.getClass (), "updateLattice", false));2 k1 g+ y/ i6 Z' a: l3 V
} catch (Exception e) {6 ^9 |7 x, |! Q1 ~
System.err.println("Exception updateLattice: " + e.getMessage ());
/ l5 s: n) s# _) n }
* K4 _ V A0 L4 ]8 f5 J
. A0 c3 _5 Q8 |3 c: C2 e, i // Then we create a schedule that executes the
6 u$ F. J) N/ n // modelActions. modelActions is an ActionGroup, by itself it
4 V/ B* i) ?; e9 v" w9 I0 D( t$ y // has no notion of time. In order to have it executed in
) M9 G4 y1 M( U b7 m' R // time, we create a Schedule that says to use the
# f3 ]$ {1 p8 C1 I0 N+ ` // modelActions ActionGroup at particular times. This
0 u8 q3 m4 b; s/ w& w/ Y# Z // schedule has a repeat interval of 1, it will loop every& Q+ D3 K1 V; B! l% D
// time step. The action is executed at time 0 relative to
7 q% ^9 y( y: \: z // the beginning of the loop.
# B- F: C" k& A+ u8 S3 ?4 q" a0 J/ U
0 K2 Z- e- Q- R+ O6 f) g // This is a simple schedule, with only one action that is
' k8 V; d& x) n% {0 ?% ^ // just repeated every time. See jmousetrap for more2 u# U5 G+ c5 u3 R+ N, ^
// complicated schedules.% f! |5 O4 z- w+ m8 K0 e; h6 U
& ?* U" {* [3 }: K, ] modelSchedule = new ScheduleImpl (getZone (), 1);" E1 F3 L5 ]* ^& s |9 f' p" y
modelSchedule.at$createAction (0, modelActions);' h3 @8 `) P* @
9 i+ p2 Q0 s% y
return this;. V1 E' j* T- i! B
} |