HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" d2 j) p' A* }2 E, n9 n8 t9 _. B" }
public Object buildActions () {
7 G6 z! p- M# U, a8 n7 { super.buildActions();4 s7 e2 B6 t5 D1 @
) P( C9 ^. v6 t9 s5 e
// Create the list of simulation actions. We put these in( {$ m3 F$ a0 E% I! [
// an action group, because we want these actions to be: r& C. N! n" H7 _( \8 D6 z
// executed in a specific order, but these steps should
, f; u2 ^8 `, u/ l; A // take no (simulated) time. The M(foo) means "The message
1 R L X# e0 m: Z // called <foo>". You can send a message To a particular
9 P! ]% w2 T" n4 z2 u // object, or ForEach object in a collection.
9 S' S( G/ d% d M# q; R# n : p% _9 B3 w# X# x5 u) y
// Note we update the heatspace in two phases: first run- y" K. H4 l) ^( l
// diffusion, then run "updateWorld" to actually enact the K4 Q, |# |& x V; h; I$ W5 `
// changes the heatbugs have made. The ordering here is3 `3 s3 Y; s1 [5 N! W3 {$ l$ ~
// significant!
* E" g# y% P' P5 m; Y9 B - j6 e! p' R' Z c- ~" _
// Note also, that with the additional, o5 V2 X0 N* L. I) j
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 q* c7 N4 f) B y. M: b
// randomize the order in which the bugs actually run
8 I( J* L; S+ O; I. C; p // their step rule. This has the effect of removing any
; q2 ]) C J2 e // systematic bias in the iteration throught the heatbug4 x& n0 C1 K! M0 z# q
// list from timestep to timestep0 q. _( I% J2 H
0 A, P" }# n8 p/ I% x/ K- N+ @4 A // By default, all `createActionForEach' modelActions have
$ Q/ _# R1 W. C! M% q0 y // a default order of `Sequential', which means that the, ]8 Q t7 R% D; r0 H3 z6 V
// order of iteration through the `heatbugList' will be
1 Y8 A$ P4 w; J1 r# f7 E) ` // identical (assuming the list order is not changed6 R: u$ T1 C) C$ L( u) B' A
// indirectly by some other process).
% |7 p2 w7 Y$ r% \9 {
2 P- I. a; v+ |3 f" Y3 z5 R modelActions = new ActionGroupImpl (getZone ());
; k& l) R2 I. Z' E8 @( E% A6 t! y) \
try {
- K0 I+ _% l. U4 E4 F modelActions.createActionTo$message
. l# J6 C/ u6 u1 I& T# D% x! X (heat, new Selector (heat.getClass (), "stepRule", false));
2 N2 d7 x5 w/ K5 i) O& C } catch (Exception e) {" O' S7 }& W& g1 _1 V3 R
System.err.println ("Exception stepRule: " + e.getMessage ());
( \9 M7 p5 _9 g/ r& M+ K% [ }
7 Z7 w2 p7 H6 o8 V
4 h2 q8 _2 @0 o; c2 Y) G; G2 c try {
7 E) l0 b/ u* ~ Heatbug proto = (Heatbug) heatbugList.get (0);6 m; o- V2 ^& _( n6 Y5 q$ n
Selector sel = - C$ D1 P1 t9 ^
new Selector (proto.getClass (), "heatbugStep", false);1 t5 F0 p0 e# M8 S( x% n2 @. i
actionForEach =
" ^! \ H& C; x4 b. x- d modelActions.createFActionForEachHomogeneous$call
& Q \+ O* k8 B7 Z8 u (heatbugList,1 P! f, w2 [' B+ Y& Z
new FCallImpl (this, proto, sel,
X1 U0 K4 D, d; A b7 o new FArgumentsImpl (this, sel)));1 |8 Y) p7 I' I+ I! ], g
} catch (Exception e) {; \% a( `. S' T0 C; h' O+ e
e.printStackTrace (System.err);0 v: g, S4 f5 F! T9 a- N+ u' G( \
}
3 E* i9 k" K. g- r t- {, {
0 R# A8 z9 E- ^ syncUpdateOrder ();
0 }$ _+ i2 b8 F3 F) e
* \. _0 j6 [( O/ @) k e try {
5 P; W, P1 b. M modelActions.createActionTo$message # f2 X) N- k$ A/ }, k& q# c) x
(heat, new Selector (heat.getClass (), "updateLattice", false));) L" Z! M- ~$ p+ Z0 G, T; r
} catch (Exception e) {2 `8 J# f0 z( d& j* I9 a: k
System.err.println("Exception updateLattice: " + e.getMessage ());" S, b" b! d$ K) A4 n) X
}
0 B& I% w' G3 t* Y
$ @7 t2 a+ P/ u // Then we create a schedule that executes the
0 _8 B F* L, `2 ` // modelActions. modelActions is an ActionGroup, by itself it& K h* e. |# r5 F
// has no notion of time. In order to have it executed in" p$ _0 e' v- `/ n8 ?. h: R
// time, we create a Schedule that says to use the1 C2 f6 _/ T2 \5 i" v
// modelActions ActionGroup at particular times. This" c. M$ I2 S! g" f
// schedule has a repeat interval of 1, it will loop every
3 w$ {! ~' d: a# m$ s& k: o // time step. The action is executed at time 0 relative to
/ b3 G2 ~; v4 P# n // the beginning of the loop.
! S( _3 @- S3 ^" Z" O) h U# ]1 b/ E' k$ {( v
// This is a simple schedule, with only one action that is
% @9 b2 `! ?: r6 a3 F$ o+ @ // just repeated every time. See jmousetrap for more, X* p! p" ~- c
// complicated schedules.
- c9 y/ d9 y/ T5 u1 K. D/ i9 T, N
1 d1 }( d6 a: r0 I+ U1 \/ X' a modelSchedule = new ScheduleImpl (getZone (), 1);: O; x- t+ R" V
modelSchedule.at$createAction (0, modelActions);
6 P- r" \7 D! I$ U" G4 \
- n" s# L4 F# O% S7 n/ z return this;
8 B# E# c: r! `( v/ t } |