HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 q1 I# I s A" Z+ @0 s- M. d7 v% R
public Object buildActions () {
9 e f. a/ U, [0 z! d* D super.buildActions();
' \( H: q* u. M0 c # y' S, C5 p! J4 e6 q
// Create the list of simulation actions. We put these in0 Y6 q0 {1 V& [$ R5 R* x
// an action group, because we want these actions to be
) m4 i; K( s# N; w* v0 | M // executed in a specific order, but these steps should& ?$ R! i [2 t
// take no (simulated) time. The M(foo) means "The message
* l! _* B# t" J }1 r% H2 Q // called <foo>". You can send a message To a particular
( G6 m' e$ _; w0 l( x8 ~ // object, or ForEach object in a collection.. P- M- |4 E, C) g0 I( }$ A, ]/ J
7 o5 b4 ^: j) S! O" D, o, g // Note we update the heatspace in two phases: first run
+ k5 V- j' ]. M1 N // diffusion, then run "updateWorld" to actually enact the
& Z- D3 p) M6 j3 H4 y) W7 l' } // changes the heatbugs have made. The ordering here is
5 t: \8 ~/ M) c4 i8 D // significant!( a& w) \" R5 v5 d" e
- K8 h/ ?8 [4 V& u( x& ~% p q% F" u: w
// Note also, that with the additional/ l6 O# s: Y- p2 }( }. j. `! L! \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. F2 D* _; a2 n7 [ // randomize the order in which the bugs actually run
1 t2 w! z* Z# q7 v$ j // their step rule. This has the effect of removing any
9 N- m' N9 N4 [+ \8 i // systematic bias in the iteration throught the heatbug
6 N7 t% Q0 _! p // list from timestep to timestep
2 I5 f! a4 _+ a, i 3 ^/ J8 r, D3 L; x9 w& b6 t2 s
// By default, all `createActionForEach' modelActions have$ o c# `0 h4 { m
// a default order of `Sequential', which means that the
: J/ u$ A1 w1 E- A- [; k1 ^+ u // order of iteration through the `heatbugList' will be
7 ^8 f" w \/ d$ z4 e+ Q+ y3 R // identical (assuming the list order is not changed' T X# e* b2 |4 w
// indirectly by some other process).
9 k5 E1 H( g$ p1 b
$ m/ ?7 ]4 O$ v modelActions = new ActionGroupImpl (getZone ());" a+ P, L c# j: W4 O* P/ M3 U7 Q
! o1 M7 r7 P; J8 z7 r$ k try {
# {2 n% ?# F& r7 k/ i8 J1 ? ^ modelActions.createActionTo$message
0 l7 _- V- S) j (heat, new Selector (heat.getClass (), "stepRule", false));
! n# W1 |% {. } ~" E# o0 e } catch (Exception e) {' J/ }3 ]) v4 f% Y: Q t
System.err.println ("Exception stepRule: " + e.getMessage ());$ G( p: `* u$ s7 p \
}% E* E- |) u; J
( M1 O( E8 h1 b! s/ W0 S try {( F- `2 a7 L1 z {4 {. v; |7 j
Heatbug proto = (Heatbug) heatbugList.get (0);; d$ R4 ^7 J4 t4 ~0 x
Selector sel = 3 P* [; s0 R: L# i( z7 Y0 e( Y8 {; D
new Selector (proto.getClass (), "heatbugStep", false);
' m M, Q$ [* W( X5 z5 @* f actionForEach =
# i/ A1 Q$ A% f/ u0 |0 }/ _# t modelActions.createFActionForEachHomogeneous$call9 Z1 C. T+ n& E- A' c/ j2 A( t
(heatbugList,3 r: i& j8 e$ v' U
new FCallImpl (this, proto, sel,/ f" ^, R) w( p' m6 Z) F. Z
new FArgumentsImpl (this, sel)));
. f7 _# S* P% Y$ Q3 g" {! @ } catch (Exception e) {
+ t5 ~- r, y$ P$ L, Z& D1 b f e.printStackTrace (System.err);& J$ q* A" N2 p" N% k# W8 K
}- p X" r- e, I
% \/ Z$ w0 N' b syncUpdateOrder ();9 c$ | x! p/ L: _3 Z9 O# Q; l$ a
8 w$ j2 B J$ [6 `! I# a @ try {
: r( d9 Q O( g$ V! H modelActions.createActionTo$message ! t! a9 k: s; _. c
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ D' E) }( s3 o0 d: h5 ~ } catch (Exception e) {' f, t0 q' a- V
System.err.println("Exception updateLattice: " + e.getMessage ());
2 P8 u' |- B0 R+ N }
* S) V; G2 y, @$ J1 k" [; o # E, v/ ?# C; d$ D* M4 V
// Then we create a schedule that executes the I, p4 o( ~' V7 s4 z* q8 W
// modelActions. modelActions is an ActionGroup, by itself it
2 h7 M8 Z: Q+ C, g // has no notion of time. In order to have it executed in
5 Y; g" p, g7 J8 S% O B, I // time, we create a Schedule that says to use the2 i2 B3 j# u3 N* _. n
// modelActions ActionGroup at particular times. This6 ]1 ^9 M- n3 r* i& }$ s5 L2 m
// schedule has a repeat interval of 1, it will loop every
& H9 n$ j0 `6 m, D // time step. The action is executed at time 0 relative to, b7 k+ d6 C3 y& y3 F$ Q$ F
// the beginning of the loop.8 y+ J1 X7 n5 {! N; a6 _7 d# K
9 J! y% e2 R8 v o& d2 o! P
// This is a simple schedule, with only one action that is# a2 J- h+ x# U$ m6 S
// just repeated every time. See jmousetrap for more. c2 w- d2 f& {( m. K0 E( t2 v
// complicated schedules.
4 a* U. j6 q; [: c
9 c* H$ ~) `4 t1 t modelSchedule = new ScheduleImpl (getZone (), 1);
6 h# k0 J+ j& L modelSchedule.at$createAction (0, modelActions);, A9 q# c9 h& f" G# ^: X% s
+ X" }4 A0 n: o( T
return this;& r! L* E: k6 C& e
} |