HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 c3 [5 _6 X" r. r7 Q5 C8 U8 m
, h' ~8 E! G$ A0 I* Q public Object buildActions () {( D4 M0 x( d% \ E: c2 y2 e0 I
super.buildActions();. h; L8 x$ G5 v1 _) S
( v4 d; p8 f3 v& N1 t, p
// Create the list of simulation actions. We put these in0 I- J) l) `& R T/ p( |6 O
// an action group, because we want these actions to be
2 ]! f3 M W9 j" L+ I // executed in a specific order, but these steps should
" ^2 @2 r, h5 u+ g // take no (simulated) time. The M(foo) means "The message4 N9 z7 K$ S3 v
// called <foo>". You can send a message To a particular
5 X) Y J3 w' [9 s // object, or ForEach object in a collection.6 c9 P. e0 A2 x3 x7 I8 c" }3 w! J
( H4 v, O+ L: b" U
// Note we update the heatspace in two phases: first run
3 h; g0 `0 t: w) X3 _, w; t // diffusion, then run "updateWorld" to actually enact the1 l- K: s% s6 N7 \; t- {7 ~
// changes the heatbugs have made. The ordering here is0 e, u0 U a A2 r
// significant!5 g, d' M: S! ?6 R; S- ` I+ i
0 L8 v# n5 t. n, B w
// Note also, that with the additional
% d6 F5 g! X/ Y& T- j: H3 f // `randomizeHeatbugUpdateOrder' Boolean flag we can2 G6 C" k4 Z' R4 A! _
// randomize the order in which the bugs actually run% T2 _: X$ w+ |8 W" X/ Y& m
// their step rule. This has the effect of removing any
3 }3 |, { o# o6 o: z2 N // systematic bias in the iteration throught the heatbug" `7 N; H' y$ p
// list from timestep to timestep
% ^* ]8 c2 E- w& t9 }! h
5 e Z" e5 C/ Q2 e* c // By default, all `createActionForEach' modelActions have, E& g3 M1 X& p0 Q+ j/ M* y
// a default order of `Sequential', which means that the
t( d) N) W1 M4 C! L/ @7 @- E // order of iteration through the `heatbugList' will be; R. Y) Q6 v2 G' a# A, ?
// identical (assuming the list order is not changed8 I6 h8 v' Z9 s6 _% _& {9 z
// indirectly by some other process).4 q& w3 g- g3 S3 N* K0 [* T
7 o6 q Q9 Y4 W. d8 S! M modelActions = new ActionGroupImpl (getZone ());
$ l+ q# }9 Z0 k0 c5 n$ ?1 [+ {6 U+ e& g8 r. J# a
try {$ @3 Q. k2 a2 U- D f* X
modelActions.createActionTo$message1 ^/ u6 f- ^7 }5 A8 Z. ?
(heat, new Selector (heat.getClass (), "stepRule", false));( _! {, `: N1 `* P; ~" f* [% o) ~
} catch (Exception e) {
0 U; U) r) j: o+ b0 t& l5 W System.err.println ("Exception stepRule: " + e.getMessage ());0 h" W$ |* a' r# D% ?7 V2 a
}0 v+ \, d6 n; B, P, m) Q6 D t
, x' G5 y& u' `- j2 h: ^ try {9 e) q$ Z9 h1 t/ @3 n" T% j
Heatbug proto = (Heatbug) heatbugList.get (0);
0 k( k8 O+ ^7 j* L Y* |8 ]! F Selector sel =
# E$ N: U0 @2 D5 y6 I' P+ G new Selector (proto.getClass (), "heatbugStep", false);
+ x9 P+ j' Q: D2 s' D2 ? actionForEach =
, [. p, t- h- P7 |1 F$ Z modelActions.createFActionForEachHomogeneous$call7 [4 y7 U; T, ?1 D0 B! `8 |
(heatbugList,
6 K' b5 m: S3 m( Y new FCallImpl (this, proto, sel,9 }+ m, M: ] |- X/ ~" z
new FArgumentsImpl (this, sel)));
5 b! }! l+ ~$ R } catch (Exception e) {
+ ~ @/ R @( {8 U$ s# V e.printStackTrace (System.err);
# {9 t1 y9 B0 w2 ~. H1 K2 u0 S2 O2 { }
+ c& k9 F/ x1 ?# p, j: X4 ? , b9 j7 l/ T/ n: R# Q/ Q9 ]
syncUpdateOrder ();3 o) ^ R) N4 P
; {5 m- \" N. @+ M3 m% l; _/ m
try {# t6 \( V, F: K( K- s" |
modelActions.createActionTo$message 8 |( u1 R; S0 v* g6 T2 L' G8 M) j
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 m8 c9 v) _) @1 K& `) l" G. Q9 y } catch (Exception e) {" e8 N/ w& Y' n! P @. L) ?
System.err.println("Exception updateLattice: " + e.getMessage ());5 c0 @7 C" M ]5 j9 O
}
1 u) S- j' r! H; h9 V
h( I3 L8 D5 z- b // Then we create a schedule that executes the
9 ?1 ]+ ]# a% `* y7 t* Y // modelActions. modelActions is an ActionGroup, by itself it, C% U: r" X W, s; r4 r
// has no notion of time. In order to have it executed in
7 m8 [# I# M7 \( H. g0 T) r // time, we create a Schedule that says to use the: L/ \! h g+ s9 q& g) k
// modelActions ActionGroup at particular times. This
8 ]+ M& ~- U# s% q // schedule has a repeat interval of 1, it will loop every
6 Q$ J- V/ X$ R# `6 E: P+ g // time step. The action is executed at time 0 relative to& @ S8 |' H! d8 I% y3 X
// the beginning of the loop.2 b8 M- n1 o9 c! q2 D
& p# J6 s/ g5 W& [$ ] // This is a simple schedule, with only one action that is6 [, R8 X6 m. V' L2 b5 N
// just repeated every time. See jmousetrap for more, r9 U: I) `9 G! Z+ ]- R1 H
// complicated schedules.
" w" M4 }* Q/ q3 O. h' W
s& I# P* e5 S" F modelSchedule = new ScheduleImpl (getZone (), 1);* I( d* Y6 \9 ~3 p; A
modelSchedule.at$createAction (0, modelActions);" R5 L/ ^: n4 F* v0 Q( ?
/ G4 w2 ?3 G" ~1 p
return this; E: e/ g. z. E+ ]! F
} |