HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, b4 U( t" U* {( h2 u
6 Z4 G7 D* R- g$ e4 Z3 c public Object buildActions () {% k2 m& K: L' Z' H, M" s7 i3 i
super.buildActions();
$ N0 l& D2 Q8 L. o2 @' n
. [- C; i) ?: J7 t' u* G // Create the list of simulation actions. We put these in$ L$ N, ]) y+ a( S" R9 R' D
// an action group, because we want these actions to be" p2 k+ u, }3 t1 M2 u1 }
// executed in a specific order, but these steps should
% g! }' l% n, h- T // take no (simulated) time. The M(foo) means "The message3 \1 }3 @7 I9 q0 G6 ~5 o: \
// called <foo>". You can send a message To a particular' E1 A" A( V" Q- ?& n, t0 V
// object, or ForEach object in a collection.& v; ]) W; j' L3 w+ d5 r% ^
4 p2 f+ U* Y/ u5 z
// Note we update the heatspace in two phases: first run6 ?" `* T7 z' y6 s6 y
// diffusion, then run "updateWorld" to actually enact the, q4 }5 y2 A9 Q0 A! m9 |. g6 y) d
// changes the heatbugs have made. The ordering here is7 H! y" H, v# K! n, d! [) X
// significant!
1 Y6 f) T4 o0 Q- `- d! _ s : h/ n6 d* s! I2 Z- }
// Note also, that with the additional( {" g1 e" P- O& o! Y7 s+ m9 F
// `randomizeHeatbugUpdateOrder' Boolean flag we can' l2 V% A7 e- w* O; y2 }5 P
// randomize the order in which the bugs actually run( ~+ }/ t- K* j$ t' Z
// their step rule. This has the effect of removing any
! u) G; \- C; H# V# G // systematic bias in the iteration throught the heatbug
. s. K. H- X. h* s // list from timestep to timestep" o- X7 p7 w: S+ @
7 x) S1 @. L7 g, F4 s. }& ^3 Y% W
// By default, all `createActionForEach' modelActions have/ G/ J, L3 S; u$ A
// a default order of `Sequential', which means that the, s- Z% g5 r1 E. B5 D- z
// order of iteration through the `heatbugList' will be
/ S6 u3 e' _2 ?' R& c6 c // identical (assuming the list order is not changed& i$ L- \' C$ W' |& Z7 k3 S! H
// indirectly by some other process).
" n, _6 G/ t( z0 P$ x7 r ) `, N/ w1 E+ U% |; K% n7 Z8 N
modelActions = new ActionGroupImpl (getZone ());7 U# f9 _2 q! O( I8 \ E
; I2 I1 m* x9 W$ j! [' c try {
* |: `' @# a+ ]9 H! _ modelActions.createActionTo$message
- o/ z1 h3 W. `8 E6 J( Q (heat, new Selector (heat.getClass (), "stepRule", false));7 L; Y. ]! q+ @- C
} catch (Exception e) {$ V; t B7 x Z3 Y2 V# Y
System.err.println ("Exception stepRule: " + e.getMessage ());
" a2 P: W' J: L T: A8 x8 r& i }
9 ^" \% \4 T! d) |8 {; H
4 c/ K, K+ N& s) q4 b* M try {9 f7 `, @7 `. ^& D2 I, b4 i! v$ M7 A
Heatbug proto = (Heatbug) heatbugList.get (0);
) w9 Q+ P2 _( m ~6 v7 C Selector sel = / B {) C5 L6 A+ T
new Selector (proto.getClass (), "heatbugStep", false);$ W% p( [% K7 k. f
actionForEach =; a0 b# j/ Y) N D/ ?
modelActions.createFActionForEachHomogeneous$call1 Q. Y( i0 q! t) Q" _
(heatbugList,
! a, s7 @, x$ z! I: H* M$ I# ?3 V new FCallImpl (this, proto, sel,
; d9 N: S% m1 p/ Y8 Y! E new FArgumentsImpl (this, sel)));' l' }9 ?7 B3 S
} catch (Exception e) {
% o" t7 u6 Z! Q$ W( h# X: n e.printStackTrace (System.err);
# m# g$ G- [6 V& x, ~ }
9 H! ?8 Y2 |; s! F. {
' D4 A( Q1 `, e. g0 L4 F* V syncUpdateOrder ();9 s/ M ?8 x, t5 \, @ x0 c( f
+ r$ d( i6 z, U! B9 {9 R$ Q& I try {
) H' U: E3 G; {! Q8 g modelActions.createActionTo$message
: F" K* R" m0 G0 v% U! S6 i (heat, new Selector (heat.getClass (), "updateLattice", false));0 W, p. I. f/ X0 G6 u' D/ k% m# w
} catch (Exception e) {6 L7 _1 k. Y4 k6 R: P
System.err.println("Exception updateLattice: " + e.getMessage ());
/ q+ b, l* n6 f }
$ Z# Q0 H9 U) i; o5 ^4 Y: P - g% @: j) j9 }4 _; ^) w7 D5 |
// Then we create a schedule that executes the( G2 Y7 w: {/ L, X, k5 N
// modelActions. modelActions is an ActionGroup, by itself it S2 z: Y6 M1 ]
// has no notion of time. In order to have it executed in
p4 o6 ^+ T3 `) C/ s8 m! h7 L // time, we create a Schedule that says to use the
$ H Q0 s$ i! z) @ _) Y& I // modelActions ActionGroup at particular times. This" l2 p: G+ p/ J: u, E
// schedule has a repeat interval of 1, it will loop every/ P1 C! {3 Q, }7 _% N9 ^- x% Q; h4 ]
// time step. The action is executed at time 0 relative to" J* o: c! m/ A8 q
// the beginning of the loop.5 g4 l- u" H4 C+ x
, Z6 K9 P; X# W# u9 h0 d
// This is a simple schedule, with only one action that is0 I) f( [4 E( R4 m" B( Y, E( z: n
// just repeated every time. See jmousetrap for more
8 ?( _+ n m3 B // complicated schedules.
2 M, k1 f9 ?, M* { 7 ]7 _2 V S7 Y4 L' T9 n
modelSchedule = new ScheduleImpl (getZone (), 1);
, M. ^ m) O6 G8 b: z8 c. F0 k modelSchedule.at$createAction (0, modelActions);+ a0 E# N- O1 N; i, R$ o
1 k, C% w: Q2 c1 H
return this;; J/ F) U0 D& P' \9 y- i$ r3 E! X6 n
} |