HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( Q6 N+ y; X$ q* G: a
; e0 Q6 q; W! V3 L [7 ^# D public Object buildActions () {* X' Y$ E3 Q( M; S- \' K1 ^6 h
super.buildActions();( n4 v' ]. C! ~9 e
8 G4 A6 h; ]3 x0 |
// Create the list of simulation actions. We put these in
$ t* x& N' i: J* U' r5 o // an action group, because we want these actions to be# t2 ?9 I D/ f$ b2 s1 A
// executed in a specific order, but these steps should
`( G2 m% b+ a* z3 I% A0 V // take no (simulated) time. The M(foo) means "The message$ x, c7 I7 v0 J3 Z( K4 r$ Q8 ]
// called <foo>". You can send a message To a particular
# }* H4 I& z: J. X8 A // object, or ForEach object in a collection.5 U: C/ ~, ^6 e; ]# e7 _6 X
) g8 r% J' `3 v+ W" Y // Note we update the heatspace in two phases: first run: Z, J' V% l+ N% |: r, {* X& W. e4 h) e
// diffusion, then run "updateWorld" to actually enact the
' ^2 `: L) W c1 T // changes the heatbugs have made. The ordering here is0 N+ A9 h$ o% v. K; X
// significant!
8 R, k8 ]" o4 o1 G2 r6 A
3 }# I' m, v" r/ s2 ?; z // Note also, that with the additional- J4 Y9 m+ ^1 k7 _
// `randomizeHeatbugUpdateOrder' Boolean flag we can. @3 X; s% i0 r+ O, S2 V
// randomize the order in which the bugs actually run
6 d* z, h4 C# Z& t0 { // their step rule. This has the effect of removing any$ N# C8 P' s0 u$ Q, Q+ I% a
// systematic bias in the iteration throught the heatbug' g0 T' `1 j( X; X) ?) e, a6 P) s
// list from timestep to timestep8 p: ?, u1 a; R
1 Z2 c1 q! M U
// By default, all `createActionForEach' modelActions have0 n* w1 w/ P3 C1 Z/ F/ x
// a default order of `Sequential', which means that the9 a1 n; a0 D0 U7 o- `
// order of iteration through the `heatbugList' will be
1 t% f; }* G) q7 y" A // identical (assuming the list order is not changed
3 P8 `" D9 [5 [' n" x // indirectly by some other process).2 e0 z, E4 c c) q- [
. c5 z7 a7 {7 ?1 I# h
modelActions = new ActionGroupImpl (getZone ());# u. _( _9 a/ ]3 M9 P+ Y
7 h6 o$ i2 p- z/ d& T+ ^! h try {
2 b3 {4 P$ R, N) L+ z modelActions.createActionTo$message" _3 F/ }4 r/ T# L) @0 l
(heat, new Selector (heat.getClass (), "stepRule", false));& B4 F& A# e% L
} catch (Exception e) {
7 t4 e2 q v, d: H" @. T+ u System.err.println ("Exception stepRule: " + e.getMessage ());
" a; [! F5 o; e' B+ c6 i; X }
4 M4 C4 y# d! c1 B% p1 D; K7 V1 i/ x+ f2 r0 n5 P5 \7 r
try {
( H5 _$ ^# z$ j4 |6 \$ P Heatbug proto = (Heatbug) heatbugList.get (0);1 D9 D d/ ^4 L" G6 ~9 f& S
Selector sel =
- n! B* T$ |6 v+ C9 G& h new Selector (proto.getClass (), "heatbugStep", false);/ }: {! V4 r. T+ i$ W
actionForEach =. E ~- _# ^: {+ B5 K
modelActions.createFActionForEachHomogeneous$call
^. A, c- h" S: \3 u& @. f# q% n7 e% _ (heatbugList,
' F7 S4 R2 S4 N* P new FCallImpl (this, proto, sel,
% w K" {) r$ ]- j. R" ]) o; N new FArgumentsImpl (this, sel)));3 B; I9 f1 T: h; r
} catch (Exception e) {+ Z( c3 r4 q T% G1 b( z7 S
e.printStackTrace (System.err);
: V7 U' i2 ~: C; z5 x. ^ }
$ u# k( C8 ^1 ~5 \3 c% y/ |4 U
. `1 O( }8 n. w# [0 Z. b7 ^; {* Y syncUpdateOrder ();2 v+ k' k0 F7 o0 R" W& Y
3 J5 ?. N7 R# Q! t9 r8 M0 ]; [/ I! r try {' |% T5 p \8 c# p
modelActions.createActionTo$message
% D4 O5 b& c4 ~$ y (heat, new Selector (heat.getClass (), "updateLattice", false));
2 o( R; A: n2 ~. [( S } catch (Exception e) {
7 E) b5 d( F- ]# k7 h System.err.println("Exception updateLattice: " + e.getMessage ());
+ N8 R; ^+ v; q, m! V6 ^5 Y }& i9 P' H' @* d* y* `; D
2 u5 c0 D( V. |% \. i5 H // Then we create a schedule that executes the' d) G t% a8 f2 l# M% ]6 @* y/ p# C2 c
// modelActions. modelActions is an ActionGroup, by itself it2 {$ g: B1 N. H U# {( X. D
// has no notion of time. In order to have it executed in
( l2 f- s3 I) z- K+ L // time, we create a Schedule that says to use the
" G' C- E8 @4 |8 }# p // modelActions ActionGroup at particular times. This
( K5 R P @: z: _ // schedule has a repeat interval of 1, it will loop every3 l, i% \ w$ {' f' ]$ L( Q
// time step. The action is executed at time 0 relative to, \8 Y3 ]' E1 Y& T; p. @% |* |
// the beginning of the loop.
$ u1 _) a' r* I5 k6 n6 G+ c }) p' n* N7 {5 a0 U7 ?: n" z& g% w
// This is a simple schedule, with only one action that is2 z; ]" b2 E5 }) \5 k: ~/ f
// just repeated every time. See jmousetrap for more, h3 b7 X W" p* a) z1 Y! ~4 }
// complicated schedules.- B8 f4 F$ @4 u3 o! ]3 o
1 |2 }( M" B0 m* f+ a. {. W I
modelSchedule = new ScheduleImpl (getZone (), 1);2 F5 }* x. i* Q' ]( I
modelSchedule.at$createAction (0, modelActions);
7 Z- `9 C: B" J- w 1 b% u' B6 \# D2 T- y; P! y1 D
return this;
2 B) J1 C& l3 c$ K$ v( p. R } |