HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- `5 y; g( m; D# k8 s
' ?: l2 r4 I, h6 ^7 L public Object buildActions () {
0 F) k- Z0 Y8 P/ g# n super.buildActions();
3 n; | T7 @: v2 \' q F1 k4 d. N 2 d( w$ q3 v" k( I
// Create the list of simulation actions. We put these in
O3 Z) K! J; n3 K // an action group, because we want these actions to be
2 B( F# ^! O; ~! C& ]& H. q // executed in a specific order, but these steps should
" ]4 D5 ~* b- F U // take no (simulated) time. The M(foo) means "The message
5 {( f8 u% o$ Y& y, w% b) ~ // called <foo>". You can send a message To a particular
B! v+ A, }9 @7 N9 r) S // object, or ForEach object in a collection.
4 p+ \5 u# B7 p- U" R6 m1 a3 ~
! ?+ i+ W7 h3 E% u& N/ A // Note we update the heatspace in two phases: first run
6 i/ c/ F1 q/ p8 G7 W // diffusion, then run "updateWorld" to actually enact the9 E. y1 c% B5 v' r; A. W
// changes the heatbugs have made. The ordering here is
# F+ P9 R+ d& b% T7 U2 v& o // significant!% V5 }% M; @, H/ v
8 o( V, s- m# F0 y // Note also, that with the additional8 m& ?" [. M8 H N) ?, S/ F
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 G2 j; u4 _9 s3 q8 h/ h // randomize the order in which the bugs actually run
1 x& k6 ~3 l; @& b+ U/ k, @; ` // their step rule. This has the effect of removing any4 [* ?$ z `) W6 N
// systematic bias in the iteration throught the heatbug0 Z/ `7 F6 u/ s J/ k T/ A
// list from timestep to timestep
8 T o' l& U4 ` 4 e% D7 q; w; k( z% V2 p7 {( e% z
// By default, all `createActionForEach' modelActions have
, N O) q0 L6 ^2 K' H; }+ e // a default order of `Sequential', which means that the
- H1 y% b& A( N; U // order of iteration through the `heatbugList' will be1 G, n" b+ C6 l0 E9 O9 m4 n" U- a
// identical (assuming the list order is not changed
# D# P3 J# K7 f O // indirectly by some other process).+ \$ w5 `$ b, y5 X6 @( h+ k/ c
7 |) ]' B4 N' C* g- ] modelActions = new ActionGroupImpl (getZone ());2 }1 i ^" S) ~1 t' p4 _
1 g% [- p2 v* t/ V
try {
" W5 j$ f4 ~/ I modelActions.createActionTo$message3 z9 Y5 h& Q& k0 \8 | @/ |- k+ s
(heat, new Selector (heat.getClass (), "stepRule", false));
/ v ` }( v" x/ J0 I, T3 q7 H S } catch (Exception e) {
X: G- e( V: j/ B" u/ _ System.err.println ("Exception stepRule: " + e.getMessage ());& v$ Q. E" Y t/ p1 m$ e
}
5 `- W/ i+ f# b+ }* x6 f
8 ?) h" b) M2 k2 `( V" r& i2 J try {6 {5 H+ D n8 v4 v7 w+ C
Heatbug proto = (Heatbug) heatbugList.get (0);+ F I1 A2 S0 z4 R+ z/ e9 `1 W
Selector sel = 7 Z+ p/ w8 H% M) W3 I6 K
new Selector (proto.getClass (), "heatbugStep", false);2 J& c0 h0 u8 P5 D" u& j
actionForEach =( b& c) x& X0 J1 i) ]4 p L
modelActions.createFActionForEachHomogeneous$call2 T7 c) q7 F- {: l ^" Y0 O: C" Y
(heatbugList,
- W& j d( ?% C( w, t new FCallImpl (this, proto, sel,9 ^& @6 [) V* B* ` K
new FArgumentsImpl (this, sel)));
3 O& }4 n( ^6 c" e } catch (Exception e) {/ R. }! @: h+ H" A
e.printStackTrace (System.err);
9 H0 B( r; G# v- J J1 ?4 ^ }
/ E5 H; | h0 O 4 ~0 |' J2 e6 A9 d$ @
syncUpdateOrder ();6 P9 P }( J. n& G
" G5 R3 t2 h8 k9 i8 [ try {
& T1 f7 }! d/ K, U: Y9 }. Y0 r modelActions.createActionTo$message
* ]7 I3 |, h; E/ w% B (heat, new Selector (heat.getClass (), "updateLattice", false)); g& U: H8 k5 L8 p
} catch (Exception e) {% b8 E% ~, u. s' t4 A# y* Z. Y
System.err.println("Exception updateLattice: " + e.getMessage ());
- M5 A6 G4 \& ~. ]+ e) d }" e5 v7 ^; t# j ]4 I4 ~8 N' q
8 T7 m& Y+ z2 F& S" r) ?
// Then we create a schedule that executes the0 u0 I& i' n- O5 m
// modelActions. modelActions is an ActionGroup, by itself it
5 Z1 F4 Y# k# Q, ^8 V // has no notion of time. In order to have it executed in
+ E; A7 z' E# t4 s; ~$ M' M9 S // time, we create a Schedule that says to use the
, v9 Z* c O: T$ O2 M' t // modelActions ActionGroup at particular times. This' J) |3 L; C3 i0 \" s* r# j' I6 W' q
// schedule has a repeat interval of 1, it will loop every
+ e, m5 b1 ^1 J+ t5 D' a7 m // time step. The action is executed at time 0 relative to
0 J1 N. u* o; o, K // the beginning of the loop.
3 G5 K8 v0 d; X* H* {6 g, Q9 ] G
& I! E9 b E8 v( Q // This is a simple schedule, with only one action that is7 ~+ a# R& T, x) e! L6 `' J0 d/ a
// just repeated every time. See jmousetrap for more4 ]. w% z& S0 D6 j! [0 X+ |+ p
// complicated schedules.
9 ^* C$ w, j; d$ o0 i* A % d% b6 v$ s0 l; H5 v+ K
modelSchedule = new ScheduleImpl (getZone (), 1);. c) r( C& e5 S9 ]+ ?
modelSchedule.at$createAction (0, modelActions);
, U) a- n7 Y5 s) w9 o. [; c + t: x6 b5 o, @: m0 X. ?: |
return this;+ q P7 |8 \% n3 f6 O$ H
} |