HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ R, \/ d i) Q# }" B' Z' Z
* g1 q2 g6 i' R7 a4 j- C
public Object buildActions () {% C. d2 `& a# x- L4 V0 _3 H
super.buildActions();1 f7 |& R5 Z* a& D; `
X: ]; \ {4 j
// Create the list of simulation actions. We put these in( M f8 J# N+ ^7 W# ~9 N% l( W& B. F
// an action group, because we want these actions to be
) s) o+ [% r2 w- W8 u // executed in a specific order, but these steps should5 }5 D4 ?$ ?, N- _* i3 p4 k
// take no (simulated) time. The M(foo) means "The message, E1 `( v B1 Z7 u" m7 `6 N
// called <foo>". You can send a message To a particular a/ u9 E) |0 L
// object, or ForEach object in a collection.3 A+ {4 g9 U4 v4 T- W+ r# x' }8 a
$ m. i* p. |9 _- V# G8 g3 v // Note we update the heatspace in two phases: first run
9 ~& N i. ~: @8 u, j0 O# s // diffusion, then run "updateWorld" to actually enact the
& W9 A0 j6 T4 c; W) f& N0 M // changes the heatbugs have made. The ordering here is
+ F) |) _' w# t6 C+ t) Q" f // significant!& K6 q( B& I% B" q# q8 z, C+ p
; R) q5 d/ Q3 B( ?
// Note also, that with the additional
9 |" O- g: I) R6 O // `randomizeHeatbugUpdateOrder' Boolean flag we can, ]3 \+ i9 }, n6 z, w% I4 ^1 r3 [
// randomize the order in which the bugs actually run: Z( B$ r8 y3 m: s$ Q; q3 C* I* J
// their step rule. This has the effect of removing any
( x O& }" e. | L; C5 m/ O! q Q // systematic bias in the iteration throught the heatbug0 j" ]5 d' A' e, d3 e6 L x
// list from timestep to timestep
. p; c& w- F3 S; G- a6 ?
' }+ b2 y- E4 X/ {& c // By default, all `createActionForEach' modelActions have! ?/ o B4 @+ s9 P: M" O* d( a+ B
// a default order of `Sequential', which means that the0 m: F- }; b/ A4 t8 p& r4 G& J9 w, J5 F
// order of iteration through the `heatbugList' will be
/ j1 h4 m5 K+ T" X // identical (assuming the list order is not changed
3 X, x) c# Z0 ^' n5 ^( ^# o // indirectly by some other process).
& c- G6 j8 ]# e P8 K/ Y : ]2 i. G% k3 \4 O! i* M" R
modelActions = new ActionGroupImpl (getZone ());& t- v$ L. k! Z
6 T5 q0 }9 j4 z/ D) M6 G" G try {
5 ]( Q* w w/ { modelActions.createActionTo$message9 r' h+ k$ n/ d) J& D
(heat, new Selector (heat.getClass (), "stepRule", false));# k3 }* a% U; B1 B9 l" f
} catch (Exception e) {- j" { g/ y8 A6 T5 B
System.err.println ("Exception stepRule: " + e.getMessage ());
; i1 x1 m! T) ?/ H& ]4 o" I }- x6 ~& Q3 i3 O+ A5 t
$ m+ b" e4 D, X6 N5 S
try {
, T- J+ P+ e6 P# R8 Q$ A Heatbug proto = (Heatbug) heatbugList.get (0);
8 B Y( k6 l/ ^% C% \ R7 C+ e Selector sel =
* d' {2 x$ c- J! b new Selector (proto.getClass (), "heatbugStep", false);: D" h7 O: I0 G: `9 E
actionForEach =: U1 a- I4 h% s' e( u1 m
modelActions.createFActionForEachHomogeneous$call Q4 w7 r5 x- i
(heatbugList,0 C* c) K3 q; m" a
new FCallImpl (this, proto, sel,
, r H+ C3 B# n! b- S new FArgumentsImpl (this, sel)));
% p. ?! {3 {5 ?" E } catch (Exception e) {" D) o9 l- q9 c, P; k
e.printStackTrace (System.err);# |: g( i9 v6 ^6 x w4 I$ R
}, |) W" z; K% S- q# a
) D$ @) a& S0 s. g' j syncUpdateOrder ();% K! t* A8 O T: D9 ^/ x
1 y* p x/ h, G: j try {
. U1 H% m5 }. n* ^' b modelActions.createActionTo$message 0 [( C3 I4 J. {; k" ]' W0 C
(heat, new Selector (heat.getClass (), "updateLattice", false));7 Y/ \6 ~: N' W' \, Q3 K
} catch (Exception e) {
5 s3 s( S( A6 K$ T! f: b( L. \ System.err.println("Exception updateLattice: " + e.getMessage ());% g( F5 }' I$ e; f# [
}: f! h) q+ Z7 u; W% C5 j( }, ~2 `
3 b( _/ ^4 f$ N6 p' y! W1 g
// Then we create a schedule that executes the
z# J, S6 _ \1 b% J // modelActions. modelActions is an ActionGroup, by itself it1 L9 l8 h n: R' `7 `
// has no notion of time. In order to have it executed in
; F% n1 v$ {/ X5 _ // time, we create a Schedule that says to use the
" O; F- H* `1 |* | // modelActions ActionGroup at particular times. This" q" k; v& e3 A0 `$ G* L
// schedule has a repeat interval of 1, it will loop every9 M. X! j( j$ h" [" ?
// time step. The action is executed at time 0 relative to
) F3 C! M- @1 H // the beginning of the loop.
1 m; E- m. l5 O% F0 v7 J! O C8 I! ?& G$ H; J
// This is a simple schedule, with only one action that is! M; y* `/ L# M9 u# v2 L* Y; U
// just repeated every time. See jmousetrap for more
% `0 D$ p3 I/ M# Q# Q // complicated schedules.
' j* C0 `5 z+ W8 ]2 }5 X 8 D$ Q. n1 Q1 ^1 `) b) [
modelSchedule = new ScheduleImpl (getZone (), 1);. R' Q8 v% [ j
modelSchedule.at$createAction (0, modelActions);
- L$ E' o; z& c8 v9 L6 e- I
& p6 b" [' `+ m1 O1 \4 ~4 Z& p return this;& Y% G8 b8 u5 g: W0 D& e8 W
} |