HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* h5 Y/ h% m1 b- I
/ m& w# J4 z) O# V+ X7 d
public Object buildActions () {
& Z1 i9 V" g7 D6 Y, R super.buildActions();4 Z) B( T* N& i5 ~
, u" _3 F: d0 X& u. C
// Create the list of simulation actions. We put these in
% s7 c) ~2 r% ]9 I5 ?, g // an action group, because we want these actions to be R4 G: c% X) O
// executed in a specific order, but these steps should9 O* V1 M# U' d8 \% F) \
// take no (simulated) time. The M(foo) means "The message
& D E2 u# D1 j( R3 ^4 v // called <foo>". You can send a message To a particular
4 m9 R/ F$ V3 D$ l // object, or ForEach object in a collection.
: I2 k( {- \* s N! H ^& u& B , m' g$ a) `# c; r7 _
// Note we update the heatspace in two phases: first run
! e* {( q) l2 w8 J9 g // diffusion, then run "updateWorld" to actually enact the
4 m y' v" U0 K2 p // changes the heatbugs have made. The ordering here is& E$ d2 V0 H7 X. I h: n" a. G8 O
// significant!7 x7 F* v- _- M1 Y: R
) U6 P" K3 E b& Y3 A6 P2 p
// Note also, that with the additional
9 w+ N5 N4 @5 z% k8 ^! {$ ^, g // `randomizeHeatbugUpdateOrder' Boolean flag we can
# h- g5 @) F8 W" ^. t4 @ // randomize the order in which the bugs actually run, T- W+ ?+ L ~: ]: S( k
// their step rule. This has the effect of removing any
- P9 o1 T& l) X( M // systematic bias in the iteration throught the heatbug
. y' l1 K$ V9 l8 D, W // list from timestep to timestep4 l/ c3 [0 I" J) \! ]8 M' a( f
4 e. y; Z7 D) ~* H5 { // By default, all `createActionForEach' modelActions have
( P. w f) H4 s0 D" |9 a: U' Q // a default order of `Sequential', which means that the
7 s) X0 H3 @6 O4 p. j' H // order of iteration through the `heatbugList' will be
; s7 w5 Y) _8 I' f: S1 X" X // identical (assuming the list order is not changed2 H; z: s# \0 _; Y% }) Z- E: @
// indirectly by some other process).
) U& ~* |+ @# l
1 D6 Q5 x, t* V. @0 g/ w) w& _ modelActions = new ActionGroupImpl (getZone ());- C2 P: N3 ~2 Z2 l
% e+ M: W' T, |* v4 B try {6 y1 T8 b+ ^+ X6 G: X# \' N8 J
modelActions.createActionTo$message5 Q* z- B [: c/ }9 l+ \
(heat, new Selector (heat.getClass (), "stepRule", false));
( U4 N- U3 i1 l2 q# M } catch (Exception e) {; z& E( k+ Y$ h. c& E7 C
System.err.println ("Exception stepRule: " + e.getMessage ());% `9 Z/ s0 b: L% ]" u
}
% N9 v% ^4 A" F7 j' Q9 ]
. m0 y1 N& S# {! s) D. a try {
' ~8 f5 } ]% i3 J$ X4 x Heatbug proto = (Heatbug) heatbugList.get (0);+ {4 y$ E6 Q8 N7 i
Selector sel = * O8 H9 Q. Y1 R# n
new Selector (proto.getClass (), "heatbugStep", false);
% k5 n* }( J3 Z" _$ z0 n actionForEach =0 `% @4 s+ ]; g) e1 [; f
modelActions.createFActionForEachHomogeneous$call) `6 q) J c5 L+ ~$ j9 j, I
(heatbugList,) ^4 d0 r1 M: [0 l
new FCallImpl (this, proto, sel,
: }7 g$ G' X, j new FArgumentsImpl (this, sel)));9 Z7 Z) J2 f8 z3 I3 |6 p) ]# \% W
} catch (Exception e) {# j0 X6 L. i( J
e.printStackTrace (System.err);- P3 S' j% \0 t0 X2 H
}
' `4 n2 r$ T; v0 S9 D% u
$ d; j# _ B' r1 c* l p5 x0 H7 n syncUpdateOrder ();/ @0 y1 I2 `; f! O/ B* P: w0 ]$ R
2 F/ j$ O! n; K& [' t- c try {8 Y5 N$ ]+ K8 X) h
modelActions.createActionTo$message 1 H# k# Q, o; U* x$ S
(heat, new Selector (heat.getClass (), "updateLattice", false));% u7 b/ w3 ?* w; e ^
} catch (Exception e) {5 D$ _% Q1 n0 d* u/ m! v. U- M
System.err.println("Exception updateLattice: " + e.getMessage ());7 J' }% X2 O6 e& _8 u
}
* t) b3 u& k1 Q; o- c3 e
/ R8 N: B. i# b. y+ v d // Then we create a schedule that executes the' X4 M& {1 t9 S9 k
// modelActions. modelActions is an ActionGroup, by itself it" e4 S4 M/ F$ S: i$ n s9 V
// has no notion of time. In order to have it executed in
f7 r1 s$ I* q // time, we create a Schedule that says to use the: }; ]6 M- y a
// modelActions ActionGroup at particular times. This! Z, G: U" L5 f9 t
// schedule has a repeat interval of 1, it will loop every' v1 s7 C1 u- K5 }0 W. S9 s- S$ j
// time step. The action is executed at time 0 relative to
$ ~4 c- O5 d6 N // the beginning of the loop.
* o' |! Z( d' ]
$ \$ D, v9 z) J. k* g6 p // This is a simple schedule, with only one action that is
. U6 \3 o/ }$ ^4 D& r // just repeated every time. See jmousetrap for more; E/ G4 w; D( w4 a3 s- G
// complicated schedules.6 w, W+ `( e" ~/ H+ s6 o6 S
# z! S# {+ V' O0 O; R8 {8 @. v modelSchedule = new ScheduleImpl (getZone (), 1);
: x6 S; D; G& c2 L+ e+ ? modelSchedule.at$createAction (0, modelActions);5 o" |, p7 b: Q, G3 y- l
7 l7 J# ~% _6 Z; N, p& W/ O c
return this;3 N% \5 J3 @! z& g
} |