HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
w' c! k1 Y" i& Z) o! u2 B# [+ D% Z5 x' Z/ P$ D% x! E3 Q. ?$ x( ]
public Object buildActions () {3 p. N+ U) n" ]+ z, E( i4 [
super.buildActions();+ q8 I" H2 i( a0 a/ {$ P4 h
9 N! Q4 [0 J+ G/ _( i( x! M; i
// Create the list of simulation actions. We put these in
7 L3 r" X8 y1 J // an action group, because we want these actions to be
7 {. s {7 J4 I3 T0 p // executed in a specific order, but these steps should6 |4 A# `% \( ^2 e9 K
// take no (simulated) time. The M(foo) means "The message
9 b0 o4 a6 w4 S. B9 {3 j& {0 i2 y // called <foo>". You can send a message To a particular4 g/ g B, n4 C" A8 t* F0 M/ O
// object, or ForEach object in a collection.
' G2 Q( s% G; q9 O5 @' Q) X* c6 n 8 ~6 Z" j9 b, M1 `" O; n9 O
// Note we update the heatspace in two phases: first run
$ k2 [ m+ x$ ^6 x+ ~, c // diffusion, then run "updateWorld" to actually enact the
7 z& P j* ?' e' }6 P6 n // changes the heatbugs have made. The ordering here is, t# [ u1 G$ `4 j8 I
// significant!
% u( V- G: s' p( [
: L, C) Q; y! X, M) \% q // Note also, that with the additional
( K: g `+ _8 m7 h; S // `randomizeHeatbugUpdateOrder' Boolean flag we can& x+ A/ ?1 F- T# P% Q
// randomize the order in which the bugs actually run4 L& r2 R" v8 U% j+ \2 {# g
// their step rule. This has the effect of removing any
5 s, N" C( r5 o4 o2 o9 w // systematic bias in the iteration throught the heatbug9 T J' _9 g% E* z- F" ~" a
// list from timestep to timestep* ^6 j! Q2 n0 n" c6 l
7 H% U2 d* R! x9 z! U9 w4 q& q1 |' j4 N // By default, all `createActionForEach' modelActions have
: J! M3 m* ?9 K6 p5 L, y // a default order of `Sequential', which means that the
: W% \) G2 f4 ^# o // order of iteration through the `heatbugList' will be; z7 Y' [8 P3 V9 y( D5 M
// identical (assuming the list order is not changed
. T7 t7 g" j& l# k4 j4 u9 | // indirectly by some other process).
7 C4 ^3 [& M7 q3 ?
# w) ^5 Z/ @3 c6 y9 _ Q2 r modelActions = new ActionGroupImpl (getZone ());
1 A0 c+ ~3 d0 L5 O1 u" R
1 w6 U0 k! F8 R" d; A$ W; p9 _ try {
3 h8 W0 A$ c5 K8 A) o modelActions.createActionTo$message% o1 J) ^- u6 L7 x
(heat, new Selector (heat.getClass (), "stepRule", false));
" U# i0 \, l( \ } catch (Exception e) {4 Z" g8 @9 ?! P8 V
System.err.println ("Exception stepRule: " + e.getMessage ());
1 W, M1 M, H$ E }3 C1 G, }/ i" O) o, [$ `1 v9 E
' R9 q8 C9 n+ t try {! s6 [ F8 A$ q# N6 n/ U8 I `
Heatbug proto = (Heatbug) heatbugList.get (0);. t# \! P7 L4 y: `) q! s% F/ ^
Selector sel =
7 g- L6 V! f0 M7 X& S new Selector (proto.getClass (), "heatbugStep", false);! Q" U: F% j5 C
actionForEach =
& n- }) R) T/ j X modelActions.createFActionForEachHomogeneous$call/ e! y q: N6 X5 x* p
(heatbugList,
* V/ d$ x8 n' c# D new FCallImpl (this, proto, sel,
) r8 L. c, B5 v6 f: @9 }/ v new FArgumentsImpl (this, sel)));2 Y' x, u% ^+ r* {
} catch (Exception e) {9 m9 g) [# M. B' E9 \4 n2 Z( U
e.printStackTrace (System.err);8 H4 N* E! V9 `
}
2 _% `. H% j, X: {6 H8 _
/ w$ t2 S& J$ b7 j# V& k2 c syncUpdateOrder ();
. R- u/ J# D% C1 ^3 e1 Y1 D( h- N1 a+ i: B+ n3 ]7 u+ H
try {/ ~4 _, P6 G6 q% \) O
modelActions.createActionTo$message
& c. V- s* `, w; [7 q3 g (heat, new Selector (heat.getClass (), "updateLattice", false));
4 `6 r* y: x% J. U( [5 V% Q9 v } catch (Exception e) {
0 D+ G7 o& n6 b System.err.println("Exception updateLattice: " + e.getMessage ());3 F$ V$ m; G8 J7 _1 A
}
4 ^# K; Y8 V+ p/ c% A* _6 O) M " Q4 i' p: T+ @9 O. y* y& H$ {
// Then we create a schedule that executes the
3 S I& d- ] X- m, E% r // modelActions. modelActions is an ActionGroup, by itself it
. ^6 z; C) a ]/ ?' n3 p // has no notion of time. In order to have it executed in
; H. A: U! @: s5 m* G6 e: B // time, we create a Schedule that says to use the
4 R H5 E6 ~% p2 r3 ~8 Y% W; g" y // modelActions ActionGroup at particular times. This5 u9 Y1 G! t: M6 D7 j7 K$ ~3 M
// schedule has a repeat interval of 1, it will loop every
0 D [5 ?" P% w: ~+ G5 y // time step. The action is executed at time 0 relative to
) g& m& W5 f! c1 Z // the beginning of the loop.# C5 w( k8 K/ h
3 X4 v D" v4 ]& m- d A // This is a simple schedule, with only one action that is
0 T9 B* D8 p- l8 Q // just repeated every time. See jmousetrap for more; x7 v9 V7 b- M& q- O
// complicated schedules.2 w% _6 L, i$ @- f1 m0 b- t
7 G) G/ z- p; L! j% h2 v% m1 C0 s: g1 s modelSchedule = new ScheduleImpl (getZone (), 1);
, l8 k- w, `, a. x, K1 I0 p) o modelSchedule.at$createAction (0, modelActions);
: }. o% b+ K# S* I9 Q3 |7 [
- p; L: p1 W, a$ M1 \$ Z4 \9 O return this;3 k6 h3 K5 o! p* ?. M
} |