HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
j& ~2 z! z w" [& a& E7 c% c$ J& [
public Object buildActions () {
: h' F x0 b3 [8 E! S super.buildActions();3 e& `# p: f3 m K P# w
: t2 Z' q9 _, r // Create the list of simulation actions. We put these in
5 V( }/ w& A) Q7 k" s9 W // an action group, because we want these actions to be
\. |, J) @6 ?; a1 U9 V // executed in a specific order, but these steps should
0 @3 V' u% m* P2 d // take no (simulated) time. The M(foo) means "The message
6 G& x% u, a1 v! O/ v% Q5 ? // called <foo>". You can send a message To a particular
% T& Y( }: t2 ~- e- O, O | // object, or ForEach object in a collection.
0 [0 X; Q: N9 A# J5 B9 x
% X" R( X9 L7 `4 r3 y // Note we update the heatspace in two phases: first run
9 @, @6 w# N* Z, {0 B // diffusion, then run "updateWorld" to actually enact the" H5 p/ o9 h$ c0 M5 ?
// changes the heatbugs have made. The ordering here is
8 J8 x) w0 h w3 T; V4 n4 C // significant!
9 e0 [4 E( k6 O. F2 Q: U
: v( B2 v o6 j& P // Note also, that with the additional
7 ~$ C }* r! y9 O8 _ // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 [5 p* u' J4 T* u: U // randomize the order in which the bugs actually run
) P7 O v5 ]' v: L7 ~4 h- n( O // their step rule. This has the effect of removing any
: \# M$ H$ N" E // systematic bias in the iteration throught the heatbug
- G! P: v& d* G% j; Z$ m) F | // list from timestep to timestep
2 {5 F+ b P' n, g, Z; ?& T
# K4 {/ Y: N+ Z% t8 q. I1 a% u // By default, all `createActionForEach' modelActions have2 c) X4 f# }1 q* a5 C3 D
// a default order of `Sequential', which means that the
- c, k' ?. {- F // order of iteration through the `heatbugList' will be2 f2 U. N2 u7 _' p2 ]" t0 V
// identical (assuming the list order is not changed
t" R; g2 m# C5 d! z // indirectly by some other process).
. g; {: L0 _9 X8 t" r, l7 I * E; l' u. Q& i
modelActions = new ActionGroupImpl (getZone ());
B- B9 x9 M/ Y& P6 d/ ^/ y' V% c( n
try { U# ?! a! P0 m ~' s# C! `
modelActions.createActionTo$message* k. J! i+ @& v% ]" {
(heat, new Selector (heat.getClass (), "stepRule", false));
1 D3 I/ x7 T6 v! r$ ]! ] } catch (Exception e) {
0 R+ F9 `$ m a& N System.err.println ("Exception stepRule: " + e.getMessage ());
+ v* w: Z$ a( o A* `6 N }* g0 `* C* B& |
! {5 h# Q. x( C( F) @0 j( _
try {
( }% J; m, ^( q0 S c0 r+ N; p. z Heatbug proto = (Heatbug) heatbugList.get (0);9 ?; L! B l/ C9 K, J
Selector sel = ; s# b; v S! e8 J
new Selector (proto.getClass (), "heatbugStep", false);/ H# n% N+ P0 M+ C0 n$ R
actionForEach =
6 L8 t) ]. |$ K modelActions.createFActionForEachHomogeneous$call
+ w: _# D5 |. |; ~1 O( m' ` (heatbugList,2 P) ]8 F( U$ f' R7 u% a5 G+ w
new FCallImpl (this, proto, sel,
; s/ r6 Q/ a r% t new FArgumentsImpl (this, sel)));
9 X! w& I" j1 D2 y) Y. \2 ?9 Y } catch (Exception e) {$ ^! i, `7 [( I/ t$ B& [* |
e.printStackTrace (System.err);1 ]5 d; ^ F5 G& \- u7 \
}/ `: k2 w2 J* T5 D
7 A/ y- u7 n. w C- S# b' p+ u syncUpdateOrder ();! a6 P& n' E: |: H2 ~
6 W0 `6 F t9 Y: |8 M; x try {- |; M5 D0 x) N1 }6 y% d7 k8 s
modelActions.createActionTo$message
1 k' V& I6 D- S9 R6 l3 h (heat, new Selector (heat.getClass (), "updateLattice", false));. n; G& Y' h; \* t' O1 \- E/ T
} catch (Exception e) {
* e8 q, A9 s: C2 p; I! o, V System.err.println("Exception updateLattice: " + e.getMessage ());' R% q l1 @) N* p
}
- s7 f" n( B* G* \; Y( R& v
7 u( F0 M4 n+ q8 F // Then we create a schedule that executes the
6 g P# i* B, Z% j // modelActions. modelActions is an ActionGroup, by itself it
7 I2 s; f- a- M7 x$ Q, E // has no notion of time. In order to have it executed in
6 N! M% b9 A! ^5 G, a // time, we create a Schedule that says to use the' H* A# Q3 _) I: s6 y
// modelActions ActionGroup at particular times. This
Z2 |# Q# o$ \" \ // schedule has a repeat interval of 1, it will loop every8 b1 p. Z! u, B' }
// time step. The action is executed at time 0 relative to- \* Z2 ~+ c: e' `/ E+ v
// the beginning of the loop.
' F3 K' q k; F% O6 U8 z+ I/ \$ ~' [4 }6 O: F: [ C6 H
// This is a simple schedule, with only one action that is
# C5 o( `0 p5 @: z% j' i6 o // just repeated every time. See jmousetrap for more
: T: O5 Q6 E! }$ n9 v$ M // complicated schedules./ z3 @0 V# x+ @
- S$ n. O* F' ]/ s
modelSchedule = new ScheduleImpl (getZone (), 1);. H$ R/ _) V A7 y6 Q
modelSchedule.at$createAction (0, modelActions);
+ v5 U% W9 K% u+ L' A 5 U6 V/ A' x. N
return this;
- o3 c& A) H% O% ~ } |