HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' W( X9 x) S, J/ M
) x- q x0 B; Q* q" {6 x
public Object buildActions () {
& y) {( l* _% W! z! U, G3 Z. k( d super.buildActions();/ c* V; P/ Q6 V
* R7 G4 {1 i) ]5 H% I1 Z1 c" m
// Create the list of simulation actions. We put these in& ]( b' G; B; F2 ~! J( Z
// an action group, because we want these actions to be
- O9 `. U; @( y& \; F // executed in a specific order, but these steps should! K! v7 ~% K; `% Z9 {, q5 S- T) h
// take no (simulated) time. The M(foo) means "The message
0 ~/ l* x- L6 j- ?: Z // called <foo>". You can send a message To a particular
; \1 K# m) U5 C; d0 A1 c: N! `: E$ w // object, or ForEach object in a collection.- r, e, A. K( O
% c( l R) E, Z
// Note we update the heatspace in two phases: first run
' V3 k# C7 ~4 S# n5 { // diffusion, then run "updateWorld" to actually enact the
@; d" r0 Q& W( Y5 {% D // changes the heatbugs have made. The ordering here is
" o" A9 q: \: ^4 r2 ~$ A/ u8 G // significant!- A/ `9 W1 ]& \5 T7 l9 A4 ^
2 }# E4 k( O6 c3 u: Y( l7 Y // Note also, that with the additional1 S1 N4 g" Z# I2 t3 N" h0 f
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 s6 C. B1 E9 K; Q8 g& b4 I; R; L // randomize the order in which the bugs actually run! ` u" Q3 }2 E3 N0 b1 k
// their step rule. This has the effect of removing any
% Z) n6 } Y3 q- [/ s" k' j // systematic bias in the iteration throught the heatbug
# m2 h* x) @ T5 V, W; {. K // list from timestep to timestep( Y: K& T- S; S* \& K% v Y5 ?
+ o) |# W3 p- L // By default, all `createActionForEach' modelActions have
3 e. \( o% A3 e' w+ N6 m // a default order of `Sequential', which means that the" ?7 A9 o- \) \9 V Z
// order of iteration through the `heatbugList' will be
) O7 j; R/ @6 _* O // identical (assuming the list order is not changed
( A C5 A, r! i0 B: y M // indirectly by some other process).! A8 I' V4 n0 P3 k; K' V
% k* t3 t5 P$ c: S5 Z( O/ w modelActions = new ActionGroupImpl (getZone ());
0 W2 d' T( A/ `+ `, G ^' v8 [
- G6 c+ I5 m/ @* q* p try { R8 b3 {* H& e7 l" \
modelActions.createActionTo$message+ V% o" J) d: b
(heat, new Selector (heat.getClass (), "stepRule", false));
9 _1 f1 @, o& o; p } catch (Exception e) {
& J# g2 x) Y6 S7 F7 L System.err.println ("Exception stepRule: " + e.getMessage ());2 z/ r( Z( H( i! Y0 X$ S
}
) R( p( o$ G1 N% I9 {8 q d; q2 C) W( d1 I
try {3 e0 n& g9 P5 C+ C
Heatbug proto = (Heatbug) heatbugList.get (0);# n2 R+ k# \5 S$ t: |: a
Selector sel = # G% N" c: o0 y. ^
new Selector (proto.getClass (), "heatbugStep", false);: i& l A& M1 l8 K
actionForEach =8 u; [% O- T; f) ]4 N$ \
modelActions.createFActionForEachHomogeneous$call
' ?) t5 F& K; J9 [ (heatbugList,3 H4 G+ @/ Y4 t$ a9 P/ v" I# f
new FCallImpl (this, proto, sel,3 l/ l7 G$ `" M, k5 [* \' n
new FArgumentsImpl (this, sel)));
! T$ R; X8 G/ e; ~' o& U } catch (Exception e) {
; z1 C# G1 E' W3 V' t e.printStackTrace (System.err);( h: a/ Z& c, n. W1 Z
}3 ~/ k! m! [, }
! ^8 S/ \" m5 I1 ^5 t7 m& r
syncUpdateOrder ();6 ^; e8 [( A+ [0 t# \2 E' Y
4 l# {1 o$ I* ~( H
try {+ K. @0 d' ?6 h1 r
modelActions.createActionTo$message 7 v& e4 u9 P$ S- s
(heat, new Selector (heat.getClass (), "updateLattice", false));
; T% i ?9 k2 ?1 Z7 |3 R3 r } catch (Exception e) {
; W6 m' p2 H+ O8 _6 H! L6 v System.err.println("Exception updateLattice: " + e.getMessage ());
2 }; T& O+ \" q$ p' {4 }/ d. H- F } w8 h7 @7 s/ V$ l0 Y5 Y' B( w
. [# L$ O8 Z- V8 J; O. k
// Then we create a schedule that executes the& ^2 y+ i9 d0 [ }+ N# u" h
// modelActions. modelActions is an ActionGroup, by itself it( ?) a4 [0 i7 ~7 F
// has no notion of time. In order to have it executed in
* t9 d8 ?: Z+ f9 n4 p // time, we create a Schedule that says to use the
. K% b: ~( G6 A9 e0 A- c$ Q // modelActions ActionGroup at particular times. This, s" y" [8 q: O' d! w7 Z
// schedule has a repeat interval of 1, it will loop every0 d, I" n" M& u$ {1 _; w
// time step. The action is executed at time 0 relative to
1 m# O2 C) u5 o" d3 _$ F8 |; Y // the beginning of the loop.+ h$ d$ C+ V. @
: {: q$ ]* V, W; i) v1 A$ R // This is a simple schedule, with only one action that is, y3 H/ P& I! e7 v) K' j. ? u- y! b
// just repeated every time. See jmousetrap for more7 l4 o z, Z; P+ b
// complicated schedules.
2 ?. u8 P, V+ C o4 R3 A% Y/ [
! u( n4 O" ^ ^+ e modelSchedule = new ScheduleImpl (getZone (), 1);( V! [/ F m. D! {8 A' [
modelSchedule.at$createAction (0, modelActions);8 Q/ B8 l& X' k
5 `2 D" j1 e6 f: N3 J return this;
, S6 s3 L0 h, ^0 i } |