HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' `( _* I$ g( Z) s; v4 d
0 |) E: ~9 a# ?7 y/ v5 i0 ?9 c public Object buildActions () {
; A& f$ t' K" ?" g/ {9 k super.buildActions();
" E- `) ~) B! ?8 u8 r0 J% X
. K8 L+ b2 n/ W4 T // Create the list of simulation actions. We put these in
, _, c- a8 D( \ // an action group, because we want these actions to be
g9 o- V: y' \' { // executed in a specific order, but these steps should
- l8 q4 B- u. v7 g* p8 e0 P+ ` // take no (simulated) time. The M(foo) means "The message d) |1 b; i7 q. Q
// called <foo>". You can send a message To a particular
" ?5 I. b( F" Z# J // object, or ForEach object in a collection.
- a: [2 a* ? _ H
: o8 C( g( ]3 t8 O" n // Note we update the heatspace in two phases: first run y, }( G8 w" F& z" X8 X4 |* C2 L
// diffusion, then run "updateWorld" to actually enact the
$ _' D0 k9 R: c3 q3 b7 b( r // changes the heatbugs have made. The ordering here is- i. ^8 T5 l$ g5 d& ~
// significant!5 {. z. l7 R& x% F0 e
; r6 ?! g6 E) J u7 `
// Note also, that with the additional3 V9 } |0 ~" x) A2 K3 ?: F1 n
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 k1 b- I1 r: o& D0 D
// randomize the order in which the bugs actually run( \* C B; t8 ?0 |9 v
// their step rule. This has the effect of removing any6 n- D/ V* {+ l& L7 H- |
// systematic bias in the iteration throught the heatbug
+ Y& t5 o8 ~' O0 n // list from timestep to timestep
! J8 w# N0 v- F ! e& v% w% [9 ~7 c4 l# z* i
// By default, all `createActionForEach' modelActions have
4 ]4 v+ }; m1 _7 L" Z // a default order of `Sequential', which means that the* Q. G" J! F8 P0 }( L4 [
// order of iteration through the `heatbugList' will be* Q, h2 l9 o" ]
// identical (assuming the list order is not changed
8 ]# |' K0 L* P, m9 x // indirectly by some other process).5 g3 l& J4 s* y+ M# L; e) `
, b- g1 ^: w) [% L& {1 A modelActions = new ActionGroupImpl (getZone ());
. x' O8 k8 U8 n. K" p
3 k( V3 p. Q$ H7 C% h5 E8 F+ \ try {- M$ q/ g3 B( _/ R" ~& O* ~. g
modelActions.createActionTo$message
& }8 X% o3 u7 m9 c+ \4 ?9 e (heat, new Selector (heat.getClass (), "stepRule", false));# Z: a0 E! m* ?% x. J& ^) ^* U
} catch (Exception e) {& w7 w: s2 a( }' f
System.err.println ("Exception stepRule: " + e.getMessage ());
* ~5 S/ A# @) w }9 Q i' g5 k/ W3 Z$ x( v
9 J Z& k" S: }# [6 G
try {
) ?* K/ Z( Z7 \6 A+ d0 P, Y Heatbug proto = (Heatbug) heatbugList.get (0);4 q+ L+ D$ _) N& t: @6 R
Selector sel =
8 j S" v- Y h4 H new Selector (proto.getClass (), "heatbugStep", false);
x2 m: ~) M5 p2 Z6 @7 E actionForEach =
" X: A3 A( {/ R% O' R8 ^# ? modelActions.createFActionForEachHomogeneous$call
. s& }, [ c6 v5 p9 l5 o2 b$ K& L# u (heatbugList,6 f) ]! e/ Y& [/ q; ?- W: d- ]! k0 c& X
new FCallImpl (this, proto, sel,
( e' Z; z" g$ T9 ^6 h$ ? new FArgumentsImpl (this, sel)));
: a. O3 g( V% E0 e" b% d* ] } catch (Exception e) {/ d4 B5 N& Q | @* M- O: O
e.printStackTrace (System.err);
; Y- S/ I* O1 \3 C X. d3 S }
& {( K0 L7 c* ]/ N1 q
! ~3 f7 L% R, j) \- d+ L syncUpdateOrder ();
8 E3 O* u* O, Q1 N0 C
* Z" c, n' X5 \0 Z2 E, g try {
' g A. L, M" m4 c* n modelActions.createActionTo$message
" [6 O7 p7 ^1 d: H, @/ m: b2 Z (heat, new Selector (heat.getClass (), "updateLattice", false));
4 C# T3 \8 o' K2 ~; t, H' u6 [* ] } catch (Exception e) {: K b [6 c8 ?/ R9 N
System.err.println("Exception updateLattice: " + e.getMessage ());$ _# p1 G3 d0 u1 x3 p& v) K
}8 t$ W) B( a, @; b [
8 c/ ]4 E+ W, P5 L1 i4 } // Then we create a schedule that executes the
9 X. l8 H. M2 ]9 `$ [" a& p // modelActions. modelActions is an ActionGroup, by itself it
# R) C# R/ l0 _4 `7 y // has no notion of time. In order to have it executed in- ] D. U. a+ n" j
// time, we create a Schedule that says to use the; m4 i* r# B: K# x5 S& T0 I
// modelActions ActionGroup at particular times. This
: l; M) ~& j% }/ |& A. S // schedule has a repeat interval of 1, it will loop every
) ?" l2 v1 B6 [! x0 u) J4 i) } // time step. The action is executed at time 0 relative to
, c' @' {# Y# C" P8 \ // the beginning of the loop., A' A5 h" N! O0 h! |/ f- y! ^
; G0 U1 ?3 P7 c* ~% c1 U3 |
// This is a simple schedule, with only one action that is
; k# ]( {2 J/ g4 f7 F // just repeated every time. See jmousetrap for more
9 h+ A/ C) V/ S+ U1 n4 l7 ^# c // complicated schedules.
4 I0 W! x5 D1 ^; @* {$ }% x
! v, @% Z6 L' _# F# F. z- b modelSchedule = new ScheduleImpl (getZone (), 1);; g9 S( X5 _& X9 x( t6 C0 F' M4 t
modelSchedule.at$createAction (0, modelActions);6 t1 K8 W. K! s) l* D0 d. C
4 E4 x1 W Z2 F8 P+ X1 k u3 I return this;6 n+ o6 h1 `. P+ A+ H: j" x
} |