HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 Q( T: ]! }+ ^ \8 u: S# \+ k3 Y
/ x1 {7 ~( b/ q% _. C public Object buildActions () {
$ }& C, Y3 j; k3 X super.buildActions();
: x7 @3 ]! Q+ o9 i7 ` 3 h" q% k6 b% \4 @) i1 j9 x
// Create the list of simulation actions. We put these in4 C/ c: Z. A: O' F a
// an action group, because we want these actions to be! _! b$ k1 |6 t
// executed in a specific order, but these steps should
# {, J* r% z; u9 v) p6 l% g // take no (simulated) time. The M(foo) means "The message
) ]) ?4 t: ^& Q+ A% C6 Q+ b // called <foo>". You can send a message To a particular
, _0 }; v& h5 ~/ J& B% l, m, n // object, or ForEach object in a collection." ]. u* ^6 e2 U v% ?* d1 B
& w4 @2 `" c, M1 P2 F9 l) C
// Note we update the heatspace in two phases: first run
\% G- o5 a# u // diffusion, then run "updateWorld" to actually enact the. v2 |1 O6 q& c) t
// changes the heatbugs have made. The ordering here is
8 K, R' N& E8 S. K" C, ?+ `; O // significant!
- I Q- D/ J4 B- d }$ N& q) H% {; l
- ?+ [9 N9 Y2 z& j! p* f4 u // Note also, that with the additional4 C [7 X4 s7 s. C6 |3 ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( x" m2 H( F( v3 G0 B9 Q9 N5 ^) N // randomize the order in which the bugs actually run
" M0 Q. c: u8 J4 o# u" K* v // their step rule. This has the effect of removing any
' ]- k: o* e: _% @9 J // systematic bias in the iteration throught the heatbug- V- b" S6 b$ k* q
// list from timestep to timestep# d* F' f' I/ q& L! [/ b
: n, X0 w! w) ]) J- f9 ]$ q+ t' ?
// By default, all `createActionForEach' modelActions have: m" j- G) W4 x: h5 T( _4 d
// a default order of `Sequential', which means that the; K4 N1 K( v0 F8 l( ]# u
// order of iteration through the `heatbugList' will be
" ~9 |. c5 b. @7 \ // identical (assuming the list order is not changed# C' z( M& `( D: C
// indirectly by some other process).
6 @- j! r! @8 Z Z) q( O4 i( `* y* p
modelActions = new ActionGroupImpl (getZone ());$ U. V- Z! x4 i( A3 b
$ `% q G4 @( P( J6 \4 _9 c
try {
, g1 a8 C& h9 s9 |3 k modelActions.createActionTo$message0 h9 q3 x1 z4 k9 s
(heat, new Selector (heat.getClass (), "stepRule", false));* g0 ~* `3 Y j+ D+ K! L
} catch (Exception e) {
4 h9 C3 Z0 {- a4 | System.err.println ("Exception stepRule: " + e.getMessage ());
( L8 |. I! ]4 X9 E4 }4 L* h }
. I: _3 Q2 M, x7 z/ Y" T! {
. E! V3 q2 J) ?. f$ ` try {
+ Q+ x( Q/ u9 u, T/ W; y$ _ Heatbug proto = (Heatbug) heatbugList.get (0);( M( A" _: v; u j7 J! V e$ a# c
Selector sel = 6 a! h3 d( d- G5 C2 I
new Selector (proto.getClass (), "heatbugStep", false);
6 S- v5 B! Y( ] actionForEach =8 v! g- D5 i- E2 X, I2 ?1 {+ a" ^
modelActions.createFActionForEachHomogeneous$call& H/ e& ], m5 q# Q& e V' H% x# b
(heatbugList,2 n5 \$ s5 e5 T' ^* m1 y; Z2 M1 V
new FCallImpl (this, proto, sel,/ c( Z; Y D; x. _. {
new FArgumentsImpl (this, sel)));* P4 q4 T& D. J. f8 Y" ?1 E9 Z
} catch (Exception e) {* ^, H1 Q; B: ~" _( d
e.printStackTrace (System.err);$ X7 S; \$ u) _* Y( O- b5 {
}2 K/ A9 g$ q) N0 ~7 W
# _2 S' S6 U c! E
syncUpdateOrder ();% Z$ ^ A" m. C7 V% Z3 n
" M3 l7 O4 V$ z! k9 p1 U- |7 |' P
try {' q. n1 f, b: K! p; {. e9 |
modelActions.createActionTo$message
5 a) D+ a, o4 C M+ y8 N8 R) W (heat, new Selector (heat.getClass (), "updateLattice", false));
/ o+ T+ |4 H& k+ C } catch (Exception e) {- w d) B0 U, A4 ]
System.err.println("Exception updateLattice: " + e.getMessage ());6 i0 f1 M3 K7 u) ^
} q7 p4 C! ]" v) t5 b" t
! b, u1 S/ ?/ e3 @: y% n
// Then we create a schedule that executes the
8 X: e- q( X9 d3 z5 v // modelActions. modelActions is an ActionGroup, by itself it" a0 ?7 z$ h5 P
// has no notion of time. In order to have it executed in
; F5 _0 _8 B x7 I' a+ z9 E7 d // time, we create a Schedule that says to use the5 m3 w9 O* D \7 F6 F0 k+ O
// modelActions ActionGroup at particular times. This0 A4 {8 ^! a6 s s
// schedule has a repeat interval of 1, it will loop every: o2 {9 j5 k- C
// time step. The action is executed at time 0 relative to
6 _! `# F& Z6 \7 L) P // the beginning of the loop.
0 J- s+ y6 q, A# s2 P: T" k7 ~
2 H4 N/ E) {4 N8 w# Q2 [& t# ] // This is a simple schedule, with only one action that is
1 N& L. N3 h$ j9 ^! f, l" Z: Y, ^& M // just repeated every time. See jmousetrap for more
, H% C, d1 _, W+ ^% j // complicated schedules.3 Z: u9 @0 }; W' J& G" u- n% \" g
( H' L% i3 t1 L modelSchedule = new ScheduleImpl (getZone (), 1);# ?0 l4 N# ~( r8 b# q+ i
modelSchedule.at$createAction (0, modelActions);
. T3 r& j# K* E2 G3 @
' W# g' p' o! _$ u& E6 M) V/ K3 V return this;; D4 r. p* e, ?' [
} |