HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 A( S0 P2 s$ k- Q5 j
, p$ }& L8 a: z" T% z public Object buildActions () {+ t$ I8 W: { R" g
super.buildActions();
3 ^5 R7 p! g* p+ ] 2 T1 s* j! |" o; ^# D c
// Create the list of simulation actions. We put these in4 y4 Y% w4 c! x( ~
// an action group, because we want these actions to be
% W- Z9 G# N/ j0 }# ?- F // executed in a specific order, but these steps should) Q$ B* w4 N L: a
// take no (simulated) time. The M(foo) means "The message" N2 g5 L" y1 ^2 U& R9 g) q. d
// called <foo>". You can send a message To a particular$ u' @# d8 L. E5 h
// object, or ForEach object in a collection." J, y; [$ m1 ^* o4 ^5 \0 a
: \: b- J. O; @9 h/ b6 r // Note we update the heatspace in two phases: first run- G( ~1 N3 F8 [1 Q0 M# T, ]
// diffusion, then run "updateWorld" to actually enact the" v! z) M* S @3 m! q
// changes the heatbugs have made. The ordering here is- @5 T7 q4 d' h8 b
// significant!
4 a" F. ~+ _' g 2 z/ b3 b g% k, l" }7 [! k
// Note also, that with the additional/ @7 j$ P2 k! Y( C. ?$ X6 r3 ]5 ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 _" N2 Z+ M' b4 {0 K, K" n // randomize the order in which the bugs actually run
0 U6 k6 J5 _) G9 B0 ] // their step rule. This has the effect of removing any6 M1 t) ^& {* t6 w2 X3 z0 `
// systematic bias in the iteration throught the heatbug, k, |6 B5 _! r1 M/ t4 X) j
// list from timestep to timestep1 ^: q: J2 E$ R. a0 P
1 P4 V9 K; Y$ w% `. ~' d2 b7 y
// By default, all `createActionForEach' modelActions have. h! s: P4 }6 P
// a default order of `Sequential', which means that the
1 Q) C& I1 M# Y" @; }5 V8 Z // order of iteration through the `heatbugList' will be6 |8 e) S8 ^1 ], q
// identical (assuming the list order is not changed
$ S/ e) L D, L' B% Q! _& i // indirectly by some other process).
. c' v( q) T) e" d' D% } 0 V! {+ ?( E9 o% \3 r
modelActions = new ActionGroupImpl (getZone ());/ a7 [6 ?) G, {5 r* \/ M
1 |$ I; k _0 d$ M @# g try {
2 _9 N/ R+ G. k2 n modelActions.createActionTo$message7 ~7 ^& f8 C) H: I
(heat, new Selector (heat.getClass (), "stepRule", false));
* w) ~3 E1 L+ D" a8 N- J } catch (Exception e) {
; L3 ~) F* f3 v) f System.err.println ("Exception stepRule: " + e.getMessage ());
: z5 t/ }$ Z& _/ N* {. B }
+ \4 G- f& I1 O: y6 b$ X% g3 A1 \) h9 \# Z
try {+ P: d' [; [; u: s0 m [
Heatbug proto = (Heatbug) heatbugList.get (0);$ C: ]: R: t' {; P
Selector sel = 9 [& n" M0 F6 ?9 q: h8 U
new Selector (proto.getClass (), "heatbugStep", false);
0 _6 U4 f# N0 D9 B actionForEach =
' d: h0 r4 C6 h, I9 _* l" W! W' b modelActions.createFActionForEachHomogeneous$call
2 f0 u" s3 N ~ J7 ]: L& n0 u (heatbugList,
* Z' w. B+ O& `& ?0 P5 Q4 b4 Y new FCallImpl (this, proto, sel,
) C0 W7 q6 h" f8 z3 G6 N* X new FArgumentsImpl (this, sel)));
5 r" I! @; w/ o8 T4 W, ] } catch (Exception e) {
6 v% Z* U$ `) Q7 f7 t1 V6 I e.printStackTrace (System.err);
, [' A6 t3 k% `7 D }) L- W, B j5 q6 j7 i- s
' H4 H$ n0 i B4 m5 A; { }/ n1 K
syncUpdateOrder ();
& t% d! u( o L7 ? n
1 @! }3 X& ~* T& o try {0 s# w) d2 F5 M& W6 c: n
modelActions.createActionTo$message
. R5 P( K( E/ A y3 L" q( Q' |0 H (heat, new Selector (heat.getClass (), "updateLattice", false));
9 I" K$ u, V5 x }( v+ d } catch (Exception e) {
3 D: t2 ~% P* g) V" n( K8 u System.err.println("Exception updateLattice: " + e.getMessage ());# q" f# R, w( s1 p" C { w; d
}3 G, k3 ^( m! M1 t9 @6 R
, A% M2 ]( r C" ?9 [0 v$ ?4 I
// Then we create a schedule that executes the
; O8 s$ P/ c7 b- d- G // modelActions. modelActions is an ActionGroup, by itself it
. k6 F" m+ M3 T4 d+ y9 B // has no notion of time. In order to have it executed in
* G9 ?4 `: W4 Y% V' ]- ~3 @ // time, we create a Schedule that says to use the
7 W. R5 i: G* [- E( j9 I0 }+ H* n9 C/ Y // modelActions ActionGroup at particular times. This
Q" d' K1 v8 Y5 d // schedule has a repeat interval of 1, it will loop every) I% r+ @- x8 F @
// time step. The action is executed at time 0 relative to
" `8 d; P1 A7 P \ // the beginning of the loop.4 ^/ E4 s' c* P% v' W% p
5 ]1 j0 A) M2 J9 f6 T3 s
// This is a simple schedule, with only one action that is2 h3 w0 d" a; T+ U- m
// just repeated every time. See jmousetrap for more, r1 c5 a9 F) D
// complicated schedules.2 y- l! N) E& q& c
. I) `* d2 m# n) A# N
modelSchedule = new ScheduleImpl (getZone (), 1);# {: I0 }* `% |
modelSchedule.at$createAction (0, modelActions);
7 f( C4 | N, w
8 I$ ?8 Z9 S: w4 p% y: G+ X return this;
' m, [, z. C' ?6 E: N } |