HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( `8 H. B& p5 ]5 v
# c& ]5 E0 S& e public Object buildActions () {: x2 h! F0 e5 G
super.buildActions();5 k7 P1 i/ A8 X9 o6 Y' c) i7 b# B( b
* s; e' a8 m5 X/ y7 Z' P: h
// Create the list of simulation actions. We put these in
0 D, E/ z" ~! l$ m, @! Z // an action group, because we want these actions to be
4 V/ |0 s: p, D) g // executed in a specific order, but these steps should
* w( N7 _4 v! }& i // take no (simulated) time. The M(foo) means "The message! T, t4 r" O: g
// called <foo>". You can send a message To a particular3 P: Y- h* c* h% t1 Q
// object, or ForEach object in a collection.
4 [' \5 v8 M0 \2 h& b
# o$ J# [& F& [% u // Note we update the heatspace in two phases: first run
J" I# ^6 r& G9 \, R // diffusion, then run "updateWorld" to actually enact the
2 _2 ~. w1 H8 V0 I* a7 n; \ // changes the heatbugs have made. The ordering here is; p& v0 _5 t5 b
// significant!
0 f9 E+ _; b& A0 g/ z
8 ?# o5 U( N$ C // Note also, that with the additional
2 n. [6 |- F. Q$ v3 j) P! s // `randomizeHeatbugUpdateOrder' Boolean flag we can! [1 N1 M- g+ G
// randomize the order in which the bugs actually run
) b( X7 c% W, q7 w/ Q" }4 J2 } b // their step rule. This has the effect of removing any
: F9 c4 s/ X& g8 r* z // systematic bias in the iteration throught the heatbug1 T! J! J% k4 [; ?
// list from timestep to timestep; x( b$ E& Q+ d0 u) D
& q O t) [. Y% X! ?! k // By default, all `createActionForEach' modelActions have
4 u* |* _3 X n: b W8 O // a default order of `Sequential', which means that the8 A; b, _$ P! J% [. c, k0 r
// order of iteration through the `heatbugList' will be
* l, T7 z: Q1 e4 j' M& q, F // identical (assuming the list order is not changed. s9 r% E0 d8 b+ n: O. w' M0 k: C
// indirectly by some other process).& }7 b7 T$ L' y1 {
) \9 S( V6 ?3 k$ I: D, { modelActions = new ActionGroupImpl (getZone ());
2 j/ u/ F& n( w
! h' n2 M5 I: G try {
8 d" m2 E0 f7 T; n8 A modelActions.createActionTo$message; D+ X% F; c3 e* n0 P$ i: A, n
(heat, new Selector (heat.getClass (), "stepRule", false));
) A7 U5 S0 o& U, m- S( x } catch (Exception e) {
, V# r' f+ n; N$ u1 [- q2 F, {3 d" P System.err.println ("Exception stepRule: " + e.getMessage ());
6 u$ `4 u0 s/ H* J" T }
5 d* d1 c _ a1 T* U
* m0 H+ \% j" u" ^5 J/ `6 T3 L. ? try {7 l. R8 p6 a. ~3 m# l
Heatbug proto = (Heatbug) heatbugList.get (0);. V6 U1 A6 h( P: @" }
Selector sel =
' h H) T9 Y, z8 d new Selector (proto.getClass (), "heatbugStep", false);; H0 n8 o. q. a4 Q: t
actionForEach =
5 p- L3 y, M7 ? modelActions.createFActionForEachHomogeneous$call
1 F' f S2 k. ] (heatbugList,
, i3 v3 {, d# W* N. K- r new FCallImpl (this, proto, sel,
7 v1 \9 J4 M8 A new FArgumentsImpl (this, sel)));& h' L" B" f0 w1 ^6 q
} catch (Exception e) {) b# f( ?$ ?4 T5 E) a
e.printStackTrace (System.err);2 s: y$ v9 ?: N9 ^. Y
}
4 ^4 R: G( h6 N( ~& S
& y" T- j9 U* K syncUpdateOrder ();6 f0 S' B1 z. ?% A, a3 l5 m
' `- j, P7 ~: z$ a; }
try {
1 @+ E3 a9 P. } A modelActions.createActionTo$message
& Z% _6 d6 h/ ~4 Z6 g (heat, new Selector (heat.getClass (), "updateLattice", false));/ G6 I+ U, g2 l+ a$ {" T
} catch (Exception e) {
2 { p5 s" P l9 v7 W System.err.println("Exception updateLattice: " + e.getMessage ());
, O+ T, k1 d" D s; K: E4 }' Y a" Z, i }
1 Y% F2 `6 D. v6 ~
7 l/ M, ^/ A6 U // Then we create a schedule that executes the$ O- X- T! |- J2 X, f
// modelActions. modelActions is an ActionGroup, by itself it- I7 Q1 O ?1 i
// has no notion of time. In order to have it executed in
! l8 y3 r/ n" L. G) t // time, we create a Schedule that says to use the
) y+ O9 Q: r3 v! P d d // modelActions ActionGroup at particular times. This
4 i7 N5 Z: V/ P // schedule has a repeat interval of 1, it will loop every
* R% L! K4 f2 W1 F // time step. The action is executed at time 0 relative to: M! |1 a( d+ {3 H; ^" z" g
// the beginning of the loop.
) s' I: M2 ]) c# S9 w) L: ~8 G. G0 K, B! \
// This is a simple schedule, with only one action that is
) y* g' Y! _% v // just repeated every time. See jmousetrap for more4 f& p$ r+ t0 N+ Y& p
// complicated schedules.4 [6 S- g5 @/ n
1 X2 D/ z2 t' B( _* p
modelSchedule = new ScheduleImpl (getZone (), 1);
/ j8 R& y- [7 G8 I# O& r modelSchedule.at$createAction (0, modelActions);2 ~1 B! C% g9 U# E Y5 C
3 `. p7 \0 x8 F Z) L+ f1 X( C W return this;- p+ |, {% Q. l! _8 f* G7 z, O
} |