HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 p. I! T5 }1 n5 |: Q; E
/ W- W% T% M, e
public Object buildActions () {
$ O: N- x# F0 ` super.buildActions();
6 n! n; V% }: q
, R# \- m+ I" z G1 I( A# u // Create the list of simulation actions. We put these in! y9 P5 S/ H1 x# g: C7 G* W7 m9 ]
// an action group, because we want these actions to be
% t5 t8 ]3 h% p& |) D/ g+ z // executed in a specific order, but these steps should! V! z8 S1 f# D% o I8 O
// take no (simulated) time. The M(foo) means "The message- D/ R) ~& T- B& T
// called <foo>". You can send a message To a particular3 R* @) X8 h; t
// object, or ForEach object in a collection.
. M; ^4 H* B4 ]! Q ) \" I: v$ ~4 Z- c6 V( W! q
// Note we update the heatspace in two phases: first run; m3 d" h+ A" D9 M
// diffusion, then run "updateWorld" to actually enact the3 `0 j: P4 E4 q3 ]( _, z0 K
// changes the heatbugs have made. The ordering here is) z7 C) `. T% _6 h( s3 E7 g
// significant!
# q, V+ f' e4 g
) n, F; D" m3 F // Note also, that with the additional
1 G* P4 e: z4 `' C+ z // `randomizeHeatbugUpdateOrder' Boolean flag we can/ L( c8 I5 o. J2 u
// randomize the order in which the bugs actually run" e K2 q1 ?) b$ z% r8 j- f
// their step rule. This has the effect of removing any
* u0 U7 E( b& Y! o$ z4 I // systematic bias in the iteration throught the heatbug! r- L5 S" I; A/ h r+ G d4 D
// list from timestep to timestep
) }/ i: R8 [! J5 M3 [
+ I; ?" C' \7 l8 r // By default, all `createActionForEach' modelActions have8 B) O- h S! i8 I y
// a default order of `Sequential', which means that the8 c2 Q2 T' B. _+ m e/ o! d" i! E+ A2 E# y
// order of iteration through the `heatbugList' will be
6 O2 N, d3 P' V, E& S // identical (assuming the list order is not changed
: V- V! ], Y" J6 G- m5 c; H // indirectly by some other process).; Z+ J# P; o6 U; K
5 { ]. I9 F) E: Q
modelActions = new ActionGroupImpl (getZone ());4 J& l9 r' X8 y* k* R
# g4 s0 K& V* P$ ~0 f' N
try {
: o' a+ [( M9 a/ c2 ` modelActions.createActionTo$message9 N# m2 D$ M2 g0 @& L3 I
(heat, new Selector (heat.getClass (), "stepRule", false));
( w, t7 [ _" q( S! ?0 }4 u } catch (Exception e) {
) \$ H2 Q) \3 J8 D7 X( v/ g2 } System.err.println ("Exception stepRule: " + e.getMessage ());+ W! ?3 q0 v6 s% P
} S# q6 e7 {; K3 w5 J
{$ E. w. y4 y4 K/ U# |1 `
try {
( [4 Q3 r9 q2 q Q# \ Heatbug proto = (Heatbug) heatbugList.get (0);7 M) @4 F" V5 Q' u1 B* }( ~
Selector sel = $ c! L6 [. K$ f
new Selector (proto.getClass (), "heatbugStep", false);7 n4 Z% [- R, E4 s
actionForEach =
& f0 _ f0 Z' w8 W+ x* S modelActions.createFActionForEachHomogeneous$call
0 p8 G7 t5 G5 w$ `1 q; e K1 r3 } (heatbugList,1 U2 {& r l& p0 X
new FCallImpl (this, proto, sel,
6 p5 F9 F" |2 A( A1 Q new FArgumentsImpl (this, sel)));& }0 |* ~5 h) E$ V: S9 ^- c% q$ i
} catch (Exception e) {
6 }% s: f, l, y. H: p e.printStackTrace (System.err);
0 c, f2 t; m# ?2 \: u }
: K" c, M% y3 {8 f; ?3 q
& a( w4 S B: T/ g# i9 j# C syncUpdateOrder ();3 m3 N' K, M, v
. \0 Q; J) @8 v( O* n
try {0 R8 ]% z/ I" j
modelActions.createActionTo$message - Z. O' `1 M& y- I6 ?: c5 C
(heat, new Selector (heat.getClass (), "updateLattice", false));& S+ m- \) L6 Y3 I: n3 i& s- {+ D
} catch (Exception e) {, O6 w* u# \& r! h
System.err.println("Exception updateLattice: " + e.getMessage ());% d5 N7 m$ `! y$ }) _
}
) i/ S+ L s' W2 A : J5 x- x( ^$ L( M
// Then we create a schedule that executes the
/ C9 N0 _" q0 f/ \ z5 G. Y. x. ?+ u // modelActions. modelActions is an ActionGroup, by itself it$ q) ]: m9 w4 t" q" d; f
// has no notion of time. In order to have it executed in
( \7 R2 l! u% \$ P: r) ` // time, we create a Schedule that says to use the; ~& c: k; V) Y0 H4 |: z
// modelActions ActionGroup at particular times. This
8 d* U" z/ q# \) f: B // schedule has a repeat interval of 1, it will loop every
8 D3 F6 Y, P* | // time step. The action is executed at time 0 relative to$ M6 z' z; Y% `. [0 M" }4 E
// the beginning of the loop.
/ _" D- H3 j x& q+ q
6 m2 }5 u& F4 X" f7 [/ W // This is a simple schedule, with only one action that is1 A% K C6 E8 q, W" z" I& ~
// just repeated every time. See jmousetrap for more5 b) j$ f( B7 `$ U4 u- x3 B4 @) C* o
// complicated schedules.
" X( C+ B' l; [" X0 v
' o3 _ j) Z+ U modelSchedule = new ScheduleImpl (getZone (), 1);2 \: g: X+ y ?) N: u$ u
modelSchedule.at$createAction (0, modelActions);1 ?. X) s3 f9 D& v: \
9 V5 s/ }- y. U* P
return this;
: |& W- t+ o$ i) U8 z3 W( _3 z i7 ` } |