HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 ? G& W1 m0 }9 V, g' b1 Y3 j
) a0 t' |) y# m6 F% ]1 S+ ?# t
public Object buildActions () {
+ m, Z/ T' q# E* V. j super.buildActions();
3 v1 X+ t( e( d, W4 M 3 v+ m4 L- O% }# u$ V. s1 H
// Create the list of simulation actions. We put these in+ L) j) n; Q6 Q
// an action group, because we want these actions to be
# G4 s6 T5 \, I+ x8 u // executed in a specific order, but these steps should
9 A8 W$ r$ l4 Q5 h // take no (simulated) time. The M(foo) means "The message0 M4 q1 `: e/ v+ I
// called <foo>". You can send a message To a particular! ^& t6 z# v7 r R- ]
// object, or ForEach object in a collection.- q9 e6 t8 S4 D# y: i$ R5 _& N
! W# M" y* u& \7 k5 O) I2 X# K // Note we update the heatspace in two phases: first run
8 b2 p' I% K3 F* J0 r G2 T: | // diffusion, then run "updateWorld" to actually enact the q+ b* P# ^# E% `
// changes the heatbugs have made. The ordering here is) ^) D. L9 ~7 ? H& R# b4 I+ w# y0 W
// significant!
* N. N. p a, u8 U2 @& T; {, b 1 j1 \+ m6 l" D1 S2 A
// Note also, that with the additional& p8 y0 g# f0 [1 f- N+ I
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 I2 M; H, f: i1 j$ ^! t; B" a // randomize the order in which the bugs actually run
1 T/ A2 S) B, V! A: F // their step rule. This has the effect of removing any# m8 _ ~% b4 B' A3 n a x
// systematic bias in the iteration throught the heatbug
, L# j' Y" E1 }; N: C // list from timestep to timestep0 O9 J6 h( ~- S
9 c' i+ D# V, A8 W% O# u( R) s
// By default, all `createActionForEach' modelActions have
. [- K& k+ R U0 j( h9 x2 U: y // a default order of `Sequential', which means that the% T$ f7 X$ N. `# a
// order of iteration through the `heatbugList' will be
) L' ]) F/ m" |0 T, I // identical (assuming the list order is not changed$ M9 ^4 Q. \8 ?! C, w; r# }
// indirectly by some other process)., _+ K; Z$ |9 Z! D c) k8 W
1 c; A& N& @4 W) H
modelActions = new ActionGroupImpl (getZone ());
( t$ F; u; y6 T
! X, q" U$ e8 K# ]( v+ M( k try {& u3 G1 p. f X7 ~# F# U' z! Q8 s! I' Z
modelActions.createActionTo$message
, b$ M7 i1 T! m/ w ?: k (heat, new Selector (heat.getClass (), "stepRule", false));
: e3 Z% n. l3 W% [/ x. q# \ } catch (Exception e) {" x s7 V! S; A( g$ [) {# u
System.err.println ("Exception stepRule: " + e.getMessage ());
( g. M) V0 F. i$ g% R, @& B. A }) x4 q! Z1 @1 a: i$ A6 ?: [3 f2 `
! _, |& A) h9 p
try {
. p3 x* a1 N) B% j- c6 _9 \4 h+ g Heatbug proto = (Heatbug) heatbugList.get (0);
5 Q% f5 i, {" D2 l8 [" ^) k Z( T5 y Selector sel = ) [+ D4 p {; z. d/ |
new Selector (proto.getClass (), "heatbugStep", false);
. o* e2 s7 \" @- n4 K7 P actionForEach =$ a t1 H& k6 U
modelActions.createFActionForEachHomogeneous$call( l2 w4 z" R+ g P! R Y4 j
(heatbugList,1 `! h1 G8 {( w' ]9 C
new FCallImpl (this, proto, sel,0 W1 V* O+ @6 I* h
new FArgumentsImpl (this, sel)));
% ~5 O+ I- y% Z } catch (Exception e) {
! M0 g% }, b- J+ J3 a; U" U e.printStackTrace (System.err);
$ o3 e. L: ~4 b F6 L( ?& S }- s& e, e8 ]: r( c4 S
$ x. O; D! U, L1 O8 s# n
syncUpdateOrder ();$ @" |- H- B( ?+ _
9 ]% x$ }- w, B/ @) ?
try {
) l Q' _ T" X! a modelActions.createActionTo$message
$ \3 F; H- j' {4 O: G# j* Y0 O (heat, new Selector (heat.getClass (), "updateLattice", false));# g( H& I- [) M
} catch (Exception e) {/ \1 N+ ^' x. _& R* R) h0 T
System.err.println("Exception updateLattice: " + e.getMessage ());+ R! k5 o6 z9 L5 z; |$ _
}
1 U6 y: r @' J/ Z# }
, P; `) d7 v! }# } // Then we create a schedule that executes the$ y0 Z% h& I. V' ]- X: G+ F
// modelActions. modelActions is an ActionGroup, by itself it
- d+ n9 N& X8 ~& _( [# V1 U // has no notion of time. In order to have it executed in: } P6 O& m- X* z
// time, we create a Schedule that says to use the
* P# G) p) k* \( M8 X: w; M, B // modelActions ActionGroup at particular times. This
+ V6 J2 Y1 U! i, i% A B // schedule has a repeat interval of 1, it will loop every
" ]8 {! K7 b( _9 { [% Y: m // time step. The action is executed at time 0 relative to$ d0 K5 [. V# k5 Q6 F% ~
// the beginning of the loop.. @% o, P" N% A% }9 @2 y4 n
1 a7 H/ ]6 {# n2 t3 P+ ^8 y6 o5 ~! d // This is a simple schedule, with only one action that is6 X4 `: U$ l) E8 W4 e
// just repeated every time. See jmousetrap for more
* w$ \" d! B$ I. u0 Z A, J0 M8 O& ` // complicated schedules.
% b5 C3 X- Z4 y8 S9 P ) c! }! D$ u% Q. L% T. c6 P" T
modelSchedule = new ScheduleImpl (getZone (), 1);
- D/ u0 U' y2 @/ ^5 V7 h modelSchedule.at$createAction (0, modelActions);+ X6 w3 N, |$ S* J/ ^
7 Y. B# _& H" O. h. i1 K
return this;/ X* I. {2 N: `: @# F* c
} |