HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* G! P5 v9 B( I8 g
( F, V3 ?' Q2 [7 Y7 s, n
public Object buildActions () {$ w1 H0 f2 t; y* N6 P
super.buildActions();
5 }3 x/ Q' Q, n8 g 8 ^5 m% {- J5 o% e8 q4 u, F; |3 S. n
// Create the list of simulation actions. We put these in# L& z4 Q+ a. h( y/ e- F2 h% n9 \
// an action group, because we want these actions to be" S0 L, r: ]+ C. X R6 a2 p
// executed in a specific order, but these steps should
0 O! j m+ D4 c) o- Z$ |* K // take no (simulated) time. The M(foo) means "The message( j/ O4 _) M$ F, a
// called <foo>". You can send a message To a particular5 d* m. C! k, j2 }
// object, or ForEach object in a collection.
4 j0 X1 J( ?- a3 F
& @5 E1 L V$ q- J8 B- J // Note we update the heatspace in two phases: first run$ m8 `% W0 L- r q
// diffusion, then run "updateWorld" to actually enact the& h4 S. s/ M2 ~+ d1 o3 ] [
// changes the heatbugs have made. The ordering here is) G& g( T# i- Z3 a9 B) I4 {
// significant!4 b* Z$ L$ U6 e
: e1 I* G5 O7 k$ g% U) R& N
// Note also, that with the additional
" ?; C+ K! ~0 b! z- l0 I M // `randomizeHeatbugUpdateOrder' Boolean flag we can
K# ]6 f* \2 b1 X // randomize the order in which the bugs actually run
, W3 n! E# W5 A, m, z$ o // their step rule. This has the effect of removing any
: H( u% C3 i; x" L/ O |. u8 e // systematic bias in the iteration throught the heatbug1 c+ d6 _! ?3 S1 \% e; S# K; C
// list from timestep to timestep
* T: U3 \# u& x R: V
. _+ j. `5 z6 ?4 y0 c2 q2 `* |' D // By default, all `createActionForEach' modelActions have5 F) }5 i; y7 z! q8 D
// a default order of `Sequential', which means that the; V9 [& J" ?4 \' @6 h' m9 F2 g( j
// order of iteration through the `heatbugList' will be: n. N+ E' o7 y
// identical (assuming the list order is not changed
7 E- h2 m" P5 ?! o% y' v2 l // indirectly by some other process).
& B t9 b/ H' X( ^3 S
. E; G+ ~5 T3 | modelActions = new ActionGroupImpl (getZone ());, M0 D" }; u: z" ?( I+ C$ _( [2 u
' w4 m U$ @- B! y try {' T# [7 G U; p6 K+ {; l$ D' a
modelActions.createActionTo$message
$ [& ^" C! p) d* x0 J. }4 i2 q (heat, new Selector (heat.getClass (), "stepRule", false));) [( D @) n' i! r. K1 v
} catch (Exception e) {6 C2 P+ ^4 O; e: t) O
System.err.println ("Exception stepRule: " + e.getMessage ());. e1 X B T( y1 D
}. p% e2 P, t9 X8 o# j0 n
% `# [6 i' f2 R6 @" {4 i! T
try {. g, Q: X3 L/ ~
Heatbug proto = (Heatbug) heatbugList.get (0);5 A/ Y* }1 i' h- D, c+ ~
Selector sel = 5 G$ e, j, _5 d; N$ p/ d7 p
new Selector (proto.getClass (), "heatbugStep", false);# I+ i' m4 @/ W! W n P, I
actionForEach =2 i" ~) K/ j$ a$ Z; K2 I" g6 h* [
modelActions.createFActionForEachHomogeneous$call
( ]2 T: e" q5 j (heatbugList,+ k8 ?7 W5 u" v! m) A& C
new FCallImpl (this, proto, sel,$ [8 L4 S' A8 c h9 c
new FArgumentsImpl (this, sel)));" h* K2 P* C% }
} catch (Exception e) {
6 L5 k3 h0 {8 a; A e.printStackTrace (System.err);
9 }8 t$ C7 H6 k }
" w! { _& }& u4 y. W 9 s- i4 D7 r: G( `8 l# q; G1 y
syncUpdateOrder ();
p: q3 ]$ Z( P; p, P
. X, M: t) Q) s k/ ?7 k try {
; `4 H6 ^$ p) R* D! f& F+ T: f modelActions.createActionTo$message
+ b$ u9 p ^$ j+ p+ z S) I. U (heat, new Selector (heat.getClass (), "updateLattice", false));
; }0 L2 j. G1 ~3 x1 G" `6 e; I } catch (Exception e) {: ~, v# E6 h/ _) {: V: v6 y" u
System.err.println("Exception updateLattice: " + e.getMessage ());
4 d9 s& `1 t8 I/ y }
# k {6 d, x. D/ G% z8 o
2 @/ w; U: n! q // Then we create a schedule that executes the( P9 ]7 d+ Z+ R0 ^( S) c* u
// modelActions. modelActions is an ActionGroup, by itself it
2 N s( Q3 s# `6 h7 [ // has no notion of time. In order to have it executed in; s H( _# U8 ~
// time, we create a Schedule that says to use the9 q# z: `6 }1 |# \- y5 m
// modelActions ActionGroup at particular times. This, S2 L/ Q" e: k, N6 i
// schedule has a repeat interval of 1, it will loop every
2 f" d3 r3 M7 W4 ]/ P // time step. The action is executed at time 0 relative to; ?! ^+ B/ N. Y5 x* M
// the beginning of the loop.
. Q, D! e! S8 r) l* m% x" [% r- p* }; f/ o/ ~0 }7 i4 ?7 Z
// This is a simple schedule, with only one action that is
% x# e& H/ l! g5 L4 H l/ g // just repeated every time. See jmousetrap for more h* G3 o* }! i( U- V
// complicated schedules.3 V% _7 V/ K6 w
2 B$ K8 `/ P# E modelSchedule = new ScheduleImpl (getZone (), 1);! O4 M& ?! g! W; H& B" S3 X4 W
modelSchedule.at$createAction (0, modelActions);
' W% j6 m, t: v# [+ r) R" _ * P- Q9 z2 M% E" w: D/ Y9 s$ t; \% x, r( \
return this;
. Q9 ?" e9 |6 c$ e4 T } |