HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' |4 h3 O% j% X7 g. | I7 w( N( ~1 H
, Q8 ]' x0 e- S( q public Object buildActions () {- U' L, N; y0 w5 \( V
super.buildActions();
q) P1 A1 _; U/ @ 7 B" K) B9 F2 M& _/ R
// Create the list of simulation actions. We put these in# @0 ^' S7 [8 V4 n- ]" m1 q7 b/ g7 k
// an action group, because we want these actions to be
# I. E# e8 {! I7 v // executed in a specific order, but these steps should6 |- m8 a- e. c
// take no (simulated) time. The M(foo) means "The message
0 A; O7 g& z8 t8 f2 b // called <foo>". You can send a message To a particular8 Z* S/ F2 U. e
// object, or ForEach object in a collection.
+ C6 N" h0 T% ^/ g 8 f3 T: o+ l9 f. | c8 B
// Note we update the heatspace in two phases: first run
/ Q0 a+ F: |8 o5 ~ // diffusion, then run "updateWorld" to actually enact the
( R9 w. B9 Z: |4 |; U3 `4 \ // changes the heatbugs have made. The ordering here is. w; u9 Z( |$ i( k8 Z* \2 e
// significant!8 g" ^; H y- }) Q/ o8 \
; W8 ?8 {" m* v7 \* h: u; r
// Note also, that with the additional
7 ^" X& R( }( [; ?- n2 Y. m K // `randomizeHeatbugUpdateOrder' Boolean flag we can" \* c5 I9 d5 e" L6 o0 q0 B! G
// randomize the order in which the bugs actually run! f( ^/ p" j' e G$ U# v% }
// their step rule. This has the effect of removing any
/ U& [: l7 R2 p" ^2 O2 H; d // systematic bias in the iteration throught the heatbug! L7 @7 O5 N) t& Y+ U* G
// list from timestep to timestep1 a/ e. q/ F' Y0 @' c
# m0 D" h5 e. O9 C
// By default, all `createActionForEach' modelActions have: e, F( ]# H" f
// a default order of `Sequential', which means that the" a6 J3 v8 ` w
// order of iteration through the `heatbugList' will be" F- I" F5 m0 `
// identical (assuming the list order is not changed9 ?6 l1 W9 c9 l# Y5 ~: ^1 K, o5 P. ^
// indirectly by some other process).# O6 [- B) Q$ \( Y( q, B% Q
6 @& c, ^ |$ `9 h2 N6 a2 Y! }1 E modelActions = new ActionGroupImpl (getZone ());
" j. j* V+ A2 W6 `. A, a2 W, l
7 o) f6 S7 I9 O6 B$ }! B try {
! v6 R; y- j7 [$ k) ?7 ~: n modelActions.createActionTo$message
9 O i9 @; N4 s9 d: } (heat, new Selector (heat.getClass (), "stepRule", false));
4 ?. t2 h! Y! B- }7 { } catch (Exception e) {) j, b# r: L. a0 ` @
System.err.println ("Exception stepRule: " + e.getMessage ());- L( i* J# {+ Y- R8 K* p
}
; y- T8 H" {- E! l
& @0 a" s6 D, {' \: H( J try {$ _- A+ |& Z1 s! c
Heatbug proto = (Heatbug) heatbugList.get (0);
+ k% b) d& _4 U% s4 \ Selector sel = + R7 b3 ^& X# |& x! G! t
new Selector (proto.getClass (), "heatbugStep", false);0 x: u5 G8 y# N' ^/ ]
actionForEach =
& ^& A+ r0 R. H modelActions.createFActionForEachHomogeneous$call
8 t$ |9 p. ]- P. j& @ (heatbugList,2 k. k+ ]" V7 n: G0 P- }
new FCallImpl (this, proto, sel,) l7 \; m, q7 Q
new FArgumentsImpl (this, sel)));3 i6 J7 N" z, ^* x9 L) }' s6 w1 \; x9 T
} catch (Exception e) {& h* V8 ?) ~' ^" Q H
e.printStackTrace (System.err);% P6 ?/ G5 V! q/ M) R% ?9 [) v! a
}
$ \7 C! ~9 v% f+ a# K 7 D9 H: x. [$ e9 ^9 B
syncUpdateOrder ();
~$ z1 W$ \! t9 \4 x; |
8 O6 j0 Y+ z6 c, r( t/ ^ try {# Z! N/ V6 A7 O! j
modelActions.createActionTo$message * q. r* r4 O8 m7 [
(heat, new Selector (heat.getClass (), "updateLattice", false));1 n$ ]8 a- p0 _) L0 r' \* f7 @
} catch (Exception e) {, d2 U7 M6 ^9 k- K6 u. ^; ]
System.err.println("Exception updateLattice: " + e.getMessage ());" t% K, b& y1 u2 i& U# Q
}) m. k/ T) V( H* t6 Q. z5 d
f; l' z: v5 `; l // Then we create a schedule that executes the
& ]0 B5 v* W% M // modelActions. modelActions is an ActionGroup, by itself it
* s; b& c1 K7 s( `, p3 b // has no notion of time. In order to have it executed in% Y" f/ G& P6 l9 I1 G
// time, we create a Schedule that says to use the! ?: X3 T3 n+ t9 z; p; k/ W
// modelActions ActionGroup at particular times. This/ E4 Y K" P3 V2 _" h6 B
// schedule has a repeat interval of 1, it will loop every _! [0 T# M# m; E( u N0 u. S* ]5 I
// time step. The action is executed at time 0 relative to* R. b8 L; d$ [' P5 e9 c
// the beginning of the loop.
0 ~% q$ ?9 m! B& o9 ^9 \) Z4 j/ R7 ~6 W8 W9 Q* O' ?2 H7 m- `
// This is a simple schedule, with only one action that is
- j' ~. Q9 V0 d/ k // just repeated every time. See jmousetrap for more
. x% j% w* x$ y8 w6 `3 p // complicated schedules.
1 B6 \+ G& j5 r1 {7 [: w
5 d% \% C" l& c' L modelSchedule = new ScheduleImpl (getZone (), 1);
2 P, c" q* r6 o: k modelSchedule.at$createAction (0, modelActions);! g5 P0 i0 j' d' S: b6 m
" S6 p' U; V' ? T return this;+ [4 }% _) M$ J# h0 w
} |