HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- P0 X+ g' G* H
9 o4 b7 D, z7 c% Q+ l% K$ C public Object buildActions () {) @1 l5 K2 I y" v1 l
super.buildActions();$ n1 n8 _: f+ D* w
& s8 b8 \$ ~6 ^0 T p% l // Create the list of simulation actions. We put these in
) \. @+ s' d/ P7 B/ b3 O$ u' e // an action group, because we want these actions to be
) y6 u% \* I5 z // executed in a specific order, but these steps should4 L. h3 x- B. D- Y9 b5 [- w- C# t
// take no (simulated) time. The M(foo) means "The message2 b0 O% l8 a) Z- B" |- |
// called <foo>". You can send a message To a particular
% U7 B1 ]3 K I |. T // object, or ForEach object in a collection.: f& t' i0 a( H4 M
5 H; p. s0 c; S2 T1 u
// Note we update the heatspace in two phases: first run
! r. j. H) \4 B K: K // diffusion, then run "updateWorld" to actually enact the* H U; T3 ~% l ~% R
// changes the heatbugs have made. The ordering here is
7 d9 d- L; j, \, G6 ~; t. z& _ // significant!' L) R% u2 U0 J1 E, v( t
, \1 `+ ^6 K0 x* P; p1 T
// Note also, that with the additional8 y8 s f+ @+ e' p: |- u/ {
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 K/ N2 W: v: u" y, h3 d
// randomize the order in which the bugs actually run
% g- h4 C) U8 e1 |1 ? ^ // their step rule. This has the effect of removing any
; n1 f" J; ]( z( q0 T& b+ l% u // systematic bias in the iteration throught the heatbug
: ]& \; s2 t' e // list from timestep to timestep; s. c& ~* r. c8 a, m4 `
$ {6 H) p" J* ~+ f/ I1 @
// By default, all `createActionForEach' modelActions have+ S- i: ~7 p9 V" i4 L
// a default order of `Sequential', which means that the
# u# G* i, X# y# x3 Y // order of iteration through the `heatbugList' will be9 N4 X) a- b1 S) I
// identical (assuming the list order is not changed
0 V. q' X. u# S$ A" T( a( ?9 G // indirectly by some other process).
I J: E6 Y% p* c6 ]9 g ' K/ t% R: m2 w3 b
modelActions = new ActionGroupImpl (getZone ());4 x0 I+ e: C' ]+ V9 U/ A3 G
& H5 z, u: t% j* @$ S3 g try {
$ }; x% G1 o* p5 C modelActions.createActionTo$message& t9 T" e+ Q7 l/ ?- ^# E. m$ F2 ? ?
(heat, new Selector (heat.getClass (), "stepRule", false));
( h1 ], U, l; K( D/ O3 I+ A } catch (Exception e) {. N# o* y0 y4 t) M1 F
System.err.println ("Exception stepRule: " + e.getMessage ());
1 y0 V& J7 ]3 V5 B3 B8 a3 p( K }
% b4 E: p. ~+ Z: m
) [- }; |; X0 G( f8 r0 Z! s# [/ U try {
: z, ^) h& T) O- b Heatbug proto = (Heatbug) heatbugList.get (0);
& d2 G& g4 \6 d/ O. ]# M0 _, I Selector sel = ; m o$ M" `5 N2 j. l2 V! \
new Selector (proto.getClass (), "heatbugStep", false);9 d5 W' L( _' a& w
actionForEach =
& M8 K9 [: }+ \, o4 V modelActions.createFActionForEachHomogeneous$call* M- E' A/ a! O4 y) g
(heatbugList,
6 F6 ^7 t5 W$ i. }$ c# ] new FCallImpl (this, proto, sel,- w9 [7 k. F+ V2 t2 \
new FArgumentsImpl (this, sel)));
3 R0 G1 B9 A. q$ X1 W } catch (Exception e) {; Z8 B' \2 \3 }0 z+ b( J
e.printStackTrace (System.err);0 ~7 G f Y! F4 B% Q, z6 c7 Z
}9 R5 t3 Q) v) G* m+ j
9 W; k. {& Z! O3 w: Z
syncUpdateOrder ();
9 H7 E5 Q# h, H: o
# B3 b2 k. O% }; ?( K, k( U try {
/ K) d/ k% Z0 A* e$ N: Z+ o% F: I modelActions.createActionTo$message
. Y3 l" |' F/ A. A7 u* C (heat, new Selector (heat.getClass (), "updateLattice", false));
. N' A* r# D( \ } catch (Exception e) {
5 V: y$ ]5 F6 ?+ ^# [6 Z( m2 R8 Y System.err.println("Exception updateLattice: " + e.getMessage ());; E- q* S$ e: A1 E' c( y8 q* U
}) f5 O4 E! @0 V0 n1 A- Y
0 m* w; \4 y" j
// Then we create a schedule that executes the8 n( J* }8 X- [
// modelActions. modelActions is an ActionGroup, by itself it2 D; v+ ?6 c, i# k5 {
// has no notion of time. In order to have it executed in+ @; `% E2 ?# T3 t
// time, we create a Schedule that says to use the/ N/ Z; p! p1 o# l/ c$ R/ G
// modelActions ActionGroup at particular times. This; ]3 f0 ^, t8 l0 }# _, W# v! E8 H
// schedule has a repeat interval of 1, it will loop every
! r* b; h& C6 o) \% o // time step. The action is executed at time 0 relative to
* \# D) | K0 r; I // the beginning of the loop.
+ b' O0 \9 [/ m* e4 X0 ?! [" G" O* X! B7 P
// This is a simple schedule, with only one action that is! l$ j: c2 A; Q) B! y2 c
// just repeated every time. See jmousetrap for more
( f5 `. V9 K4 W" t0 j6 Q5 ` // complicated schedules.
% o5 y* x6 {- e/ U! J
* a+ {; u9 S: Q modelSchedule = new ScheduleImpl (getZone (), 1);
& `3 L! t0 X9 o" p; K modelSchedule.at$createAction (0, modelActions);
* [* w/ A( C( {- }& f- J/ j & `, |( `* I, l# r
return this;: P1 T' @& |8 A7 t. O& i1 c
} |