HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ M) n9 `* u/ {; k* W& j
) ^/ ?$ i8 @6 V: R6 @ public Object buildActions () {9 w6 u3 H' R/ ]
super.buildActions();
7 b0 S/ W, ^) s, `7 j" ^
/ U4 F: E& k/ @! e' D: z% k, ~ // Create the list of simulation actions. We put these in
4 }; g: Y# N8 @4 h // an action group, because we want these actions to be
3 c& c7 T1 p; F! { // executed in a specific order, but these steps should
* s- S o7 i$ m ]* A# w. @ // take no (simulated) time. The M(foo) means "The message5 W3 O4 D' E1 |1 R. h
// called <foo>". You can send a message To a particular3 G. j9 U7 M* ~- b) F
// object, or ForEach object in a collection.
* Q1 l# J: c; B & |4 T" w0 V7 h
// Note we update the heatspace in two phases: first run' W, v5 R2 u Z
// diffusion, then run "updateWorld" to actually enact the, |* b* Y7 g& h0 ?0 j
// changes the heatbugs have made. The ordering here is1 I0 W% g4 s6 Q. t9 v! R
// significant!& x9 {/ O% e6 G( |
# e4 N8 ?! j0 J! ^) p, M$ f
// Note also, that with the additional
7 F% E6 Z. J- s: n9 q9 z* ] // `randomizeHeatbugUpdateOrder' Boolean flag we can- M4 `' i0 M) W4 S6 T% k
// randomize the order in which the bugs actually run
0 q6 ]% A7 n ^, b: T // their step rule. This has the effect of removing any/ B X0 u% T+ Z7 ?
// systematic bias in the iteration throught the heatbug
# ~( b- t* x9 s3 j) a // list from timestep to timestep" I" S: Z3 |: i" } G1 J
}9 w/ y& }+ V, S. I" z9 e" j b // By default, all `createActionForEach' modelActions have& t. A+ a; r% e% r6 B
// a default order of `Sequential', which means that the
! V/ I. C5 \% x# C1 h# R1 j // order of iteration through the `heatbugList' will be
) y. e8 a0 S0 H" J/ S) j // identical (assuming the list order is not changed
* e: j3 I0 @ R2 Z/ l$ C // indirectly by some other process).2 C( i7 D) q# B% @- c5 `/ R& w
. ~" \& j! H/ G( b4 q
modelActions = new ActionGroupImpl (getZone ());- u& [) A' S* R6 g; P( c' J I# g
( J" p. i% f# r) S
try {( X, b. A; O/ y3 f6 W$ O
modelActions.createActionTo$message
3 {4 A/ w# g3 F (heat, new Selector (heat.getClass (), "stepRule", false));
/ O6 D0 q5 u) V; _2 k' K } catch (Exception e) {2 ?+ F0 u; E# P
System.err.println ("Exception stepRule: " + e.getMessage ());
6 ^- d J9 J. ^8 ?( H; D9 f# p }0 H, |: x, ^* W
# g, b, t5 f0 A- n7 L" a- g try {& @6 n8 E& N3 ? j: d8 o7 c# f
Heatbug proto = (Heatbug) heatbugList.get (0);6 H9 W, i6 u0 z5 @8 V# v
Selector sel =
, b1 N. L4 C4 o" \+ d/ f, y new Selector (proto.getClass (), "heatbugStep", false);
: z. ~. J7 F/ E0 N% g | actionForEach =
. \' d5 u& i* P8 U0 ~ @7 u% A# n modelActions.createFActionForEachHomogeneous$call
% @/ C- }4 d' Q0 ]* t (heatbugList,% a/ j3 _# s' Z9 D0 L! U
new FCallImpl (this, proto, sel,4 y0 l! w7 J9 Q
new FArgumentsImpl (this, sel)));. |; Z% X$ O+ G
} catch (Exception e) {9 m" w \1 d& o" Y3 Q* E4 G! @
e.printStackTrace (System.err);
# [) d* n2 ^$ k# }$ Z5 Y }3 F8 z* d p: t! O& w8 k
$ B7 n0 [" G% I2 N! `
syncUpdateOrder ();+ n$ t/ E1 Z3 Y: [. `2 z: [
5 @, j0 {" l) P5 e$ s! ]- q try {% d8 F( t' J7 ]* t) H% Z: S
modelActions.createActionTo$message
6 r8 |5 Q1 @& O' E" I! {6 M (heat, new Selector (heat.getClass (), "updateLattice", false));- d6 O; Q- o; e' n2 |" h
} catch (Exception e) {( y% t2 z: |: l0 {6 [3 h1 O5 r
System.err.println("Exception updateLattice: " + e.getMessage ()); k2 a) i! L% q" l- G. l
}
# ^9 G5 \# [8 a, a5 ^ ' b j: J8 {) z6 P* Z# v; g
// Then we create a schedule that executes the
F. {; q( u j( D) c // modelActions. modelActions is an ActionGroup, by itself it! n: k% C! e1 F# V# f4 C, k
// has no notion of time. In order to have it executed in; I y5 d8 U! z3 f) I( z. R2 D
// time, we create a Schedule that says to use the
* E$ Y: k- }, N5 T // modelActions ActionGroup at particular times. This
, Z2 S2 `2 r% n" ]6 G // schedule has a repeat interval of 1, it will loop every
& ]% @# E2 Y/ C; R" @ // time step. The action is executed at time 0 relative to
( d2 g* R2 \! r7 d // the beginning of the loop.
2 q, V% w0 {, b% r/ j, v7 y$ `4 U8 k: u q6 q
// This is a simple schedule, with only one action that is
4 o3 U% D9 H; ?/ v // just repeated every time. See jmousetrap for more. `+ F% Y# J( u. [4 Q `7 V
// complicated schedules.5 b! j1 G8 m0 F2 \" y, e, X
( ^/ I: C5 N: y( A modelSchedule = new ScheduleImpl (getZone (), 1);6 ?: |4 H/ z3 T) O1 q4 W9 @
modelSchedule.at$createAction (0, modelActions);
" n- [9 a5 s$ `- A1 O. J6 @0 p/ R
. s. f+ K) p7 U2 I; \ return this;
u5 D2 _% W* y% I" r- W6 b& ]/ P' A } |