HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( V' p; ^) s& t. k
4 K% h5 \& T+ V: [' r public Object buildActions () {1 c7 U3 ~' N- G* M0 K, S
super.buildActions();' D/ X' o6 S& ]" K& @
% a* W; Q/ r) y
// Create the list of simulation actions. We put these in. i# ?9 @ H, v( g- G
// an action group, because we want these actions to be l7 t7 c9 N. i6 _/ z
// executed in a specific order, but these steps should
& z9 z1 P6 m; B. x: V9 Q, N // take no (simulated) time. The M(foo) means "The message
+ I& g+ h+ r5 u# w/ a E // called <foo>". You can send a message To a particular+ R/ P/ N) G; \ G9 \; j4 J. f" u: |
// object, or ForEach object in a collection.; u1 T, N" P- O# A9 }; B% S7 c
6 w2 { F; g# f8 i( w+ \$ c
// Note we update the heatspace in two phases: first run7 b8 S( ?8 P# a5 @
// diffusion, then run "updateWorld" to actually enact the
. \. D: M6 @, B# A6 F // changes the heatbugs have made. The ordering here is
6 d1 A2 |1 p1 V$ L // significant!
( H, a9 c$ k) q! U, Y
5 Q2 s; r, ~4 P3 T& t // Note also, that with the additional
8 E% S# ?& d- t( ?6 x: k4 _, a0 R // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 a. o: }2 @7 f7 j" ]! X8 h // randomize the order in which the bugs actually run
) T# ]) V3 g3 g0 l0 l+ g3 S& b // their step rule. This has the effect of removing any
5 G/ o" C4 _+ F3 z* d/ b // systematic bias in the iteration throught the heatbug
4 V9 D- V3 f# u% w9 v( {" _ // list from timestep to timestep4 ~" Q1 }6 }. N7 a
: N x6 r. o V1 [( Z# }
// By default, all `createActionForEach' modelActions have
. q% l* l% g+ w3 n/ E0 Z // a default order of `Sequential', which means that the, n: c f8 |3 B E
// order of iteration through the `heatbugList' will be
% O5 U" \) C: a // identical (assuming the list order is not changed8 c# _" o6 K; r) u' B1 ?
// indirectly by some other process).
" V! Q1 A' W& h3 U: N9 F( S( \9 u / I1 _. k. V9 U) @) O/ z
modelActions = new ActionGroupImpl (getZone ());
0 o8 v a; W& a# X! s% p0 a: k+ v9 J" ^9 P! B7 Z
try {
% J7 S, x( A: o% J) F. u a modelActions.createActionTo$message, Q- @: i. Z: D q* `& T$ _
(heat, new Selector (heat.getClass (), "stepRule", false));
& v6 q3 C1 n8 K; e- k } catch (Exception e) {! w( c) y. i( ^" ~7 b+ P' }$ M
System.err.println ("Exception stepRule: " + e.getMessage ());
, d; }0 F+ z1 S }
/ y) O! i) r, G3 Z; j% A/ e' W: ~% q8 z# }% v1 [
try {" z+ @2 ~/ q1 ~; }- y6 r0 M
Heatbug proto = (Heatbug) heatbugList.get (0);2 P: {+ G4 F& {
Selector sel = " H0 {) U5 I0 d5 r2 `
new Selector (proto.getClass (), "heatbugStep", false);
7 b3 Q$ F+ B2 M6 n) { actionForEach =' h, k# b: p" w2 O
modelActions.createFActionForEachHomogeneous$call5 U2 Q, h$ Y' l- i$ Y$ q3 ?' D
(heatbugList,2 u0 c4 M) U/ Z+ x& c+ t: z" G' R6 F
new FCallImpl (this, proto, sel,
% k0 [, j w2 Z9 C J5 m+ }. d, ` new FArgumentsImpl (this, sel)));" p+ \2 s' F5 \% R' | \
} catch (Exception e) {
: Z. M! ~! S) w% _- x$ i e.printStackTrace (System.err);
5 Z" f% w9 b+ } }
: A0 y2 y% P( D4 M: [: d ' A( b* o3 X5 X5 y% U' ?4 U! r1 ?: @
syncUpdateOrder ();
1 x0 l2 f7 |; A6 D4 Q* |, N/ }5 b* X1 s+ w9 t* e$ O% B8 t$ d
try {
' n7 @3 ]+ C6 O, {- Z9 K4 \ modelActions.createActionTo$message + \" D5 p' f, y) [, ^) \! U
(heat, new Selector (heat.getClass (), "updateLattice", false));
) ?# z. o. T7 E0 O4 z, N7 u4 `; G* q } catch (Exception e) {
0 `$ N9 ]) k- ~ System.err.println("Exception updateLattice: " + e.getMessage ());4 s3 z" b; J2 \
}2 \# M: t% H5 I) ^
1 E/ l8 s/ ? T, }* e; q3 }& Z4 W // Then we create a schedule that executes the
" x$ e. `2 M9 ]4 w3 ?. L // modelActions. modelActions is an ActionGroup, by itself it6 T* L/ r6 T: [& t: Y5 S8 U
// has no notion of time. In order to have it executed in
2 |/ \) O: @5 a) b- s* K/ X( Q% J; } // time, we create a Schedule that says to use the
3 i S2 J) z6 _3 A7 q# s+ l5 I2 L // modelActions ActionGroup at particular times. This
( G: T- h& o3 n* Z4 `* z: c5 Y! d: d // schedule has a repeat interval of 1, it will loop every
1 Z1 {6 v: N/ i Z; S7 ]+ Q5 T- I // time step. The action is executed at time 0 relative to" |( |# e z) Y
// the beginning of the loop.7 B% {( g" @. F+ k3 n9 H
! t% }0 ^$ v! ]5 v0 `/ ?
// This is a simple schedule, with only one action that is9 C" W6 v7 z, F* N8 N6 O4 k
// just repeated every time. See jmousetrap for more
# v" K$ {9 P9 K8 a- U // complicated schedules.+ o4 Q! Z- X6 n5 C* \6 c
& A1 o; T6 j+ X; n E/ Z
modelSchedule = new ScheduleImpl (getZone (), 1);, ~/ }4 [2 z$ R$ _& N) |
modelSchedule.at$createAction (0, modelActions);
% z8 s3 L: `9 v7 B1 u( V
: q- i& y; S' A z2 u# Z. f7 C return this;- y$ C! H4 j8 Z- n; z9 N
} |