HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 ?0 [) W+ {) i& _4 T; V$ r( Y5 j# @
public Object buildActions () {0 V; e( B' g5 b& K8 W
super.buildActions();: C( F- ^$ i& c, Q O% f
/ J, T2 J1 Z4 b( K; V; N+ I // Create the list of simulation actions. We put these in
; \: z1 m: o0 k, G // an action group, because we want these actions to be: [& b1 k+ R5 t; A- W6 Q7 q1 D
// executed in a specific order, but these steps should
8 B. w' [8 u- p! a" B" e+ I // take no (simulated) time. The M(foo) means "The message, P- j e+ v+ {1 B$ \, i, h, m; P6 ^
// called <foo>". You can send a message To a particular
9 B& v' l+ q$ H // object, or ForEach object in a collection.
/ z& S# r* J2 c9 `# U5 P $ W; E) `6 h6 g" P1 f/ U
// Note we update the heatspace in two phases: first run
/ `. U h, i5 e- q // diffusion, then run "updateWorld" to actually enact the4 a6 f0 k, @; r B7 L# n$ x+ y' V
// changes the heatbugs have made. The ordering here is; i9 S/ M% B$ ~$ q1 T/ ]( \& \
// significant!/ e" ]3 u5 h0 w; z) w7 p3 w
! o' H# G' D3 w6 O( L9 {6 V // Note also, that with the additional
/ u: y# b8 i% V: [! d& I* S8 C // `randomizeHeatbugUpdateOrder' Boolean flag we can; B- b9 P4 O. Z* G$ G e1 d( Q
// randomize the order in which the bugs actually run
; M) A/ c* I" B! C // their step rule. This has the effect of removing any: ~/ K' D) \# Y
// systematic bias in the iteration throught the heatbug
7 x& P" q! ?! }9 t Y2 V // list from timestep to timestep8 I" j0 s+ E# s$ l8 B
) A2 k0 N# O: m# N( g) p: o( | // By default, all `createActionForEach' modelActions have& Y' R) @6 s2 x* x
// a default order of `Sequential', which means that the
r. Q8 i% R4 h // order of iteration through the `heatbugList' will be( L8 l; m `) Y" |+ ?
// identical (assuming the list order is not changed
# F# ^0 e: w, y- t4 i: l2 ~ // indirectly by some other process).
& ]7 p1 I* V1 R 3 n* H! ]8 N! s' |& G5 N& ~7 a
modelActions = new ActionGroupImpl (getZone ());8 S) q! J( C; Z* ~, q) Z" ~+ y' _
\4 @! c" g% A3 B ]6 `, j% t try {0 _: p n& j# o# @! |5 C# E' e
modelActions.createActionTo$message
9 {' d% B( I! f (heat, new Selector (heat.getClass (), "stepRule", false));) `' \ d2 N& L2 L) ?0 c" i
} catch (Exception e) {
4 Z& A$ D' h3 I7 x+ U4 | System.err.println ("Exception stepRule: " + e.getMessage ());( U1 Y0 P4 W C) \1 O4 d, n5 Y
}
% O9 c. C' m! m1 p1 y3 @1 \9 f2 @' q8 }6 J" T5 P
try {6 Z. E3 y8 J4 O- w2 F* C6 @# ~
Heatbug proto = (Heatbug) heatbugList.get (0);& d/ w" R/ d$ K: l( O7 X
Selector sel = : {$ g0 d5 ~" }
new Selector (proto.getClass (), "heatbugStep", false);8 Y* p. t1 p( Q2 z6 _! m& T4 }: o3 b
actionForEach =6 M F* o" d( r: W) r( r
modelActions.createFActionForEachHomogeneous$call2 Z/ h: P6 a3 Z. _* K
(heatbugList,
) z$ Z* F) P: l8 O% W/ s new FCallImpl (this, proto, sel,
" O7 W' j6 {" O! v. c new FArgumentsImpl (this, sel)));. W+ s# M1 B- B5 @! W
} catch (Exception e) {
8 A* p/ [- } d4 x; @" q e.printStackTrace (System.err);9 h4 V. o: z/ A, H! A. }3 K
}
# V, P F, ~$ h( ^7 m
4 \8 X' T/ o" h1 n. K7 w syncUpdateOrder ();- Z' g. I7 `- n: c5 U: @
; v5 S* g! |4 a% h" m/ m4 ~
try {
, b3 {1 q6 H. i8 z2 M) x modelActions.createActionTo$message
* s1 h$ p# W0 | y (heat, new Selector (heat.getClass (), "updateLattice", false));
- a! E$ U6 }4 Q2 p9 H- |* S5 q) P } catch (Exception e) {
" c3 @6 v. g) \& s, D0 ` System.err.println("Exception updateLattice: " + e.getMessage ());! X. T$ N$ ~, {2 M9 g
}' x; N! U. u9 t8 x
# F/ _5 k) Q/ T6 B! f6 _ // Then we create a schedule that executes the5 i, W% U! m5 O* Y, a: ^) A; z
// modelActions. modelActions is an ActionGroup, by itself it/ ^3 \7 T+ g0 X' n. n; g8 ` r
// has no notion of time. In order to have it executed in
- T9 R" I/ n) X0 X$ Q // time, we create a Schedule that says to use the
' _. |7 u7 v5 q/ k; t, h // modelActions ActionGroup at particular times. This0 H" }2 N/ g. i. ?* `: |3 l8 x0 ]! [1 H
// schedule has a repeat interval of 1, it will loop every
+ m! u7 Y" b- @ // time step. The action is executed at time 0 relative to
* c+ t: U$ p1 d I e // the beginning of the loop.
* c" P; M* f' W2 { ~3 b
- @; F! L, _# B/ A // This is a simple schedule, with only one action that is- H; Y8 k( ?& w5 o+ @
// just repeated every time. See jmousetrap for more, L& h+ }# q* Y: C' c2 f
// complicated schedules.
0 |' M0 g/ V! Q
- K/ d+ l+ r* M9 r* [* Y: k/ o6 ^3 a modelSchedule = new ScheduleImpl (getZone (), 1);, @- W; m+ b$ w: I
modelSchedule.at$createAction (0, modelActions);# N" c: I: T& D
$ w1 y; c* i; T return this;
* \6 C# ~. w: `2 J4 I } |