HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# b3 C0 J/ O% {+ O2 X! z- v, M0 X% N
public Object buildActions () {5 ~; e+ n, v8 s G. I
super.buildActions();4 P9 t% h& M* K8 v5 }* c' r
, r+ ?% V6 J( ^6 m# `, |
// Create the list of simulation actions. We put these in
" N8 }6 d$ ?* c8 m0 O/ p // an action group, because we want these actions to be
: b: ?- N4 I& Z( j) a // executed in a specific order, but these steps should
' z' L# j2 W8 }8 }8 d5 n // take no (simulated) time. The M(foo) means "The message, A" ^* \' y' v# ]1 F
// called <foo>". You can send a message To a particular
+ i, L" B8 @! F3 C+ M; s" | // object, or ForEach object in a collection.4 b3 B# f: Y5 \3 C3 E/ j) }
2 ^& m( s8 @" ~9 S0 [; d+ b6 X+ h // Note we update the heatspace in two phases: first run
" C4 f0 O I3 ^/ v1 L. Z // diffusion, then run "updateWorld" to actually enact the
# l* `% e: m3 u0 b2 n( ~( U1 X // changes the heatbugs have made. The ordering here is. P7 |7 p& Z t0 h1 Q( q" M
// significant!
! A6 }, v% d& ~& } $ _" ?3 q x9 L, i2 T" ]
// Note also, that with the additional
, H! m6 p f# } // `randomizeHeatbugUpdateOrder' Boolean flag we can2 t. A0 ]' Z$ t2 ^# u2 d
// randomize the order in which the bugs actually run
* ^' @! @) @# R- U% k // their step rule. This has the effect of removing any! B$ P& Q. d+ u7 [/ J- y
// systematic bias in the iteration throught the heatbug4 Y: Q9 f" J" {7 q% |- B
// list from timestep to timestep
# L4 z$ ^* B& P, T
( L- Y, \0 M: V- A6 L& @" t // By default, all `createActionForEach' modelActions have
+ ]+ n A' D0 c // a default order of `Sequential', which means that the
% P0 O, }- d& L# c+ D9 S // order of iteration through the `heatbugList' will be
. }2 v& a c$ R: Y% J0 }3 \& h9 X // identical (assuming the list order is not changed3 U" f6 J$ T" a
// indirectly by some other process).+ h% |% Y# ~9 P; Q
: L F. n. I' g! I modelActions = new ActionGroupImpl (getZone ());
6 z( g8 P' I# x6 b3 w" i( n
/ j1 U- t1 Z: Y5 ^ try {
4 z, w, Y! _4 \9 ~7 \0 Q; ? modelActions.createActionTo$message; b, Q2 \+ v: s' V( w# [- ]6 [
(heat, new Selector (heat.getClass (), "stepRule", false));
' h- o9 d8 N6 g) i! n% S* C. i } catch (Exception e) {, D& p* C+ t. J7 ^
System.err.println ("Exception stepRule: " + e.getMessage ());/ x( z% M5 u% ^! q
}5 e- ~' q6 z; h' A. V. O: e
: H) `0 P1 _7 W$ U% W# x try {5 A) a Z$ u; H* S+ g6 M8 T/ H5 C
Heatbug proto = (Heatbug) heatbugList.get (0);2 }- ?# H8 z4 L2 t- r; d! L
Selector sel =
, s9 k% L8 n1 T) c new Selector (proto.getClass (), "heatbugStep", false);$ \( O0 O& A- T9 T ]& I
actionForEach =& r, ]/ A: s3 n$ C" j
modelActions.createFActionForEachHomogeneous$call
7 n/ D1 e& T# Q, c! [- Q (heatbugList,
5 J- c0 o1 E. |0 D$ }/ Q4 ~: Y( o new FCallImpl (this, proto, sel,
& l' H) @4 Q+ ~5 d8 G new FArgumentsImpl (this, sel))); s( O5 Y, c0 L3 u! Z
} catch (Exception e) {" N6 h" g" O) t: M1 P( R! b( m
e.printStackTrace (System.err);
2 |) z. q' S. C7 ?. G* R) l }
* v6 g2 h0 m; U+ O4 O0 z! T# N
* b9 T5 W. i5 D- }* E/ Y2 n% { syncUpdateOrder ();
f6 ~& F& s# z, ^- o8 G' { A- L$ Q4 x9 G9 {+ N. G% J
try {
; Z1 u' d! T. X: J modelActions.createActionTo$message
3 ~* Q+ Q5 Y, j. P, x (heat, new Selector (heat.getClass (), "updateLattice", false));5 B: {; v* s' a4 d
} catch (Exception e) {
1 g, U4 [: m: l System.err.println("Exception updateLattice: " + e.getMessage ());- D5 [" X0 A7 C; M3 h
}% ~$ k: V l J8 o! T7 S
; y# Y2 d( v# w6 {( G, `
// Then we create a schedule that executes the
4 B O: x3 W$ S% F) y, K3 d B# x // modelActions. modelActions is an ActionGroup, by itself it
+ |& L$ j% n' u) P1 {8 h$ f* d // has no notion of time. In order to have it executed in& T0 A6 J1 q/ C
// time, we create a Schedule that says to use the
8 E+ q4 z& g3 l$ E7 J) { // modelActions ActionGroup at particular times. This& N- n+ X2 R: u# c9 z. T
// schedule has a repeat interval of 1, it will loop every
$ x% S) t# C# P( p* x0 E // time step. The action is executed at time 0 relative to
+ y! s0 @! C l // the beginning of the loop.5 G' m! S# B' p9 [: O' E
: f; K) j8 T) _
// This is a simple schedule, with only one action that is) ~9 z( J& |( `% a9 Y6 b3 d
// just repeated every time. See jmousetrap for more: n+ j5 x2 w2 b' l. E; d5 Z
// complicated schedules.
2 {* @) d' d* E : y/ w) ?; c4 T
modelSchedule = new ScheduleImpl (getZone (), 1);7 P! {7 F4 F B5 [& w1 s2 F
modelSchedule.at$createAction (0, modelActions);
5 H; p$ K9 q3 ]8 _7 e, U' t ! @+ ^& j2 u* l' c7 }
return this;
5 p: t4 u" \6 O2 S5 S } |