HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ l4 g& q$ A3 q9 H3 a
$ W& l/ b/ O6 a public Object buildActions () {6 d2 Z v+ M0 F8 K0 X
super.buildActions();$ k; h8 }8 W) l; @
5 @4 k0 s; _" f3 B6 t, T- h // Create the list of simulation actions. We put these in* H$ I% K' A# L3 N0 x. F2 o
// an action group, because we want these actions to be
+ ]4 |% E' v0 I% \ i // executed in a specific order, but these steps should8 [: I' _7 K4 R- \: m
// take no (simulated) time. The M(foo) means "The message
H5 O1 s5 y4 Q- P. K; \/ @5 [+ u$ b // called <foo>". You can send a message To a particular
" g1 Y, D2 C* ]/ U4 c6 _: k) }2 l1 ~ // object, or ForEach object in a collection.
g; e9 D# J" Q2 X
( ?0 Z0 W/ n! k$ k // Note we update the heatspace in two phases: first run
' |; K% X6 E/ H // diffusion, then run "updateWorld" to actually enact the: l+ a; a6 R* r" G
// changes the heatbugs have made. The ordering here is
; O0 y7 k0 w& o# D( j4 ]: Q // significant!5 P" i: E6 {" F3 D$ c
5 a, `- `4 H5 A% e4 I, j
// Note also, that with the additional. t/ z! W7 _1 u$ V5 Q" h. y9 y
// `randomizeHeatbugUpdateOrder' Boolean flag we can, F- P! E3 c# r+ w F
// randomize the order in which the bugs actually run5 t- R! M7 s* m5 L6 D
// their step rule. This has the effect of removing any, F0 l( N5 h5 r- |' v3 G% ^3 q
// systematic bias in the iteration throught the heatbug
" Y3 x# B7 i3 q( O0 J0 `3 A$ }- O // list from timestep to timestep" D6 h; n' I8 g; V1 D0 Y/ l0 a
5 N$ c, |( j0 H. [9 o2 D+ x7 P
// By default, all `createActionForEach' modelActions have
/ q2 S8 |1 ]: X5 X( \" H2 L // a default order of `Sequential', which means that the
3 p5 u: y" r8 o1 C& X8 \# y // order of iteration through the `heatbugList' will be
0 U% R! H; Y, y8 A9 F7 c // identical (assuming the list order is not changed
: Y2 E7 R0 V; T // indirectly by some other process).
( p& t* K# F \" G! J, _
: r7 F' V0 O2 c$ v modelActions = new ActionGroupImpl (getZone ());
) a# ^/ j8 U2 j; W: m& h6 t
8 {; f0 w8 M# w9 U! M' J try {
7 C- e* T a/ T2 M- u" J; X4 P modelActions.createActionTo$message5 Q5 n i4 S# k9 y0 s$ M1 `
(heat, new Selector (heat.getClass (), "stepRule", false));0 f5 T8 g4 o2 |: x: }1 l
} catch (Exception e) { @ c k0 d5 r6 C( S) t
System.err.println ("Exception stepRule: " + e.getMessage ());' k' ^0 f! ?; W% m( u$ g
}
( Y6 x3 }) B9 B9 S% T, r
& L3 R7 p& t2 k% T( _ try {$ x2 M: o! _+ w
Heatbug proto = (Heatbug) heatbugList.get (0);4 p# `; P u; R( Z- @( R: Q: s' w
Selector sel = ; H$ {8 ?, |8 o* L7 p: M
new Selector (proto.getClass (), "heatbugStep", false);% q- q! i, t7 Q1 @- @9 M) D$ x, E/ Z
actionForEach =
: ~7 A8 W8 t, a1 U modelActions.createFActionForEachHomogeneous$call
, M- _( L+ Z1 x) J3 J* o6 p (heatbugList,
, U# P. ?& e: d5 f) o, H* I0 f3 Q new FCallImpl (this, proto, sel,- c( B5 ^9 C" A% ?% i$ B
new FArgumentsImpl (this, sel)));) o4 w% A3 M' _1 v" A5 Q+ T) p: y
} catch (Exception e) {3 b Z" {! e+ P, ~+ [
e.printStackTrace (System.err);
, X% l% }/ r- m7 a% t; } }
/ q! K9 i8 ~: c' ?
$ g" \& X M% M+ c# f$ O syncUpdateOrder ();
! q$ L9 B' r4 V$ s$ | r4 f4 C2 B+ E9 g# o/ w) D: p4 S F: F
try {, m% h: ~2 D- Y x9 B
modelActions.createActionTo$message
6 u# x9 z9 Y* V5 Z. b( d9 ? (heat, new Selector (heat.getClass (), "updateLattice", false));4 I& f. d& V7 k- r3 [* Q% K
} catch (Exception e) {
8 `( y9 Z8 C1 d# U2 {, ]( ? System.err.println("Exception updateLattice: " + e.getMessage ());/ K1 @" ~" O8 i/ Q
}! {2 `1 H: ]+ @
5 _& w2 l# K4 a: A" f5 B+ d. r // Then we create a schedule that executes the
. G2 ^7 h1 C& A0 n* r$ m // modelActions. modelActions is an ActionGroup, by itself it
. r" m6 E/ j' ? [5 p# b7 Z) h // has no notion of time. In order to have it executed in
/ S+ h) g9 ~0 S( O, \ // time, we create a Schedule that says to use the
4 S. j: N4 V" J: M' l // modelActions ActionGroup at particular times. This
" E5 F- b* u | // schedule has a repeat interval of 1, it will loop every
5 a0 m( w3 G8 s/ F; {; W5 E // time step. The action is executed at time 0 relative to
# A. \5 M- t3 d, C% q // the beginning of the loop.
/ w) v) }+ b" j
0 a/ Q6 H4 ?$ Q& E // This is a simple schedule, with only one action that is* U0 D3 V* |* X' ]
// just repeated every time. See jmousetrap for more7 ]7 u( ?& C P' A, K
// complicated schedules.5 @: C1 p. f! O. n5 l* a [
9 C9 N+ s2 T! H6 ?6 @( R9 }! A
modelSchedule = new ScheduleImpl (getZone (), 1);! j# M# ^# o' r! P5 B
modelSchedule.at$createAction (0, modelActions);
) Q, ^6 |' z) X5 o! K$ ~/ N
4 M9 r7 d* @5 h3 o2 j7 ~$ ^8 h return this;# N2 Q$ G# n2 R; s& s7 u0 \7 G& c
} |