HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 i1 ] E1 L! B
: K+ [% i; c+ T8 P5 ^- E! S5 W public Object buildActions () {* X1 r/ C) b. L8 [
super.buildActions();
. ^* C; R% A; R* K+ y
+ A. N) r0 F4 G& p+ s6 k2 W) f. t // Create the list of simulation actions. We put these in
1 G. l8 \: P7 _+ N // an action group, because we want these actions to be) Y5 s5 `. |) g
// executed in a specific order, but these steps should
0 n- ?5 I% N% `! W. I- l2 Y // take no (simulated) time. The M(foo) means "The message
" i0 f5 {# I, M2 d: _, l // called <foo>". You can send a message To a particular3 \0 f! o* [* h$ ?. \2 f* f7 a
// object, or ForEach object in a collection.
f8 H" c: T6 K w f/ i0 X
+ l% q( O" v' R3 M // Note we update the heatspace in two phases: first run
8 a, k& R C" w // diffusion, then run "updateWorld" to actually enact the
3 ^* i0 V; O1 B! m2 }/ g. c // changes the heatbugs have made. The ordering here is
3 n2 u3 f5 Z) V; L9 C // significant!
( m& u k, P5 E' [ # G, U0 I% x0 _, y- r- @% @
// Note also, that with the additional
3 t, A; l# o) {: z // `randomizeHeatbugUpdateOrder' Boolean flag we can3 w7 j1 M/ l& {/ s
// randomize the order in which the bugs actually run0 S+ N( D* T8 {0 C, [, C2 z6 v
// their step rule. This has the effect of removing any8 r+ A& y/ r; W# S
// systematic bias in the iteration throught the heatbug4 K5 I! h3 ?7 M
// list from timestep to timestep2 A2 L2 I" W: ^6 |7 d
1 Q$ K. W- l; L- [ // By default, all `createActionForEach' modelActions have4 x' ?7 ^. U/ i# M2 z1 U' l
// a default order of `Sequential', which means that the
% ]# \7 }3 T" O! ^/ f! h K" M // order of iteration through the `heatbugList' will be
* `8 x3 s' W v: {1 H7 _/ m$ q // identical (assuming the list order is not changed2 }5 c& _: N# \6 t5 Q$ q
// indirectly by some other process).
* ?) C- u* z% f) r
7 s, \6 N: Z4 f1 i# U7 `! X/ x7 M modelActions = new ActionGroupImpl (getZone ());9 y: w7 L/ g1 r1 x0 R
0 k* }' l) ]2 p7 s- o# ?
try {
4 b1 D% z9 H- h* h6 a modelActions.createActionTo$message
: b/ d* e1 W' g' E5 D (heat, new Selector (heat.getClass (), "stepRule", false));
5 f! s5 t& r) M5 F( s) N& n0 L8 { } catch (Exception e) {
+ K" X4 K7 s+ { v System.err.println ("Exception stepRule: " + e.getMessage ());+ h; G `8 H6 x$ {: ]
} b, _: k) C! H* n' V* h4 M
$ V7 w3 V* m2 f# z) v
try {( A7 E5 K% y/ Q4 }' m* t
Heatbug proto = (Heatbug) heatbugList.get (0); I: B8 b4 P5 |/ w: @
Selector sel = # H8 ? L/ { j1 U0 g3 r
new Selector (proto.getClass (), "heatbugStep", false);! i1 V/ j& g# I+ a0 u8 Q6 h* Z( w
actionForEach =4 j8 v8 B9 M. r, F
modelActions.createFActionForEachHomogeneous$call
" z4 S- i4 s, F7 v! n& ? (heatbugList,; |/ N9 @. K9 Q8 L
new FCallImpl (this, proto, sel,; E2 _9 Z. w- [% W; o
new FArgumentsImpl (this, sel)));& ?- Z& p- g) w3 D0 ~
} catch (Exception e) {
) w6 {% O: {. t" K& u$ d e.printStackTrace (System.err);; o4 ?0 b, L& A0 E
}
- r1 S9 }$ q1 V h6 a3 u
3 t# g7 n7 z/ B! W0 k3 v4 _/ J syncUpdateOrder ();
9 G& @) h l) {9 f% w3 g6 a- X4 A, e
try {- W* [1 V3 m& I; }+ d
modelActions.createActionTo$message
: ~& @8 o6 @% E5 N9 b3 e (heat, new Selector (heat.getClass (), "updateLattice", false));9 [3 i. G9 [/ R
} catch (Exception e) {: g0 P# F4 m" b2 n
System.err.println("Exception updateLattice: " + e.getMessage ());- M* {7 V( j o4 k
}( {( e+ |# u5 v1 J, y$ D/ Y
/ J9 ^6 s9 e# N# B
// Then we create a schedule that executes the9 J3 q& Y7 R: q& j8 C
// modelActions. modelActions is an ActionGroup, by itself it
% T5 z+ J' i& j( e& q+ L // has no notion of time. In order to have it executed in
4 ?4 B4 S: }! R4 j // time, we create a Schedule that says to use the0 e0 c* }/ t* V* L0 Q
// modelActions ActionGroup at particular times. This
; i. q3 e2 l: R3 p0 w: S' x // schedule has a repeat interval of 1, it will loop every
# N8 a) q! p& D. }6 m# K // time step. The action is executed at time 0 relative to
* V! ]* j- Q/ p# \ // the beginning of the loop.
1 \, c2 o% Y5 ^% h8 t1 m% e/ Q3 J3 s* V: ^. z0 Q
// This is a simple schedule, with only one action that is
! H! h+ p* i! J+ B7 D // just repeated every time. See jmousetrap for more
, N4 h, I V2 w/ w! N // complicated schedules.
% d Y3 J. X+ b# J" M 8 g, c" u" X6 h6 j
modelSchedule = new ScheduleImpl (getZone (), 1);
3 v) c2 T% o" O3 X* I3 t5 \4 n modelSchedule.at$createAction (0, modelActions);1 U1 r I- G) B4 g1 k. L
1 i8 H0 r' l3 g- V- z. Z- k return this;( w& t# `" R/ F0 S* ]
} |