HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, b; Y* z3 k% p6 \% a; z2 P$ h2 b- J2 g6 V
public Object buildActions () {
. B. \, r+ _ n7 z: Q% y: t super.buildActions();! \7 t( m9 M5 ~/ X
7 {* H" z3 u, @/ g* X3 Y // Create the list of simulation actions. We put these in+ Y4 r8 B4 a8 @+ K
// an action group, because we want these actions to be
0 _) e* E. y; P& C1 z: {/ ? // executed in a specific order, but these steps should
; ~9 Q. s3 K8 m // take no (simulated) time. The M(foo) means "The message
% J; k( ^! `- B1 v+ w8 G // called <foo>". You can send a message To a particular
# S: Y: D9 {5 ]" w; g& n. o // object, or ForEach object in a collection.$ c4 ]) \! u$ f% P$ P0 V; A: n# Z
/ r$ d5 N; x: n' z- x // Note we update the heatspace in two phases: first run
6 q6 H" C' M& c: D5 p // diffusion, then run "updateWorld" to actually enact the
+ x( y5 ? q L2 O% { // changes the heatbugs have made. The ordering here is
# Y! y$ i. Q7 b2 J6 P // significant!
; c1 b' e5 P8 v0 n& [/ n " C" {2 a: U6 T
// Note also, that with the additional
) s1 t7 |6 Y a w" z. M2 f // `randomizeHeatbugUpdateOrder' Boolean flag we can
* ]0 R& a& i* V% U# ~ // randomize the order in which the bugs actually run
. `7 g" b* w* A- s O" v // their step rule. This has the effect of removing any
2 y' x) q" X2 o# d G4 H9 F7 j" I- P9 n& I // systematic bias in the iteration throught the heatbug
0 M6 q x. k% j3 V // list from timestep to timestep
2 N' X" F, p( T 8 T' T- Q6 Z& g
// By default, all `createActionForEach' modelActions have
$ m5 @8 V' N" D+ t& z; B; v1 i // a default order of `Sequential', which means that the0 |2 ~# p+ i0 N. J
// order of iteration through the `heatbugList' will be6 B* V* p# O4 C0 F* J4 D8 j, G
// identical (assuming the list order is not changed3 X. |5 v+ A# w4 \& f+ T
// indirectly by some other process).8 Y5 @: d) m/ V4 _
2 z2 J: o/ Q4 ^) s" J. H
modelActions = new ActionGroupImpl (getZone ());6 o8 @$ z x, T/ ^2 N& i
+ k0 n/ r8 A' L$ R( b try {
3 P. n/ z" Y* `9 I, ]9 |7 B" P; x modelActions.createActionTo$message8 H. N% {9 k# j4 F
(heat, new Selector (heat.getClass (), "stepRule", false));, o9 f4 _( D- \
} catch (Exception e) {. v/ Z* Z) K. {1 o- Z m" C
System.err.println ("Exception stepRule: " + e.getMessage ());; Z; `7 p2 U, G! A
}) C" m2 D0 c3 B# d
; k+ U* Y* W I try {2 W, y6 U2 q/ i- D% N c+ a
Heatbug proto = (Heatbug) heatbugList.get (0);: C$ Y: Z% c" }
Selector sel =
7 N3 U+ p9 I4 A. u new Selector (proto.getClass (), "heatbugStep", false);
9 c6 w L2 ]0 j$ z actionForEach =1 v! {8 Z( [; L+ q
modelActions.createFActionForEachHomogeneous$call
4 ~6 B: c4 ?( M$ M* Q (heatbugList,% x1 a0 y x% |0 `! z4 s* y
new FCallImpl (this, proto, sel,( U8 g6 _% p; g: R& D7 T1 b1 j
new FArgumentsImpl (this, sel)));
/ A5 `; E8 ?. Y" d5 r0 M) `$ s } catch (Exception e) {4 o8 O- \3 k; _) w& T. _$ v+ }
e.printStackTrace (System.err);3 j, a3 P7 a, T! s" v
}
1 S( a/ V( U! d 5 B% \' O& T6 E+ Q6 x
syncUpdateOrder ();
! [2 z8 {1 E$ H* K/ {4 l: b4 |0 }- s
try {
$ i3 P( T5 f8 ]7 p modelActions.createActionTo$message
/ u4 \/ V3 ^ T9 l8 |0 ^ (heat, new Selector (heat.getClass (), "updateLattice", false));/ O/ _/ x1 q* M, Q' ~* g: v& [6 a
} catch (Exception e) {
& W! `" x. E$ e1 I- Q System.err.println("Exception updateLattice: " + e.getMessage ());
/ g3 ?' s2 Y* h) t% ~7 Y1 E' f }
; w( w6 n& H$ D/ ?% c$ v1 ~ : e$ k0 {$ M/ S' p1 X
// Then we create a schedule that executes the, l; i. X" x; u' j$ {
// modelActions. modelActions is an ActionGroup, by itself it
8 r9 Q7 p) g6 |+ t // has no notion of time. In order to have it executed in& `; I* ~7 s. _# G# N" y
// time, we create a Schedule that says to use the
# i* J( c W5 Q& X // modelActions ActionGroup at particular times. This
1 K% V' b; e( P, Z/ | // schedule has a repeat interval of 1, it will loop every# c* i2 g. a' x/ c" b
// time step. The action is executed at time 0 relative to
/ x$ @! ]* i3 g$ Q // the beginning of the loop.6 B1 \+ U3 @9 ~
7 i8 ]3 t1 h/ ]6 A# h) P: d // This is a simple schedule, with only one action that is
7 W5 E! T: j. |# |2 q- u. z% Q // just repeated every time. See jmousetrap for more. r0 G1 c1 h: u$ A$ v9 k) N
// complicated schedules.9 b U$ R$ K, K/ ^: R1 n/ j
2 E2 x. ]* T- h' k
modelSchedule = new ScheduleImpl (getZone (), 1);
$ b& E9 N( Q4 O1 J& s# ?$ j- U modelSchedule.at$createAction (0, modelActions);* f5 G4 G1 E3 v: {* a5 W2 [ E- D
" |' R5 ]4 p8 p. K' K9 S
return this;1 x1 H9 R$ Z; o" [1 n, L
} |