HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- ]- g' G. R4 C
/ L7 o0 r; r. H$ w
public Object buildActions () {5 h( O- z" U0 f" e( W p' j
super.buildActions();) e4 }1 E6 B ` P/ w! X3 n5 q
$ Z# y& L8 O k5 m4 f. `4 K1 c
// Create the list of simulation actions. We put these in! ]1 W, ^4 m2 B2 Y/ D. b, l# G, E8 Y
// an action group, because we want these actions to be6 t& Y1 {/ f* B, d' a; j
// executed in a specific order, but these steps should3 H4 D. k( p1 X+ `# g1 t
// take no (simulated) time. The M(foo) means "The message" {" i$ W' ?. Y" _. f
// called <foo>". You can send a message To a particular
/ f2 w' l m& G4 F9 K9 {. T1 G // object, or ForEach object in a collection.5 ~8 d: x3 h8 g! p: Y L
7 c: s$ T& n& k$ ^: d) N& S
// Note we update the heatspace in two phases: first run& v v' J" r1 u9 k7 ~; U
// diffusion, then run "updateWorld" to actually enact the
" T5 o' w- [9 Y4 t2 r; }- F // changes the heatbugs have made. The ordering here is
6 c2 [" ~: V& Y // significant!: ], h4 }, g- e3 Z# j
v3 Z. l, T; t
// Note also, that with the additional
% [0 p0 J# B7 o; k- M/ D0 m // `randomizeHeatbugUpdateOrder' Boolean flag we can9 `+ ?. g) i! y+ z
// randomize the order in which the bugs actually run
2 W( }/ I$ H* s) E4 k- o, f! D // their step rule. This has the effect of removing any) |+ [: h' e7 B1 D6 A. q
// systematic bias in the iteration throught the heatbug
: @0 c% w) W! R. S8 m // list from timestep to timestep
/ {7 B6 \. x0 k) [# _ 1 ]0 ]7 N: N" B; d3 i
// By default, all `createActionForEach' modelActions have
/ G! m$ Q# `: O4 f2 x6 r% m8 T3 U // a default order of `Sequential', which means that the
; C" k6 T4 a. C* o: P8 ] // order of iteration through the `heatbugList' will be& d# @$ F8 C2 O9 n& m8 V- ]
// identical (assuming the list order is not changed( M! ?- o( v3 A% u; P9 L% r
// indirectly by some other process).
; ], M. \- d9 A- a4 l ; k b' j% a# B" l
modelActions = new ActionGroupImpl (getZone ());( Q4 x% q( v+ Q3 H7 M" s: g
% @$ I T( D% x$ C& T ]3 O x9 n
try {
4 L- x9 H+ u$ T& N8 C: | modelActions.createActionTo$message
- U3 X3 {2 X+ @( I Z0 I (heat, new Selector (heat.getClass (), "stepRule", false));
( W! Z9 `" u% H& g9 r) F) r* V } catch (Exception e) {
( f" j& h8 s0 k; @ System.err.println ("Exception stepRule: " + e.getMessage ()); i# ~3 n, I" H4 o% U
}7 C. L7 M& i, M p, Q8 U0 Z4 k
" f6 L- ?& K$ E2 s try {( G, `6 g- f" N6 ]( s" i( G6 v
Heatbug proto = (Heatbug) heatbugList.get (0);0 O$ M- Y- a: J' H u
Selector sel =
* k6 Z5 c- Y! |' O new Selector (proto.getClass (), "heatbugStep", false);
+ L0 K$ c$ A4 V( r/ { actionForEach =, w' k5 W, \; ?3 t8 Q$ O
modelActions.createFActionForEachHomogeneous$call
$ t- y+ R# S+ B" ^ r (heatbugList,
' H9 n9 ]7 o& m3 B, v new FCallImpl (this, proto, sel,* |3 p; F) _) k1 V$ t
new FArgumentsImpl (this, sel)));/ l9 \" K8 V! g4 F
} catch (Exception e) {
0 u4 [8 f$ M" J& _" I* J* u$ m e.printStackTrace (System.err);5 N' n3 Y; [- i2 ^& h: G
}( k' C0 q" Y1 ~
# }/ D( U0 D, X syncUpdateOrder ();0 F, M* Q. Y# r4 t& K
4 G( {. V% b# N" v7 F& c try {
1 b( T9 @5 ]3 S/ n) I5 p4 { modelActions.createActionTo$message
( A" N* G2 x, e8 A* v7 K$ Y# L- L' J (heat, new Selector (heat.getClass (), "updateLattice", false));
7 m6 w i) i8 Z- k7 A- R } catch (Exception e) {
9 Y' z" R; |9 d1 H; ` System.err.println("Exception updateLattice: " + e.getMessage ());
1 Q$ i+ f; Z* T- [. \8 {$ X }
% l6 Y& b$ x3 T, f; E * E9 G+ j4 H8 U5 z c6 K8 w! w" l
// Then we create a schedule that executes the
5 X+ S* F1 b# j( [/ o. A: H* h; Q // modelActions. modelActions is an ActionGroup, by itself it+ F# r5 {$ A4 x/ r
// has no notion of time. In order to have it executed in
9 I+ m8 R2 k) V. m8 `& y# [4 ` // time, we create a Schedule that says to use the
# y9 q9 @2 H% v8 b$ X // modelActions ActionGroup at particular times. This
& W) G u# l( |' p9 f/ ? // schedule has a repeat interval of 1, it will loop every
* N' G) a) `7 o- b // time step. The action is executed at time 0 relative to
( O8 h0 Q- K4 F, k, P3 L% r0 f // the beginning of the loop.
" A1 ~* P7 N2 [5 ]0 r5 h2 b9 B% }; E1 E1 v4 q1 X" l5 L
// This is a simple schedule, with only one action that is
& P% f! i' K( y7 n/ A6 V- c7 { // just repeated every time. See jmousetrap for more
u0 n ?7 M5 [: S5 G7 j1 o Z, q // complicated schedules.
2 r: U9 }5 A' B( k* A
# b! K3 {% a# S; s modelSchedule = new ScheduleImpl (getZone (), 1);
9 s6 q, h6 v$ k( m1 x e& s6 Q9 Y modelSchedule.at$createAction (0, modelActions);
" [% l) q+ W' s5 s & d. y( K6 _) F9 \: c# I* s
return this;# M8 G; w/ i" N( i; [
} |