HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 D! ^) D$ W7 s
c+ p3 {# }2 F7 e! l( S, }7 X public Object buildActions () {
& B4 O- W0 z, F! Q8 \ k) t super.buildActions();
6 [/ y2 D$ r& E9 n8 D s
2 o7 q2 f! h- Y3 g# C# P/ t+ E // Create the list of simulation actions. We put these in
- ~* G6 T; B9 O4 } // an action group, because we want these actions to be
5 K0 ?. ~0 I3 j // executed in a specific order, but these steps should% T! r: A V/ C# L- ]$ [4 I
// take no (simulated) time. The M(foo) means "The message2 t1 R! y' _! w& v
// called <foo>". You can send a message To a particular' A6 @0 g5 }* H$ ~9 [8 d5 Q8 [
// object, or ForEach object in a collection.) U5 m% B+ E u( ?
0 M0 [% S ]" f7 j2 s- y1 m // Note we update the heatspace in two phases: first run h: }/ E& U$ ^1 s0 t: R
// diffusion, then run "updateWorld" to actually enact the+ n+ _6 D6 N. m+ ]3 }' `. s9 i
// changes the heatbugs have made. The ordering here is, P5 `7 a6 z( q
// significant!
) {# F2 {' U, R% \ " q$ W. `7 m& b
// Note also, that with the additional
7 `( i+ l- s% u" U // `randomizeHeatbugUpdateOrder' Boolean flag we can, @6 q% h p* k% P* I+ F
// randomize the order in which the bugs actually run) i/ w1 ~% p; \* f$ H. G3 n# c
// their step rule. This has the effect of removing any% N% V' x& D+ U
// systematic bias in the iteration throught the heatbug7 b" j3 X1 q) E% K3 o3 B
// list from timestep to timestep5 G$ f7 n$ i8 E1 l! [' d# E( {
8 N1 e; O" E- R. U: K9 K8 V* G' |
// By default, all `createActionForEach' modelActions have
- q- ^$ k2 v" l // a default order of `Sequential', which means that the4 E2 i0 x/ p7 L9 t
// order of iteration through the `heatbugList' will be
3 E, y) q# E7 c' T- L( n) e* N // identical (assuming the list order is not changed( G6 ]6 j0 }4 {) e$ E- `' t
// indirectly by some other process).
5 J/ Q, p9 a' v. n- n ! | _2 G' X$ E
modelActions = new ActionGroupImpl (getZone ());( { E4 k# h% p) }! W* r, b
( z5 k! q' L7 b try {
* N8 I# x. j l/ i# j8 T1 K! f modelActions.createActionTo$message% G, b5 a2 V u
(heat, new Selector (heat.getClass (), "stepRule", false));8 I v! s% i+ k- N; s9 w$ ?6 D' ]
} catch (Exception e) {* h, g7 b9 W5 [) n" O' e
System.err.println ("Exception stepRule: " + e.getMessage ());
7 p8 }0 M. O% C! I% d }
. n/ Z9 X) V, n% W2 R( t1 _% b$ v, l! @% x5 I; q0 e0 S/ @
try {: H8 F+ T6 { ]5 J1 _
Heatbug proto = (Heatbug) heatbugList.get (0);
1 e1 j- J, S8 } u- M Selector sel = - A- G2 `! F' b( O& l
new Selector (proto.getClass (), "heatbugStep", false);
v! }7 z3 W3 O+ h8 j$ ? actionForEach =
0 A* @6 G4 ]/ H' M modelActions.createFActionForEachHomogeneous$call
% l; G( |* X$ Q( d (heatbugList,1 A0 X) y+ O- O$ }: ?0 F. |$ |3 c
new FCallImpl (this, proto, sel, E( }( y) y- i6 I. i$ U5 y8 v
new FArgumentsImpl (this, sel)));& [3 a) x6 j6 a$ M$ h# A
} catch (Exception e) {
0 c2 b. z- D( T3 S. x e.printStackTrace (System.err);
, v2 v1 L0 K* j& G [1 r; h$ x }
3 b" V( ^5 O! \9 | 2 q3 G) Q8 @" {: s) K D/ ^
syncUpdateOrder ();, g9 q& ]6 i3 {! }8 H
8 a* y q1 q! V2 p& e try {* H4 r6 E# Z) s& N
modelActions.createActionTo$message
9 p2 l- H! y* [# v! k9 O' [ (heat, new Selector (heat.getClass (), "updateLattice", false));
3 E1 ^) Z# x( l* P' u } catch (Exception e) {- M: k& w1 o" J5 u" i9 }8 G6 U9 w" {
System.err.println("Exception updateLattice: " + e.getMessage ());7 I* \3 w9 ^8 \
}8 G7 b/ S. h! f" x3 {2 j
2 p9 [3 r: q2 t // Then we create a schedule that executes the
5 ]- t% l/ q0 q$ g) H- u* p // modelActions. modelActions is an ActionGroup, by itself it
% D: P8 d7 N2 _1 i6 |+ ^( t // has no notion of time. In order to have it executed in9 W6 ~; W0 `& u% l5 C' P
// time, we create a Schedule that says to use the
2 e% F3 C4 k' y. l, F; i8 Q3 k // modelActions ActionGroup at particular times. This5 c5 U+ ]* }" W
// schedule has a repeat interval of 1, it will loop every
: ?* {& r8 |) S // time step. The action is executed at time 0 relative to7 ?# m7 P. f' D+ m# a" ^
// the beginning of the loop.
- e4 ~7 [8 E# D! [$ A7 U9 O+ E, u( N" }
# s4 \- Y9 Q& Z" S // This is a simple schedule, with only one action that is$ [6 n2 ~/ w' z: I
// just repeated every time. See jmousetrap for more1 D* i4 N4 v) V. B
// complicated schedules.9 E- n& T1 h# v% {
) I2 i' N8 \+ S5 _) @ }3 l4 f modelSchedule = new ScheduleImpl (getZone (), 1);
& I6 j3 i5 y m modelSchedule.at$createAction (0, modelActions);
4 w- `9 Y. U# W6 o ]! |& o" C, E8 `2 L& [) F2 w ?
return this;3 P6 K: |3 S( p
} |