HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ N- Q6 J! O! n
- r, m/ q7 Z! f; W6 c. b5 @
public Object buildActions () {
W! p: r5 o; F: M$ z8 K super.buildActions();6 p+ B& L. ^- E) A3 k
" F3 \+ v# D1 U/ g. R. p: M9 f$ m- n& q // Create the list of simulation actions. We put these in; h$ u! }' K1 U* U, S+ J8 `* s
// an action group, because we want these actions to be
8 K$ ~+ F( e0 Z: Y5 R# Z // executed in a specific order, but these steps should
# [7 f$ X( k$ a // take no (simulated) time. The M(foo) means "The message9 ~0 S9 ?7 N8 |# @: L7 Q
// called <foo>". You can send a message To a particular
2 @3 C. u0 y0 `/ d$ c // object, or ForEach object in a collection.
9 `9 T) I- l- n0 Q0 c
9 A/ i5 j% Q: W# m9 Q4 Q // Note we update the heatspace in two phases: first run
& C; o0 Z# W# X# N6 I+ l // diffusion, then run "updateWorld" to actually enact the, x8 t. Q2 G7 K0 s
// changes the heatbugs have made. The ordering here is
0 t* d' l8 D$ q' V" Y // significant!$ M' `: y# C5 D4 \% h& a+ C
6 s% [% p6 M; r) {3 \ // Note also, that with the additional
2 q/ C, z% P$ u5 P! B // `randomizeHeatbugUpdateOrder' Boolean flag we can
% K' e/ F0 r: u2 a1 H0 A, g# G1 ^6 U* e // randomize the order in which the bugs actually run
: N, D3 y: G" X: t$ v) _ // their step rule. This has the effect of removing any- ]2 L2 |; N2 R, K) \* A5 \
// systematic bias in the iteration throught the heatbug4 n# N- t: O' y5 G
// list from timestep to timestep
B1 ~. |0 Q0 E, k* Z2 \
# E+ C7 ?1 B* \; r; [" N! W6 b6 t* y // By default, all `createActionForEach' modelActions have
0 W0 ~0 A E; W4 ]1 r! Z // a default order of `Sequential', which means that the
2 [1 p) A: m- L+ N // order of iteration through the `heatbugList' will be2 b& ~% |8 b; R" w$ S/ `
// identical (assuming the list order is not changed/ k& `- i6 k7 q" P( s
// indirectly by some other process).1 `+ l- ?! H0 y Z6 t @: f2 G
# W6 l$ m! r5 i! c: U modelActions = new ActionGroupImpl (getZone ());
3 a0 _' W3 y9 J+ I9 B3 y/ {" P5 Q( E6 s
try {
$ Z, f+ |# \+ X7 B% D- ^; g, A modelActions.createActionTo$message0 K6 K' L/ f6 F+ W. r
(heat, new Selector (heat.getClass (), "stepRule", false));
6 m) b) f4 h* W. e% f } catch (Exception e) {
9 i% k9 g6 n6 ~ System.err.println ("Exception stepRule: " + e.getMessage ());
7 @: q3 g6 @, S# i& w }
+ [- O G% F7 t' [% b6 u* c0 k) X. N
& ~9 X/ l0 Y4 @( ?6 g try {
$ w& E: D) I2 S, `9 | Heatbug proto = (Heatbug) heatbugList.get (0);) ^3 d4 M G! a4 i& ]
Selector sel =
v* t7 [! E: A new Selector (proto.getClass (), "heatbugStep", false);1 c0 ]9 z/ t- k4 f% t" D) H
actionForEach =
- F7 k }! B; U, x modelActions.createFActionForEachHomogeneous$call
9 k3 w+ K. H( C0 S, Y: x0 F% J6 m4 y (heatbugList,$ \! {4 O+ \! n/ j$ b4 H
new FCallImpl (this, proto, sel,; `# F7 N b$ w! v9 K
new FArgumentsImpl (this, sel))); p% b+ \* @* I# ]6 u
} catch (Exception e) {
* r: }% [# c& t( g( w& H6 J e.printStackTrace (System.err);
( ^$ s% n. E6 F }1 e5 X8 j5 `) ]: Z+ M3 \: T9 i
3 M( P' W0 [; ?% P syncUpdateOrder ();& j* }* j" V5 Z
8 S$ o n- n+ p. G, c4 ^+ v7 ? try {$ ] S9 q/ n x5 [7 m; T4 i# q; j
modelActions.createActionTo$message
! X5 P8 H3 m% ]3 \* U (heat, new Selector (heat.getClass (), "updateLattice", false));3 m+ y/ j2 ]5 V" d9 y+ X
} catch (Exception e) {- o% _# | H2 Q
System.err.println("Exception updateLattice: " + e.getMessage ());
1 C2 L; Q! M% d5 @0 s/ Q. h& G }
2 }; h& Y8 u& ]# R8 P3 [- n4 ~7 M 3 ]7 v$ Z- d: V5 \
// Then we create a schedule that executes the0 i4 F: v; Y0 L4 C8 A& l
// modelActions. modelActions is an ActionGroup, by itself it
* ^: B& l7 ]% r0 i+ Z6 w# H" M& j F, O // has no notion of time. In order to have it executed in K5 N$ `" z0 m; N. e2 N
// time, we create a Schedule that says to use the0 D7 V( h' [" _" S# Q) V2 [4 J5 S
// modelActions ActionGroup at particular times. This
; q; o4 |4 e2 |3 P2 h // schedule has a repeat interval of 1, it will loop every
$ s7 a6 W3 g! j" Q. K' l; K // time step. The action is executed at time 0 relative to$ {& C1 t. V$ Q, q0 i5 Q7 ]: y5 u
// the beginning of the loop.) V/ Z- ]- D! c. @5 Z
0 N, i. U' x! i
// This is a simple schedule, with only one action that is/ q$ ^0 H1 T T" p$ Q
// just repeated every time. See jmousetrap for more
7 x# J8 R* V# y2 J // complicated schedules.
8 N) ?+ B* @; N- c( {: _* V8 @ 0 Q& G" x1 z5 r" v2 ?; W
modelSchedule = new ScheduleImpl (getZone (), 1);, j ]& }% }+ Z N- v- E" B
modelSchedule.at$createAction (0, modelActions);
+ H1 P2 N2 ?( B% }$ }' Z' t
: Q7 ^3 |; o8 J1 ~+ q return this;
! i% j$ p; p$ _9 k5 e7 j: Q* t } |