HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 g8 q3 s4 U5 F, t4 \# n$ l9 X$ V6 ] v" X& H
public Object buildActions () {! [9 I, \' s+ [% M$ a% `8 V
super.buildActions();
7 {2 H' a9 _7 x' O' P/ x" w$ g & |5 R# ~7 Q' L$ l J b' q
// Create the list of simulation actions. We put these in; ]2 H' |( c" |5 w& x4 c' a) d
// an action group, because we want these actions to be; X) T# ?% v X; A# ^: I" K
// executed in a specific order, but these steps should8 R8 x' l) D7 I2 [1 R% O
// take no (simulated) time. The M(foo) means "The message
: z1 `! ^- j* V' ?1 {% {; w // called <foo>". You can send a message To a particular( a, v) ?2 o; r9 q* {
// object, or ForEach object in a collection.
8 g X$ ^( ~8 n* j" s% v- T4 F ?4 I; g# b( Z/ ~: [) C
// Note we update the heatspace in two phases: first run3 q, i0 j ~! N/ g) g4 [
// diffusion, then run "updateWorld" to actually enact the; B" t% p w% P8 u
// changes the heatbugs have made. The ordering here is1 |: u( M5 H$ A5 r* F) V" R
// significant!1 o* F' x, T+ _' ^0 j
3 |5 d# O# ~7 u8 x6 [5 l: e // Note also, that with the additional% q t% Y$ [( [+ v; [5 G' S
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 a- L) O9 x v! ?/ K" U% B" i( u
// randomize the order in which the bugs actually run
9 @8 R% n* \" u3 [7 u // their step rule. This has the effect of removing any
( n$ D# N0 |% {% p% l1 I6 Y // systematic bias in the iteration throught the heatbug$ }$ I7 x3 O. R
// list from timestep to timestep, z( F0 ?1 C. ~
# W% K1 w& ~( C0 ]9 f) W# ^: R8 F
// By default, all `createActionForEach' modelActions have' j# M& P; H! W4 c% J2 C
// a default order of `Sequential', which means that the
5 I3 A+ P7 ?+ e" [% F2 {% W/ E // order of iteration through the `heatbugList' will be: I) X- A! Y. k5 v4 P- D; ~+ {
// identical (assuming the list order is not changed+ I" ~( R. }* |) \2 z# y
// indirectly by some other process).
% K S/ j( f- I* T1 w! e
+ h$ k& o) q4 N* |' k | b modelActions = new ActionGroupImpl (getZone ());
0 f8 V: R; F. ?6 N6 j$ v, C8 [8 x$ Y, o! X" G, x
try {
2 q7 b0 ~2 }. h0 r0 d P modelActions.createActionTo$message6 y( C* c+ P4 @9 k* c
(heat, new Selector (heat.getClass (), "stepRule", false));
% N# d2 b7 y5 ]6 q } catch (Exception e) {
5 `3 c! ~9 J& Z, P& T# v5 B System.err.println ("Exception stepRule: " + e.getMessage ());
$ V+ A1 z. W- b7 F4 ~5 |7 z }
# r8 E/ A$ P$ d6 z7 K' z: c" @% g% l
try {
7 H. I. f8 J" e. V. [; J0 N" H$ s: L Heatbug proto = (Heatbug) heatbugList.get (0);
6 M, d) P8 j4 M- D0 I h7 L Selector sel =
) \) W6 J* h6 y6 U# ~ new Selector (proto.getClass (), "heatbugStep", false);
) @& |% }, U& I. Y6 ?& Y actionForEach = L2 u1 D2 t2 s4 R
modelActions.createFActionForEachHomogeneous$call
( R( t& e! c# M& I( U; y (heatbugList,
+ X6 i- r1 k) [+ E( f; ` new FCallImpl (this, proto, sel,0 N! m; ?6 E( i6 g8 H
new FArgumentsImpl (this, sel)));
# a( |+ V2 y; e9 h( R8 A } catch (Exception e) {! w3 h3 f F- b7 [% ?1 S( M
e.printStackTrace (System.err);
) ?3 O& k( _* K- ~8 r7 T" o9 q }* u4 ~! ^; D0 v
7 x, |6 ^. H! `% e6 ]1 w: M
syncUpdateOrder ();
5 w- L+ f9 w1 ^
7 i) }& T3 q) g/ u! W# ? try {
7 l8 `. f& U# [ modelActions.createActionTo$message
& r" R; B5 F5 f5 x* M% q (heat, new Selector (heat.getClass (), "updateLattice", false));
+ | L+ M5 `5 n6 z, C6 o s2 X } catch (Exception e) {
6 P2 ~% ^& x$ Z8 K System.err.println("Exception updateLattice: " + e.getMessage ());
k2 X: S6 l; T; a }
: k" `- K5 h1 j1 q/ p9 d. f
+ g6 ]1 h' S6 [% |$ P3 z, Q // Then we create a schedule that executes the
9 _+ q' i9 f* |. r: E // modelActions. modelActions is an ActionGroup, by itself it
4 o/ l8 m5 H* s+ S5 ~6 { // has no notion of time. In order to have it executed in
; Q; z7 i* S2 C4 V8 K. v9 f; y5 g // time, we create a Schedule that says to use the
0 D7 P) g2 `1 A! \ F+ Q# n // modelActions ActionGroup at particular times. This' q1 ~7 y! V" V- \# S* D
// schedule has a repeat interval of 1, it will loop every
9 d, U9 W* ` T- x' {! v // time step. The action is executed at time 0 relative to
- }7 t0 @8 ?7 a# G // the beginning of the loop.
5 S+ L: M1 H& M7 L, @6 g6 B7 s. `" h
6 b9 j; ^$ h. _) S2 p // This is a simple schedule, with only one action that is
- ]2 {& G! ^0 W2 r8 I3 f // just repeated every time. See jmousetrap for more2 w' t" y/ {6 v+ n# _
// complicated schedules.# ~6 A6 _: q8 P |7 T
, d" C: l" W$ C0 G5 F5 I
modelSchedule = new ScheduleImpl (getZone (), 1);$ ]# k$ G. _' d) e9 \% a6 @
modelSchedule.at$createAction (0, modelActions);" X! J- e' W4 u& @
; u! D4 S9 [0 u
return this;' g9 U1 A+ T/ w3 j6 _' ^+ K
} |