HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 R1 j- r: [8 d% e0 N
* ^; K r0 r7 c( Q$ @# X public Object buildActions () {1 T! x. J( v- O1 J
super.buildActions();
) R" {' T# X+ G
* O) t% Q+ C$ v8 n& U6 w // Create the list of simulation actions. We put these in
, \- E [* c, s) ^4 o3 H: ~ // an action group, because we want these actions to be
. X0 p9 U8 D S // executed in a specific order, but these steps should
4 r8 |+ u% y0 h @- M/ u // take no (simulated) time. The M(foo) means "The message# @- Z: V2 I4 G7 p" }+ h8 c" V( M
// called <foo>". You can send a message To a particular
- F$ A3 ?, E0 P; `3 O // object, or ForEach object in a collection.
$ S! y- u% D" _! f8 |0 K% a ' Y8 {+ z; t, n( V; m
// Note we update the heatspace in two phases: first run9 @; o- L* T/ d% B U$ l) k) V/ z
// diffusion, then run "updateWorld" to actually enact the
- `1 B6 R8 A2 j7 h // changes the heatbugs have made. The ordering here is
2 [ e. @* \) p. F8 _ // significant!/ u, h( \+ X* N: M: M4 z
# E: {' B Y' a3 J2 z2 ^4 D% z4 T
// Note also, that with the additional
/ e; z3 \) o) @6 P4 t6 h // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 @# M8 V( |1 `2 Q // randomize the order in which the bugs actually run* s# F# c( M3 p [9 a/ Y' W
// their step rule. This has the effect of removing any
# M/ t* D1 o0 D J( W // systematic bias in the iteration throught the heatbug% V! k) Z+ i4 g( g- c+ L$ e9 l
// list from timestep to timestep( T$ t( m6 i) X5 b# a) `! ~/ X
5 [" U8 U7 \7 `( ~7 S // By default, all `createActionForEach' modelActions have' O; a/ M9 G2 R
// a default order of `Sequential', which means that the9 k# y& M: T0 ]% m
// order of iteration through the `heatbugList' will be
; Z; `; L: J9 L2 j2 s7 H // identical (assuming the list order is not changed
+ Z1 i& ~) l- @, f7 H+ p // indirectly by some other process).2 G) d2 V+ H0 E0 n4 i2 ~
% G, v7 f5 g* m, |' u. ~% b, \( N9 R
modelActions = new ActionGroupImpl (getZone ());
9 q. @* A- i; b0 k" Q, r2 |3 B6 q2 h+ s, b
try {- i( @# ?6 I8 c2 |- L4 c5 j
modelActions.createActionTo$message8 V$ d5 K2 I2 ^3 k: w4 G# Z
(heat, new Selector (heat.getClass (), "stepRule", false));
# N _8 M5 `% ~3 `$ \1 O4 i7 L$ Z } catch (Exception e) {$ K+ d- \5 y5 n8 X
System.err.println ("Exception stepRule: " + e.getMessage ());7 h7 U9 L( H* ^
}
: n9 O/ V; x# F6 p5 v: W/ S; b8 x' |3 m' d' M) m' M
try {( b/ @( f' ~2 F. Q1 }" k5 f1 o$ }
Heatbug proto = (Heatbug) heatbugList.get (0);
$ g% J4 F& l4 p1 }& Z( j8 n Selector sel =
. O' g- m" t2 k9 v new Selector (proto.getClass (), "heatbugStep", false);" K1 n) }( n, V* q- f- _
actionForEach =
0 |" ^1 O7 u) u; _: w6 ^6 ?) l modelActions.createFActionForEachHomogeneous$call
2 s: U. D* o8 r6 y+ w L9 m' z: [ (heatbugList,
2 R$ u6 O* A: R* \6 m$ M" @ new FCallImpl (this, proto, sel,) q/ k9 H! @3 j* Z
new FArgumentsImpl (this, sel))); q; H9 U9 O) C
} catch (Exception e) {* n3 ?% A6 R) q5 R% [% a9 z
e.printStackTrace (System.err);! z! q: t& j# }/ V8 ~
}! X( v- F0 p2 L8 \
9 k# I) ]) p" p( c9 _
syncUpdateOrder ();
5 l* z1 o- K# ^: f
( M. Q' N+ u. i try {* A9 \$ D9 d, ]3 m8 Y4 Z
modelActions.createActionTo$message
7 h. d) C$ R' q! q (heat, new Selector (heat.getClass (), "updateLattice", false));6 u) j2 f9 S8 E* Y! F$ r& ?, e! X/ u
} catch (Exception e) {
$ s3 }5 j5 P2 ]) f' ^8 b System.err.println("Exception updateLattice: " + e.getMessage ());% m8 T) S. o1 o9 h. J; g3 {% A- i
}
# L& U4 F* o w/ r0 F " ]! D. k. } x6 Y8 r
// Then we create a schedule that executes the
4 h5 [9 B: t$ {/ z' \ // modelActions. modelActions is an ActionGroup, by itself it
6 g; p9 ?3 c: w7 S9 L' ^ // has no notion of time. In order to have it executed in
5 {- v2 C7 ?9 w r$ B" ^2 v" k. x // time, we create a Schedule that says to use the( ~' z- [8 ~" D; \/ e0 `
// modelActions ActionGroup at particular times. This |& W Q# w$ |8 X" e
// schedule has a repeat interval of 1, it will loop every
9 {5 @* {* z# m- T // time step. The action is executed at time 0 relative to. i3 p" k2 Y ^1 G9 f; d0 l, J
// the beginning of the loop.
0 V( A1 t" g: j2 U& n
5 N3 W5 P5 t2 t$ m // This is a simple schedule, with only one action that is, G6 K m* f: b* u) o1 H
// just repeated every time. See jmousetrap for more/ _/ U9 a* u1 O" j; E& }: O# `
// complicated schedules.
& Q/ n9 q/ t6 Q * q* ]3 H8 w a* g
modelSchedule = new ScheduleImpl (getZone (), 1);
, R$ Q" [9 p7 \4 E modelSchedule.at$createAction (0, modelActions);
$ k) |3 M% [. o% [+ }. l8 Y
5 j! |+ G8 K0 W( p return this;, B8 w* j" n: s, b M
} |