HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ p5 b& s3 E4 t2 G3 E' W# l/ L8 s% b: o7 r
public Object buildActions () {. R N; Q& s# u ^5 c
super.buildActions();
' g! L' M% _2 I1 |* h/ H 5 c$ \) ^, Q& z
// Create the list of simulation actions. We put these in V( v2 U" R4 _: R
// an action group, because we want these actions to be
' k$ T7 l$ ?/ G3 n5 Q1 o // executed in a specific order, but these steps should
- i4 i9 l5 {, ?5 y% @ // take no (simulated) time. The M(foo) means "The message
1 d7 F! Z0 {+ H3 f a // called <foo>". You can send a message To a particular
& ~. { J; R8 l3 Q2 U5 l, V# L( G7 x // object, or ForEach object in a collection.
$ h) `: H- W1 t V : T" a# Z( L& n( T
// Note we update the heatspace in two phases: first run* b/ I8 x! y4 G1 P; n: M+ y$ i
// diffusion, then run "updateWorld" to actually enact the) p7 x% ?7 m- R, f. f
// changes the heatbugs have made. The ordering here is2 [6 h8 j' ?0 m- a
// significant!
. J7 v* }4 R; r2 A- M
6 f4 ]9 ?% U: K A/ i" z: b. e // Note also, that with the additional
" ?' p ?2 G# O; K/ u2 ^3 L: g // `randomizeHeatbugUpdateOrder' Boolean flag we can) u, b4 h S+ g
// randomize the order in which the bugs actually run9 \2 f1 S/ u: T. y
// their step rule. This has the effect of removing any
; [3 s/ t/ W* q5 v6 B) f& e // systematic bias in the iteration throught the heatbug' A2 _# F) F7 `2 f
// list from timestep to timestep
" a8 u8 w( |& [1 P
) N% O0 _9 P, e8 K8 h // By default, all `createActionForEach' modelActions have
; h, c! {2 _, i // a default order of `Sequential', which means that the
$ G: K) W, k: O5 e" c // order of iteration through the `heatbugList' will be
+ a8 S7 j5 U7 R; `+ N6 S9 Z // identical (assuming the list order is not changed% u( N% U1 I* ~5 ~$ }8 v
// indirectly by some other process)., W! |5 b! K1 J8 T
: R9 M- \+ P0 ?9 T& S, r6 {: v modelActions = new ActionGroupImpl (getZone ());
4 @; {/ y( }$ R- \7 V0 k" ?2 b+ {7 L& R9 ]" g. H& ~6 m
try {% Q; h1 B; ?3 P+ a0 ]
modelActions.createActionTo$message3 \5 Y/ x9 c3 v; V' D* [ J! P
(heat, new Selector (heat.getClass (), "stepRule", false));3 Y; {1 u' }- k0 p( m% d4 B" \
} catch (Exception e) {
; n& H# [# C+ R System.err.println ("Exception stepRule: " + e.getMessage ());* O2 e$ v# g# M0 J& `) L8 E
}
# A( i% X# J& t8 i& {
5 R y2 [ G4 S& V1 @4 p' ` try {; S# D6 u* b! t# Q9 O
Heatbug proto = (Heatbug) heatbugList.get (0);
- K) `: _% l) y$ W Selector sel =
, g/ W' g* J, h new Selector (proto.getClass (), "heatbugStep", false);
; ~- W5 ^5 y7 g0 ]5 ^ actionForEach =" H! G7 G: ^: J) @9 h+ R; z
modelActions.createFActionForEachHomogeneous$call9 o9 Z9 o# K8 n2 o: Q W3 m
(heatbugList,) j- J" X r" U3 w7 N" P+ T7 C* s1 i
new FCallImpl (this, proto, sel,5 g# o- g* @: Y: d- }" h! a
new FArgumentsImpl (this, sel)));; | s* A. ?% J* ?! ?( S
} catch (Exception e) {
9 k: Z/ Q, U/ {) Y e.printStackTrace (System.err);
8 h( ?7 |; R2 n. W0 U }$ M4 h2 z5 v& t9 @3 z
, E4 C' Z( r& e2 t
syncUpdateOrder ();; g8 }9 p7 @% K: L
( T c. P7 S, m4 j
try {3 h6 y- o: e) z
modelActions.createActionTo$message 2 G) d. z+ G) f% s
(heat, new Selector (heat.getClass (), "updateLattice", false));
( v9 g( e! J' Q5 r% @ } catch (Exception e) {
Y9 }" I0 \" {( m* C$ n System.err.println("Exception updateLattice: " + e.getMessage ());
9 H u% L1 p/ j }
/ X' j" u/ n8 b8 H7 H
2 z( r" A( s4 [6 A7 D/ Z) y // Then we create a schedule that executes the
3 Q# F* @4 P: F; ]* ~; ? // modelActions. modelActions is an ActionGroup, by itself it
/ |6 f6 j3 m* x2 E4 p9 c // has no notion of time. In order to have it executed in
+ H, T7 _. p$ w // time, we create a Schedule that says to use the
. l0 i1 ^/ A6 T0 k) G) t- e // modelActions ActionGroup at particular times. This9 d% }5 @$ B, w3 p0 Y( l+ l) v
// schedule has a repeat interval of 1, it will loop every: v" y. l F {) N6 E8 g- n
// time step. The action is executed at time 0 relative to
( e, f% B+ t; C7 h // the beginning of the loop." Y( y! v( o! g* \# {9 ]8 d
; k) J W/ m; ^4 }
// This is a simple schedule, with only one action that is' D4 a. Q4 ]8 K D) L+ v
// just repeated every time. See jmousetrap for more
+ z" ~ ?& | k7 P6 ] // complicated schedules.
6 n+ K5 @% C9 L. C" t
7 O7 B! y' ?, s+ ^3 q. } modelSchedule = new ScheduleImpl (getZone (), 1); H' i3 K3 M/ C
modelSchedule.at$createAction (0, modelActions);0 k6 t/ x9 D& Q1 N
" u" |& n1 G& m! A9 c. i9 j& R6 E return this;+ h# a; G+ @- a
} |