HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ M6 H- U4 U/ @. z; C h% t
; r% c, a8 p/ X
public Object buildActions () {' A+ J5 E; N# H8 Y; p
super.buildActions();
8 C: h) `$ [6 C6 @
; I6 U+ v$ i9 L& N( f; ?% [: J- o // Create the list of simulation actions. We put these in% W8 j, c# s; O6 ^: b0 y9 i- H
// an action group, because we want these actions to be
Z" z5 _& Y8 T' Q // executed in a specific order, but these steps should1 r2 e- Q: C$ l4 `+ p8 m9 K
// take no (simulated) time. The M(foo) means "The message
/ v B5 ?( h4 A) y' a // called <foo>". You can send a message To a particular
2 t" F' N+ z8 G- W0 C% \. ~ // object, or ForEach object in a collection.
: G9 U# ?" W: Y' u+ m) ~, I a 7 i# z$ N% n* a3 n# \) `
// Note we update the heatspace in two phases: first run5 N. Q& i! m$ I: }6 ~
// diffusion, then run "updateWorld" to actually enact the
% j. N7 `9 V" ~7 m( N) x4 z9 L$ H4 V // changes the heatbugs have made. The ordering here is1 M& O7 p: @7 ~. o9 S( ?9 ?
// significant!$ I. s4 u% s& f; e0 Q i
/ n1 ?$ U3 f' p
// Note also, that with the additional
1 \+ Z/ G5 |. r* E" i: W // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 D2 x6 E' u1 T! W" n // randomize the order in which the bugs actually run
! }3 [6 i! s5 p. S4 Y0 @ Q // their step rule. This has the effect of removing any* _& M& f; V8 n% j4 z! f; ^
// systematic bias in the iteration throught the heatbug& {6 w! o# t. \( o$ Y8 d
// list from timestep to timestep+ d/ F1 S9 _' O6 y+ B/ W& X4 S
& T* H. o3 }1 c; h6 Y3 A // By default, all `createActionForEach' modelActions have
: r& _8 q0 T% i$ d; p // a default order of `Sequential', which means that the1 `; \1 s" p1 t4 b7 ?; w
// order of iteration through the `heatbugList' will be
8 }7 r4 K' A, K, s, m+ V // identical (assuming the list order is not changed! L8 I a: L6 a; H: P, e
// indirectly by some other process).
+ a+ z( H4 l$ p r$ f* v7 P2 e) P; O' E
modelActions = new ActionGroupImpl (getZone ());
/ h. l! W* A7 \3 N* V. M" f" X
. h9 j$ w% u& I* h& r- T try {
0 K) l6 W3 ~# W: Z& q1 ?1 k, ] modelActions.createActionTo$message4 u& i$ E* N8 \& n
(heat, new Selector (heat.getClass (), "stepRule", false));5 H; _# L4 g3 W! ~" o9 ~6 C) x8 {# Y
} catch (Exception e) {& w9 E t8 Z7 s* n* P( N3 s4 g, K
System.err.println ("Exception stepRule: " + e.getMessage ());
- n0 _/ f6 O$ T$ R' [) `8 K* F }
+ U. P" T" Y& y; r, k v$ Z+ O0 O
7 G: a, e& R. g6 }( }5 d try {
; M& Q1 v" S% K; V: r; R Heatbug proto = (Heatbug) heatbugList.get (0);
( t: G( N. b- I Selector sel = # a# U; N9 M# x; i4 p
new Selector (proto.getClass (), "heatbugStep", false);
7 X6 K. z7 t4 N5 r5 ~- K! m actionForEach =" e' K: v. w, b. n4 n0 @
modelActions.createFActionForEachHomogeneous$call
6 U: z- x7 g& n4 T5 Q; r (heatbugList,
7 h& d* z4 n5 K) v: a new FCallImpl (this, proto, sel,% u% a- F' C, t9 I) U' ]
new FArgumentsImpl (this, sel)));
, ~* j6 X& u" G) }+ y+ i" u( \ } catch (Exception e) {
2 G/ S S8 f7 N+ v& o8 r3 @ e.printStackTrace (System.err);
2 c1 L g8 m; {/ C }! Q) H% Z5 y# Z G1 B( ^) B
: V L O7 ?1 x: }
syncUpdateOrder ();
4 Q/ Y2 Z1 p3 v, |3 ^! o/ d+ |+ k
try {
5 R+ S0 d; H, p modelActions.createActionTo$message ' N! E% k0 ]( l
(heat, new Selector (heat.getClass (), "updateLattice", false));" @7 W8 a- N2 g1 e3 J
} catch (Exception e) {) L' I( C2 E3 f
System.err.println("Exception updateLattice: " + e.getMessage ());6 O7 o( o: m7 {1 q# _& }+ R9 o: J& E
}6 U6 o: L; D. Q" e# q& ?! ~& `
( Z2 B4 I. |8 L! [8 x/ d
// Then we create a schedule that executes the
9 W4 J1 A: K* {3 o; [0 h F // modelActions. modelActions is an ActionGroup, by itself it" H# h* K: m5 v+ J
// has no notion of time. In order to have it executed in, o, t7 a I$ Z# _1 I4 c9 R/ o2 e
// time, we create a Schedule that says to use the; ?' V* m: l. H4 J8 _: \( K. U; k3 F
// modelActions ActionGroup at particular times. This: @, l" t, Y" x4 s3 o0 E$ L8 D
// schedule has a repeat interval of 1, it will loop every5 {% i* t; T" k: n2 h2 R+ |3 P
// time step. The action is executed at time 0 relative to
4 G: L& ~6 D y1 ?0 h // the beginning of the loop.: O8 _$ D8 ~! [( ~
& k. a- n S' T* E/ X
// This is a simple schedule, with only one action that is
/ h. I4 C, Z) m# n: F8 h/ o // just repeated every time. See jmousetrap for more& c0 x- A1 F( X5 J- [' P
// complicated schedules.
. ?- v1 \; B [# }3 p6 r# S4 x 0 {# m* v3 y2 q. l
modelSchedule = new ScheduleImpl (getZone (), 1);* r5 e9 P; P4 k8 D1 p8 n0 O; J
modelSchedule.at$createAction (0, modelActions);
) g' y' P( ]) c7 Q! p% O- E 9 c6 R' `# @! o; @+ [
return this;
& R$ M2 A3 Q7 h: m. ^ |# N3 A } |