HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ Q% \% f6 H6 m0 G& g* d
* h1 Q6 |0 [& r: B' _/ a public Object buildActions () {
( }' c) F& x. v3 O super.buildActions();6 c* G: x/ [; M: v5 B2 @
+ O0 z, Q f! V# q! t5 r // Create the list of simulation actions. We put these in
8 ]) |3 u+ ]) z+ c( } // an action group, because we want these actions to be
( A0 ~ \0 q* ]2 ~8 d0 p# g // executed in a specific order, but these steps should$ F* o8 m' ]3 h; t# e! j
// take no (simulated) time. The M(foo) means "The message* `' M+ G! Q5 L C
// called <foo>". You can send a message To a particular
7 }2 G' h+ g3 }/ K6 y3 p // object, or ForEach object in a collection.
$ F4 \& P0 z% y% {2 h. m# e
( d$ v, w% Z6 G) c( X // Note we update the heatspace in two phases: first run
$ Y8 F9 e' l; d7 k) `! A0 ^7 M // diffusion, then run "updateWorld" to actually enact the
+ D% [9 I* E, b, h // changes the heatbugs have made. The ordering here is1 Q4 E& O5 p/ P5 z0 m1 z8 o
// significant!
f u: E c$ g# b
* V- q9 k. D G* T7 i7 T8 q // Note also, that with the additional7 k( k' W2 O0 c
// `randomizeHeatbugUpdateOrder' Boolean flag we can* X2 g0 X7 Z) d1 [, ~
// randomize the order in which the bugs actually run
, K6 W/ y( P3 U& s // their step rule. This has the effect of removing any
3 c3 D+ t) _, \; O // systematic bias in the iteration throught the heatbug- G( a( q0 e& ^
// list from timestep to timestep4 f4 E2 ^$ G2 O Y/ l6 t
+ i3 G7 u# [+ W% E // By default, all `createActionForEach' modelActions have
) Y# ]* U1 V3 Q- x/ h/ J8 V* y. s // a default order of `Sequential', which means that the% t7 ~2 {/ U! w- G# n& D1 I
// order of iteration through the `heatbugList' will be# k5 t5 U0 A7 I0 M
// identical (assuming the list order is not changed- j! @! [' _, A" Q- G
// indirectly by some other process).7 B! y: X0 ^0 V# K" e
$ K5 C$ r F- h8 E
modelActions = new ActionGroupImpl (getZone ());$ y+ K A# k4 K( @4 Y# s
1 q/ q0 f2 ]8 q. J try {' V' P" z! }+ _! {
modelActions.createActionTo$message
?+ k$ T/ ^* D) T (heat, new Selector (heat.getClass (), "stepRule", false));8 c- }; s5 H2 `9 v9 F
} catch (Exception e) {
9 \- @0 ^# `& C0 z3 k System.err.println ("Exception stepRule: " + e.getMessage ());+ S* O3 U8 o/ S! s$ h+ Q6 p& r
}. c4 ^9 h L/ y. X; H! \
+ Y0 d# I* M% F% G try {
2 P% j- i$ w; n/ U7 Q/ O5 } Heatbug proto = (Heatbug) heatbugList.get (0);
1 w+ }9 p. _: ]3 f8 Q P6 G2 g% _% J5 O% j Selector sel = ( P# K# H+ o& f/ J; U! [
new Selector (proto.getClass (), "heatbugStep", false);
) X7 z, C) P& F6 b B& ^ }/ f& l7 @) ]1 [ actionForEach =2 x1 I# [5 K/ ^ t
modelActions.createFActionForEachHomogeneous$call
7 i& Y8 {5 {& l( V5 D3 K1 m* f6 z (heatbugList,
- N6 f+ z5 m- X new FCallImpl (this, proto, sel,
& r9 n) I! u: g! Z# g5 g5 e new FArgumentsImpl (this, sel)));
' s4 K+ H3 H/ H& d; Y( S# S6 s } catch (Exception e) {# x g8 A5 [! j9 z+ r( e, N
e.printStackTrace (System.err);
4 E p# _# r+ N( ]6 U }
0 |& G" S2 O0 z/ u6 N
* ~3 J/ C. b! A$ G6 ^) G: L7 Z syncUpdateOrder ();
* n% K o/ Q3 F' }+ J9 [5 i& n% m( D3 s/ m' A5 h# C
try {
( d1 L$ D) h4 u+ a: |" O7 F% i modelActions.createActionTo$message 1 Z8 D$ x+ Q) [
(heat, new Selector (heat.getClass (), "updateLattice", false));# Q5 G7 w" `" C# e0 k" b" D
} catch (Exception e) {# I. y* O4 `& L* J0 L2 P* w0 I
System.err.println("Exception updateLattice: " + e.getMessage ());
' I) ?/ {; [' O- [7 a9 B }
, z2 @$ {3 S6 {$ q
2 S% W3 Y4 P- B! e1 F5 c* _0 m // Then we create a schedule that executes the
! r9 Q* [: B. v; z) J // modelActions. modelActions is an ActionGroup, by itself it
" ^$ N/ e6 z7 K3 r$ r* H5 c // has no notion of time. In order to have it executed in# C7 @# B Q& s; r, ~: H
// time, we create a Schedule that says to use the7 A2 z+ W% T9 C2 d% V) ~9 Q
// modelActions ActionGroup at particular times. This3 [$ U2 ?: N" ?# }8 u
// schedule has a repeat interval of 1, it will loop every7 h5 V. V+ D- x# q M2 w1 t
// time step. The action is executed at time 0 relative to' C2 |2 B h* `" U9 a$ I8 y
// the beginning of the loop.2 k; v. i: A. _: d9 P% F: g
/ c$ {4 E6 F8 s7 e
// This is a simple schedule, with only one action that is
7 t* X, _0 Q4 K+ l& r! C4 Y. k // just repeated every time. See jmousetrap for more
- W& Q. O& |8 P+ U; h+ W' c // complicated schedules./ \8 W. u6 y9 ^; T) S9 O6 G
: q; |( j& f- e4 c' n0 S modelSchedule = new ScheduleImpl (getZone (), 1);+ T) [9 v) X ~9 }' M
modelSchedule.at$createAction (0, modelActions);
5 B* S* K X- J$ h) E
+ V# `/ u* q' W& d% G return this;
% J# j( w4 {4 I% Z* p9 W& C1 D } |