HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; S8 ~" z, D: f9 j
$ O" d, a6 x2 t% r public Object buildActions () {
! Y5 u# }( f$ } super.buildActions();; f/ A6 R* t, k
% e8 E. [/ Z5 \& ]4 W // Create the list of simulation actions. We put these in1 J1 p+ V9 B' q# Z1 x0 |8 P5 \7 o0 d
// an action group, because we want these actions to be
2 ~8 h, d: F' _" ` // executed in a specific order, but these steps should
3 R: l( Q2 @: s# @ // take no (simulated) time. The M(foo) means "The message
0 ~9 k Y* e' U6 a) V // called <foo>". You can send a message To a particular) w& p0 P6 |2 m# A
// object, or ForEach object in a collection.
7 u7 o& G2 z! g$ B2 D' K
3 K" T6 W" l9 a1 o; ~' ? // Note we update the heatspace in two phases: first run
3 w7 C y/ _/ X9 R4 h // diffusion, then run "updateWorld" to actually enact the
/ |2 S5 Q6 u" _, X+ w/ u- | // changes the heatbugs have made. The ordering here is
4 c6 f$ G* A7 k3 u9 J% } // significant!8 I o! a: g" w: F O. a2 k5 ^1 n, P3 C
( H* `+ C9 A+ \ Z
// Note also, that with the additional
4 z, @8 t( ~ ?1 s // `randomizeHeatbugUpdateOrder' Boolean flag we can
% x. r4 l8 x6 [7 a3 n5 K- T // randomize the order in which the bugs actually run
' v% T w* z- o // their step rule. This has the effect of removing any
" P; ]- S/ _# q( Z" `8 L+ G- { // systematic bias in the iteration throught the heatbug- v9 @* t* Z% X8 ?, Z
// list from timestep to timestep
" J+ k9 j; j1 y# v% k
+ {/ _+ d. e. C+ W // By default, all `createActionForEach' modelActions have! \/ @% v5 G! T. X+ d
// a default order of `Sequential', which means that the
j2 A& D# y2 X7 [$ v& w# n6 Q // order of iteration through the `heatbugList' will be
# c. I1 U2 K. Y, i# }6 R) X // identical (assuming the list order is not changed8 Q' {: ` w9 U1 W0 {& Z$ [ ~
// indirectly by some other process).
0 E6 ?; e: q% @; P% o: [ ) {9 b8 A; f" K" H) a- F& G
modelActions = new ActionGroupImpl (getZone ());1 j9 t7 I( k2 L) g2 J
# b+ w, @; t6 S; L
try { B/ i% J" i7 K1 q I- _/ D' P
modelActions.createActionTo$message
. k& ?) e, u [, `9 v" k | (heat, new Selector (heat.getClass (), "stepRule", false));
% \: d) S& r, u0 Y0 o3 ?# N } catch (Exception e) {
1 K! W8 Y3 ?5 v' J System.err.println ("Exception stepRule: " + e.getMessage ()); g- u: V1 {% l( h/ V4 f7 ]
}
0 ~& X: Y3 e) C+ F+ J
" |; j' {; n. F) z; f try {
* z. G$ n$ M/ y6 d, d G, O( h* J Heatbug proto = (Heatbug) heatbugList.get (0);
, b, G' k8 S& q t/ _5 ?$ M5 T Selector sel = ! ^& r9 o8 I+ |6 e- C" t5 q+ c
new Selector (proto.getClass (), "heatbugStep", false);/ p# ?, b6 ?2 w) j
actionForEach =7 a4 K' W# O& b! h
modelActions.createFActionForEachHomogeneous$call6 h# t" y& V9 D. _+ l
(heatbugList,
: V$ ~0 A; J( e& O. R3 V new FCallImpl (this, proto, sel,3 N1 q) S1 Y I
new FArgumentsImpl (this, sel)));
) P! {4 f. y6 h9 y0 J; s } catch (Exception e) {: s/ e! f) L! D& W f% O9 ^6 t
e.printStackTrace (System.err);
* w% E4 q: n* T1 y' _ v* q }
- o" B7 O. e& u Q 5 k* \+ B9 ^2 P+ W5 V& K' A+ q6 d, k
syncUpdateOrder ();) |: E4 p8 |9 q) x" S: U& v0 c
9 i0 n" J$ V& g& Y7 Y
try {
9 x, u& Z6 A) W" w3 Q; B modelActions.createActionTo$message
. x0 B3 p+ M- T# F (heat, new Selector (heat.getClass (), "updateLattice", false)); @# ?7 S! c- V0 Q7 s
} catch (Exception e) {; G/ Z. }; ]+ ]1 r# a! p
System.err.println("Exception updateLattice: " + e.getMessage ());
5 V) w3 R/ o. t }
( Q! D, i5 A- C! ~5 h& ~# M; H' | 1 A: H. b' ~: h/ n3 d, }( C
// Then we create a schedule that executes the! J- {+ ^6 H1 S# \4 w5 L/ l
// modelActions. modelActions is an ActionGroup, by itself it
: C* Q- m+ K& K% n- D- g // has no notion of time. In order to have it executed in
& \' k& V# W8 D/ Z! H; J // time, we create a Schedule that says to use the" j y6 o, p/ Y) C5 ?
// modelActions ActionGroup at particular times. This* t+ ]+ X+ Q I' q/ R
// schedule has a repeat interval of 1, it will loop every
" e4 n; `4 o* n0 ?5 f+ G9 ?9 ]- u // time step. The action is executed at time 0 relative to, @( U5 u% `, n/ f
// the beginning of the loop.2 L, D4 g* A2 q- _& Y8 a
+ p$ N7 v4 i& ^1 S( {' T0 }" _
// This is a simple schedule, with only one action that is' J: v% P7 o' A$ }! o
// just repeated every time. See jmousetrap for more
' q& C2 m: a4 B3 W // complicated schedules.
7 Y$ X5 A% E! }: s1 }; N7 u. r
' [/ q# x+ }) l, k0 m" m# d modelSchedule = new ScheduleImpl (getZone (), 1);7 E/ }5 o+ w0 E+ i
modelSchedule.at$createAction (0, modelActions);0 g2 R# U9 D! B6 r2 a' r( U
3 ~- }; H4 V9 q) m3 d( \ return this;4 n6 }( G9 `0 }0 s7 X! x
} |