HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, N1 d& @8 _! K8 i& o$ [$ P
. L, f, p% V* t. r w public Object buildActions () {; ?5 `$ [" O4 i2 y2 `/ m4 s
super.buildActions();
3 D4 v9 x3 |/ j/ O; J
; \& q X; S$ j9 R* h7 E // Create the list of simulation actions. We put these in% }4 @5 r, L1 O" S3 i+ {6 P
// an action group, because we want these actions to be: S! Y1 L* j- ]5 x6 _+ Q( w
// executed in a specific order, but these steps should
. m5 Z7 y W. I // take no (simulated) time. The M(foo) means "The message
! }! o: U. [! v2 D7 _- s" s) l ] // called <foo>". You can send a message To a particular- l4 S2 T. Z2 W* s$ p2 L( E
// object, or ForEach object in a collection.
C; v3 d( Q, X+ h) m" U1 e |3 C
& o# I& X) _& N: \: _% r, h // Note we update the heatspace in two phases: first run
) C; ~2 D+ ?3 Q) U% q" n; ~: p$ F // diffusion, then run "updateWorld" to actually enact the" T0 J: l3 O# c, @; Q4 ~
// changes the heatbugs have made. The ordering here is
! l' H$ Z7 j4 \% G // significant!4 v; |7 z! v9 s7 u
- c: R! E. d* \+ j; t! f3 } f! C# } // Note also, that with the additional: y7 v# P5 Q0 @* Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can, S [9 i( c; j+ g1 Z
// randomize the order in which the bugs actually run/ B' N8 x/ n( f. f2 e
// their step rule. This has the effect of removing any* B& q- Q7 L$ x7 F
// systematic bias in the iteration throught the heatbug
; J9 ~- T( U) g1 R+ Y! G+ T // list from timestep to timestep
6 [% @! J5 E0 m7 `( z/ w
2 V5 d# K( s1 T7 w+ R& f // By default, all `createActionForEach' modelActions have
4 ]; T! W' g0 n p // a default order of `Sequential', which means that the3 k0 f0 N: H5 i1 q. I Q' X
// order of iteration through the `heatbugList' will be
& z6 c$ |4 Q5 h% @" x! ^! y0 |6 O // identical (assuming the list order is not changed9 H+ f+ e" k" ]; B/ ^3 }
// indirectly by some other process).9 g; e6 g0 b% r% ~3 }3 l
3 }$ Y' o7 w- f- L% \
modelActions = new ActionGroupImpl (getZone ());
; b! ?) A( e, M0 L# k- x( M- _7 o( l
try {
. }( e+ E5 K K1 Q. _ modelActions.createActionTo$message
, Q3 Z7 j! ?5 `# V0 u4 u0 W% x (heat, new Selector (heat.getClass (), "stepRule", false));
( ?* x$ h: o, G } catch (Exception e) {
: `: a+ [/ V# T* [ System.err.println ("Exception stepRule: " + e.getMessage ());
, o5 {. g7 b) } }
$ h+ d- G O) ]4 G: O. V9 _! t, o6 y w7 A9 O o2 G2 R5 ^" [
try {
$ z# d9 u) ?; K# Q Heatbug proto = (Heatbug) heatbugList.get (0);% y! `5 Q- R. ` h0 p r
Selector sel = ! p4 i" V2 n/ H! S
new Selector (proto.getClass (), "heatbugStep", false);$ ^# n+ }; @' x6 J( M' z4 ~' D8 \
actionForEach =
* f) y* J/ J3 Y: z9 |; J' R modelActions.createFActionForEachHomogeneous$call; m' U9 z( h1 n+ H
(heatbugList,
; p, g/ t7 u1 s- i$ w0 M new FCallImpl (this, proto, sel,
. S% O) K3 b4 A+ ^: j new FArgumentsImpl (this, sel)));
8 l* }% ]4 s$ i } catch (Exception e) {/ B4 @3 y3 D% a) ]. ~: K5 \( i
e.printStackTrace (System.err);2 ], P& \" K0 p/ f8 F! d
}
: V4 h! V7 ^& s9 h4 L/ `% ] / v1 n. [" p5 @9 T! @
syncUpdateOrder ();
5 O' b9 s6 ~! Q* o* Z' h$ `# z5 [! _! O
try {
, G& C! v0 n. d" \3 v/ @4 ~ modelActions.createActionTo$message
- G7 P6 s1 P1 s7 A" B$ u# v' ] (heat, new Selector (heat.getClass (), "updateLattice", false));
/ l* u0 X) z, J* s+ e% a } catch (Exception e) {
D' G2 [: [3 N) g0 J" } System.err.println("Exception updateLattice: " + e.getMessage ());
8 o' H- i! w! @/ J( Y4 { }5 q+ \8 `& Y4 ~' U+ f
. `( B7 f/ T9 b/ `1 W: t
// Then we create a schedule that executes the
, j, q: I: l z6 O) }, k G$ [1 J // modelActions. modelActions is an ActionGroup, by itself it: h* a9 q3 o- x
// has no notion of time. In order to have it executed in
$ g# }3 L3 U4 p& x$ Z( E: B( q) f // time, we create a Schedule that says to use the; [0 ]/ o! x* g/ T, Y9 R& _
// modelActions ActionGroup at particular times. This
, X: v7 x& H: E' K // schedule has a repeat interval of 1, it will loop every
7 Z; d0 F* O C3 x5 y6 S+ j // time step. The action is executed at time 0 relative to
7 a" h T4 V$ M9 C // the beginning of the loop.# F- S) x# m4 r
4 D9 p- H) O# P3 G& I+ {
// This is a simple schedule, with only one action that is2 p/ G$ B) x9 S( N
// just repeated every time. See jmousetrap for more+ L4 J/ P7 ]3 ^9 i: o
// complicated schedules.4 n* C. V; P% V
1 I: L) F- N0 \' ^
modelSchedule = new ScheduleImpl (getZone (), 1);; X9 Y- |3 y: A
modelSchedule.at$createAction (0, modelActions);1 ?+ N2 s) ~' H; N F
2 b8 C" K7 S! F8 D0 g+ v5 W! N return this;( Q s% m/ X) G S
} |