HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 | }% b) h0 C4 g& @& K: u
3 K! c- c" p7 c+ F% u public Object buildActions () {/ o9 [1 C) M5 b t: w
super.buildActions();
9 v; Z( P: ~/ i( r0 ]
1 K+ D5 P8 U3 T7 N$ {$ H& ~( | // Create the list of simulation actions. We put these in
" @" F. y' b5 l' ?3 c // an action group, because we want these actions to be
, x# a" m" m- y3 E2 ? // executed in a specific order, but these steps should
; h2 {2 ?" C# K0 T- I' G3 v // take no (simulated) time. The M(foo) means "The message
* w$ F. N# y" b // called <foo>". You can send a message To a particular- N$ M4 l5 z$ o- h: z. R( \9 @, }
// object, or ForEach object in a collection.7 n9 i& b$ o n7 w8 Z; r
" a) A/ @; b: i# n3 n1 c // Note we update the heatspace in two phases: first run
# D% o, t$ b6 p4 J1 z8 m // diffusion, then run "updateWorld" to actually enact the
& G2 [$ |1 H3 _3 S" K; z% x // changes the heatbugs have made. The ordering here is
b! i6 z1 d" @( \ // significant!+ j. I5 q I, |" Y
/ K, T4 n/ [" s+ N4 U( A" p
// Note also, that with the additional
- s- U8 h, x. ?# {# i // `randomizeHeatbugUpdateOrder' Boolean flag we can) `9 X+ L8 z' G( ^
// randomize the order in which the bugs actually run6 b' N' S/ v; h( g
// their step rule. This has the effect of removing any
. @9 i! O+ u) |8 H$ H" T6 a- ?* D( ^ // systematic bias in the iteration throught the heatbug& x0 g% V/ P6 {0 `( V; V8 E
// list from timestep to timestep
* D3 Q# _! [, P
+ }0 _3 v. t) F" G0 L) A // By default, all `createActionForEach' modelActions have
" \( u: V. R/ f9 B // a default order of `Sequential', which means that the
: A/ J+ V2 ^ O2 U" h! p5 | // order of iteration through the `heatbugList' will be
, z" |% Y' C. @4 @ // identical (assuming the list order is not changed
# W' K# m: u% G7 x; _% D // indirectly by some other process).
?4 }: i+ V% B" L% D B f " s U' T, g, {% G& `
modelActions = new ActionGroupImpl (getZone ());: b: K0 l' B& G. ?7 c1 s
3 n+ q, Y9 O5 E# h% s; H try {
8 ^ y) k, @0 M" d" z7 [ modelActions.createActionTo$message% h# l! z3 N3 {, |- J; `" c& g
(heat, new Selector (heat.getClass (), "stepRule", false));
; T7 W. ` j' _8 A+ j/ N0 v7 ? } catch (Exception e) {* v. ?; C" M# C/ w( g8 H0 e/ E
System.err.println ("Exception stepRule: " + e.getMessage ());
4 P0 A% b7 E: C* n3 f2 k }
! ^* A; O8 X& S. x4 y; i0 f8 K' ?
try {
. L: ~! n- o8 P, |$ _: L Heatbug proto = (Heatbug) heatbugList.get (0);! j7 u) Z% l) r# }( n- C
Selector sel = $ |7 w" ?3 G' U0 I0 ?6 e: ~
new Selector (proto.getClass (), "heatbugStep", false);
" U$ i M8 B3 @# c7 O) m actionForEach =
: `3 i6 X4 M4 A, H modelActions.createFActionForEachHomogeneous$call
" @: n T: Z8 @8 |" d (heatbugList,
; A% k5 J! f$ j) y1 h5 n new FCallImpl (this, proto, sel,7 l+ Y7 S9 M5 g, Y' V- K
new FArgumentsImpl (this, sel)));& @ C( T1 n1 _8 ~' Y9 F: g/ A) _
} catch (Exception e) {" l& a; i" J7 [( T1 R' l
e.printStackTrace (System.err);( {& P# i7 y* C; X2 ?/ \. x' b* a
}
D$ a3 ^1 h2 G" M
- B. Y% [: x! v+ N% x syncUpdateOrder ();2 u; @* n4 I6 @2 _+ s3 }3 E! d
& F2 X" b$ w3 M- F* o try {" X4 w2 M0 U" B6 W
modelActions.createActionTo$message
E0 O% P' R- T' ], W: S$ x (heat, new Selector (heat.getClass (), "updateLattice", false));
8 ]4 ]9 L! V0 J1 x } catch (Exception e) {' {. Q# M7 j/ ~* L% q G
System.err.println("Exception updateLattice: " + e.getMessage ());& c m# Y6 f( G) l
}. c }7 i' b1 _7 Q
. h" `. [3 z2 D( m; N) _% M+ \ // Then we create a schedule that executes the
; h* L; v. q& Z- j. w2 I! b* q2 d1 L // modelActions. modelActions is an ActionGroup, by itself it* X( ~, a' ^) V
// has no notion of time. In order to have it executed in
7 {: l6 ~0 A5 }' C // time, we create a Schedule that says to use the$ K+ [" n& O- o
// modelActions ActionGroup at particular times. This
* m- Q' n6 a c# W // schedule has a repeat interval of 1, it will loop every
4 ^$ [4 ?9 _) A" F9 D9 Q% b0 A // time step. The action is executed at time 0 relative to/ D1 m4 N( p0 m6 O# |" G- y2 j
// the beginning of the loop.! R7 O0 s, |. g: T; V& p E
4 ?0 e$ P* |/ I
// This is a simple schedule, with only one action that is! _0 ~2 Z7 I7 K
// just repeated every time. See jmousetrap for more+ B, M* o$ r7 b, `5 w
// complicated schedules.
/ s S+ I; J$ Q: |4 z" { 1 f- X l- a" @/ B7 d
modelSchedule = new ScheduleImpl (getZone (), 1);
: e: O5 Y) {/ t j: T7 u# Q6 v! U% q modelSchedule.at$createAction (0, modelActions);
- h, d* M8 [2 K. J2 y0 h9 ] , @ z. \+ N* S! x9 Z" r
return this;
% k4 ^3 l0 y. L. P8 ]9 e8 C$ a } |