HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: V4 j$ g+ j5 h" d6 G8 C) o* P
+ J* X6 c( D5 s0 D" | public Object buildActions () {, V8 [8 N1 [) u9 Y8 `* t, n
super.buildActions();4 Z0 T+ v) P$ z. W- [5 a9 Z7 _- m0 i% F
# [8 J0 R- g+ ~! M
// Create the list of simulation actions. We put these in+ A1 e- w& R! M& L: S% D* ?
// an action group, because we want these actions to be- P9 u* B) W' g# o
// executed in a specific order, but these steps should
# l& M7 W, P/ f2 J // take no (simulated) time. The M(foo) means "The message
& x1 [: q6 }; b5 F* h- W // called <foo>". You can send a message To a particular# o/ a+ |/ h$ b5 w; _
// object, or ForEach object in a collection.
: j$ n' n: D8 v# a5 ^ $ q* d3 D- \7 X5 R9 c& ]
// Note we update the heatspace in two phases: first run
|- u$ h' v8 C% R. n5 N& t$ X% L0 n // diffusion, then run "updateWorld" to actually enact the! O- F4 ]8 W: m7 S* ?/ \" d' E
// changes the heatbugs have made. The ordering here is5 ]7 J# C- e2 `& q
// significant!# V' t' Y; {/ @& j! W1 v& \
n- x2 k- G* i2 b7 \ // Note also, that with the additional; \" _3 {: }* x7 f" r
// `randomizeHeatbugUpdateOrder' Boolean flag we can& d! k) j5 O" c
// randomize the order in which the bugs actually run) V. `% ^" X5 B# ]+ W
// their step rule. This has the effect of removing any$ t6 J* g5 g9 ?. C
// systematic bias in the iteration throught the heatbug
" T6 N8 u& e, t; u, p0 N1 q // list from timestep to timestep
7 l1 d9 N# P% o% p) \& t) q ; ^2 o* _$ v. x5 n8 O
// By default, all `createActionForEach' modelActions have+ f+ }$ @# ^+ f( c, N7 D
// a default order of `Sequential', which means that the
7 r: d" r/ U5 s- _' U. E // order of iteration through the `heatbugList' will be) R% |! B/ k) W$ A0 y- ^
// identical (assuming the list order is not changed: L/ k _- k: @* k6 M$ T8 w+ U4 k# [% K
// indirectly by some other process).
7 ^3 o4 v& y6 Y' b' d0 e F- r
, ?" d6 ` R4 k: E8 ? modelActions = new ActionGroupImpl (getZone ());
4 L0 @+ P1 ^' I
. y4 E! q& H) Z7 c2 g try {6 `- J: J4 |( I7 l3 `/ ]2 ]! y: X
modelActions.createActionTo$message
8 x. V& e! _$ Y& u0 Q* [ (heat, new Selector (heat.getClass (), "stepRule", false));9 |! q! F8 w( I/ I2 m
} catch (Exception e) {
5 d. R8 z3 ~' U8 ]/ D/ ^. o3 Z System.err.println ("Exception stepRule: " + e.getMessage ());- R. g9 ?9 m% C1 [3 a) M& ~( b
}
; ?3 p& [* r4 f) t, O( [/ {0 i( T) r' c0 F. l
try {
1 ^) t; }; m/ r; T& V2 } Heatbug proto = (Heatbug) heatbugList.get (0);, M- T V% O/ N
Selector sel = ' c1 J7 H$ R9 g( v( ~7 Y' Z p2 }
new Selector (proto.getClass (), "heatbugStep", false);3 G) s, X6 W1 G
actionForEach =
1 X6 d7 x% @6 \% b modelActions.createFActionForEachHomogeneous$call
2 x7 F5 e8 ]6 B% a# D (heatbugList,+ m' n2 ~+ R+ S7 i- R2 Z; `
new FCallImpl (this, proto, sel,. N: I7 r6 j6 T
new FArgumentsImpl (this, sel)));
5 {+ `* G! ^4 k: L: L } catch (Exception e) {
7 ^1 w' P5 o& t/ x) r8 E" Z e.printStackTrace (System.err);: F: g d" f1 ]# u: C
}$ N" x; K, g9 ~# P T/ r$ x; C: l
( R9 \0 W1 X+ K2 l syncUpdateOrder ();
8 `) v/ z! }5 c9 B. L: x4 i
. N4 a6 X$ c! R. D% N4 o& f5 j0 q/ B1 S try {: ^4 w! M5 M( P% Z; K! E
modelActions.createActionTo$message + f0 t1 \& j7 H2 A+ K
(heat, new Selector (heat.getClass (), "updateLattice", false));3 A8 ?) L; }5 U5 u) a2 x
} catch (Exception e) {
- h' Y& T5 O/ V' ], E0 ?- Y System.err.println("Exception updateLattice: " + e.getMessage ());
4 I- C. O' O3 Q6 Y! r }
$ `% h2 z( \/ N8 v( @
9 p5 @' o7 |1 o# k6 w7 `% R // Then we create a schedule that executes the1 Q1 W7 ~1 u* c3 i6 y
// modelActions. modelActions is an ActionGroup, by itself it$ F: t" F( ^# A! {! E$ P
// has no notion of time. In order to have it executed in4 K s, }+ k8 N1 U' I' ]
// time, we create a Schedule that says to use the8 W6 _- k8 [8 X4 z( Q! Q0 y0 c) m) X; E
// modelActions ActionGroup at particular times. This
8 F" r1 o: N5 I& E // schedule has a repeat interval of 1, it will loop every* ?2 q, p0 ^0 P* C- E0 A t
// time step. The action is executed at time 0 relative to# \. A; n0 K- u0 h- U# q
// the beginning of the loop.2 x2 t9 o% c" I: s$ h
9 V; t A" N4 v3 C- [0 O
// This is a simple schedule, with only one action that is
" O7 H0 N; J/ k- [6 p // just repeated every time. See jmousetrap for more
( M6 _; E/ Q. t; h' ?5 G! d% x // complicated schedules.
+ I$ d% ]# J' u+ n& [7 c & k6 ]- y% F! b" |: P
modelSchedule = new ScheduleImpl (getZone (), 1);2 ^% z, B, n) M" v4 I2 ~
modelSchedule.at$createAction (0, modelActions);, @# I! |8 A. O, o
8 D* C. R2 |0 p, X5 R& d
return this;
; ~6 y/ H1 P- f2 X% w9 \ } |