HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* y/ v/ Y7 r3 g Z/ v+ [
5 k' \5 `, t* ]
public Object buildActions () {2 a7 @6 ^% ?$ x* v
super.buildActions();; O! @4 I1 Z7 y, g, p+ \5 G( J9 D
7 D9 z) J: ]9 f // Create the list of simulation actions. We put these in0 n( G8 }1 O9 |* L
// an action group, because we want these actions to be
. M$ c/ ^# C8 w( @: z // executed in a specific order, but these steps should
8 J% J0 d+ t( |5 a3 H F // take no (simulated) time. The M(foo) means "The message5 \- F0 v7 j; j* K4 F
// called <foo>". You can send a message To a particular3 V( D2 D, X, V0 ^7 F: _- |! Q
// object, or ForEach object in a collection.
) l2 p, f9 e, ~/ J) U4 U; b9 ~
: B; R. V( Y, o8 h+ u0 W // Note we update the heatspace in two phases: first run
' T6 N) G8 r# d' v( R+ L // diffusion, then run "updateWorld" to actually enact the
1 y' D2 m. S. Q // changes the heatbugs have made. The ordering here is3 ~% B" F! j+ C3 }, W+ C
// significant!
X+ t, P* q# X% V% a, k9 f3 ?% o) d ; {+ L: v# x0 z5 k: }: m6 i0 a
// Note also, that with the additional
. K( a4 l+ Q3 E // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 x1 i; [( M5 f$ L0 L // randomize the order in which the bugs actually run$ h& }0 L8 n) I7 R
// their step rule. This has the effect of removing any1 Q1 E4 ?8 _& \9 a8 W) Q2 N
// systematic bias in the iteration throught the heatbug1 D$ e6 @: z7 e8 q
// list from timestep to timestep+ L1 M" ^8 }8 N
! n( f# D# x, X" C4 ~ // By default, all `createActionForEach' modelActions have
8 ~& g. g) o4 q+ j+ T3 Z // a default order of `Sequential', which means that the s* z. S/ q% `8 f3 r
// order of iteration through the `heatbugList' will be! V1 X5 m/ `) E% e
// identical (assuming the list order is not changed+ z6 d0 W( P6 l. V
// indirectly by some other process).
0 U& q; D0 x0 r1 A2 g4 a, q
: y4 |# X) I( B% j modelActions = new ActionGroupImpl (getZone ());" f. u6 A- y* y( f1 y* N
1 d8 @; t: U* X* |0 J, E
try {
- L$ }% N0 k' w% E! c( Q modelActions.createActionTo$message
9 @3 g# y! n. v8 o' ^ (heat, new Selector (heat.getClass (), "stepRule", false));2 o+ X/ |/ u7 z1 {8 d7 ]" k( p/ R
} catch (Exception e) {
Y1 i4 z+ z8 b& N' H( r8 A2 j System.err.println ("Exception stepRule: " + e.getMessage ());
: A2 F8 H1 t+ M- X+ q4 N }& t3 i# `5 {: ]; m+ |% y3 h- L
3 F) ]7 l) ]$ a+ ~, h. i try {
+ h4 @. q9 {9 N- z" g' Y3 J Heatbug proto = (Heatbug) heatbugList.get (0);: c \% G1 V0 Q u% |# o
Selector sel =
- k* H6 l9 w* k6 Y new Selector (proto.getClass (), "heatbugStep", false);5 Q9 L' M7 h1 I m4 U2 p. p' A8 X
actionForEach =2 v+ m3 ]' b5 ~* y8 B" }# n, o
modelActions.createFActionForEachHomogeneous$call
8 B; `1 V# {! r: _7 O4 {9 K (heatbugList,: b; F) b1 J% ?/ D8 H9 M2 e
new FCallImpl (this, proto, sel,+ H( }0 E4 @$ g* ~- R1 A7 J( ]
new FArgumentsImpl (this, sel)));
/ h0 h5 U7 T2 L7 ^# A } catch (Exception e) {
* }) B$ i' A% \ e.printStackTrace (System.err);
" g _; | z9 T }9 k# Q( p' v1 I7 C. u/ O2 v
U& K5 F5 [% `. f% Z. i
syncUpdateOrder ();
( F; J& @( G3 B* K) r
, `) f( |2 m b2 A! H# H* C try {: r' b* I+ a0 A' P) p- _( O2 d, J3 m
modelActions.createActionTo$message 9 @/ @4 s7 q" R* X9 {$ n( v
(heat, new Selector (heat.getClass (), "updateLattice", false));4 O4 G: j& y* x( w0 H8 r
} catch (Exception e) {
% n; M( i+ j3 `6 Z2 q3 K& t System.err.println("Exception updateLattice: " + e.getMessage ());4 D4 E9 F5 l# C$ A1 S: E/ R' m
}
2 u2 G) U" r2 t* M5 V D% F 7 k) j2 r3 N! t
// Then we create a schedule that executes the
0 N. ~7 `; i. M5 G // modelActions. modelActions is an ActionGroup, by itself it1 c- n$ Z! K. x+ X% ~: F& T
// has no notion of time. In order to have it executed in
8 `) {+ R l% Z7 ?* G( I, F // time, we create a Schedule that says to use the# }$ U6 a7 Y# I5 J; i2 Y
// modelActions ActionGroup at particular times. This
. K9 Z+ Y2 U# H2 t3 J7 u // schedule has a repeat interval of 1, it will loop every
/ T" Y- R8 T* I$ A( d/ s // time step. The action is executed at time 0 relative to" O# J3 W( p$ K0 d0 P9 r
// the beginning of the loop.% j- B* q, x8 A- l8 K- r* @
- m, H+ v- j2 H8 }, t
// This is a simple schedule, with only one action that is# c5 x9 a3 }5 \# Q/ C
// just repeated every time. See jmousetrap for more& m3 `% r% Y* |3 k t V
// complicated schedules.% ]3 W. H: D! x: l4 R; |
! _" J7 g/ k) Q4 T$ G3 x; g I8 {" e modelSchedule = new ScheduleImpl (getZone (), 1);
5 O3 z3 ?$ _) q) _% w modelSchedule.at$createAction (0, modelActions);7 g5 ^& W$ z* K
# N( L5 s" V: D7 d
return this;
2 x1 e& c K7 D+ R Q# j& @( w } |