HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 C' R m6 L. E1 t4 `" G
# K/ k. A6 d* J7 l+ z" O2 U
public Object buildActions () {/ z: n0 \# v1 N0 [
super.buildActions();
5 `9 X- L6 B1 D2 a8 K" o: d7 f 5 o1 W- V/ C3 i2 G2 C
// Create the list of simulation actions. We put these in
+ Q0 q$ N; x0 v5 Y9 m1 U) [4 e // an action group, because we want these actions to be
7 f( T$ u4 c6 e: Z, m // executed in a specific order, but these steps should
" x* V% B* b9 Q- s, Q // take no (simulated) time. The M(foo) means "The message: F! ?' n) V H: Y* ~; ^" N
// called <foo>". You can send a message To a particular% H4 S5 _/ G/ \ @8 L5 v
// object, or ForEach object in a collection.
3 t$ }- H+ Z( Z7 O/ O0 S) P d + x: ~! a3 C8 S+ O \2 v
// Note we update the heatspace in two phases: first run
2 @3 }- M( _" `) ^$ I3 G+ q3 n; n; X // diffusion, then run "updateWorld" to actually enact the
; O/ N: k9 m- R l$ A. i8 K // changes the heatbugs have made. The ordering here is$ Q6 ~1 E8 Q3 D0 d3 K
// significant!) k9 o; y1 e& R/ q+ p2 H
6 g9 `" R+ ? G! s' S0 N. i // Note also, that with the additional
5 |) X6 f6 X' S! ]4 f n7 C // `randomizeHeatbugUpdateOrder' Boolean flag we can7 I- z) G7 V5 h/ b' I& k
// randomize the order in which the bugs actually run8 n" v2 I! F% n# ^- Y: _$ k
// their step rule. This has the effect of removing any
: m2 s, v# i8 E( c7 c! n // systematic bias in the iteration throught the heatbug7 m0 K, P k, X; Q
// list from timestep to timestep; z8 f* b) p% t0 m5 h9 ?
( L5 u* q: ~, N1 f. r9 z Q" c5 O // By default, all `createActionForEach' modelActions have! Q! [$ a8 L w2 }4 M( t* k/ [
// a default order of `Sequential', which means that the
/ n( q8 c8 m) r; F // order of iteration through the `heatbugList' will be
9 d) T- u8 m5 K; r1 K // identical (assuming the list order is not changed
. c2 m$ L# p( f6 e, ? // indirectly by some other process).
6 D* D9 U( ?/ b
: V0 ?" _- V% A& f% p modelActions = new ActionGroupImpl (getZone ());
& _: ~- x y& S) c( T
5 M- P: D# G* ]/ J' y try {0 P( ~0 c% w S+ I! X. }; d
modelActions.createActionTo$message1 [( I1 ~; k( a6 h
(heat, new Selector (heat.getClass (), "stepRule", false));
' g1 g1 |* Z. @: K* } } catch (Exception e) {
; N1 `' a4 t+ _$ m System.err.println ("Exception stepRule: " + e.getMessage ());
1 m( J* o- {( k2 ~0 y }8 C- x/ L) N" M& ]( d7 D: O2 M0 r
4 `3 B6 G2 F1 `0 W/ y2 ]( a try {1 G. |7 f8 Z; Q' m
Heatbug proto = (Heatbug) heatbugList.get (0);
$ _9 S4 u' ]/ q# q Selector sel =
) @3 X$ v; e0 [! y6 N2 b7 I* j" ` new Selector (proto.getClass (), "heatbugStep", false);
Y; V2 Q5 }% m% ~# \" n! E actionForEach =
2 J8 W( q" a& v9 A A2 V/ F modelActions.createFActionForEachHomogeneous$call7 ?) S. z8 W* ^" d1 {, A
(heatbugList,
( R. v3 g# ~, K# v3 h" ^" z new FCallImpl (this, proto, sel,
7 p3 k% H6 }* h new FArgumentsImpl (this, sel)));/ [1 H: L% H$ I5 e$ {: g) U
} catch (Exception e) {
: o6 l' Y W3 N6 K e.printStackTrace (System.err); a0 S2 F6 c X9 v
}/ [7 M, I& m, o+ E7 r: `0 B8 g
0 w3 ]6 W. T* ?4 i/ T5 E! K9 n
syncUpdateOrder ();+ [5 D$ k v3 N0 S2 q
8 a; R/ ~4 A% M- y: u8 k' a3 B
try {
" }; }# M6 c1 g' u modelActions.createActionTo$message & z5 R% ?) e+ E/ }
(heat, new Selector (heat.getClass (), "updateLattice", false));
( t' ^) J) |- q9 [6 v } catch (Exception e) {
! G! ~6 ~& Q( d" ]3 S$ ^ System.err.println("Exception updateLattice: " + e.getMessage ());- O0 p& v+ s0 X3 D8 I% B X
}* v) l9 N7 m2 [* B, ?# Z8 T6 |# n
* u8 C* e0 ^0 I1 c% x! M! K
// Then we create a schedule that executes the! F( D' e5 c, p w! N
// modelActions. modelActions is an ActionGroup, by itself it7 T9 G! y$ } \1 @' W/ F
// has no notion of time. In order to have it executed in
# v5 ~! x* ?1 | // time, we create a Schedule that says to use the# k) B: j' ^$ s; M7 i6 _5 M
// modelActions ActionGroup at particular times. This
- X3 V; D5 N8 ^/ T. ]0 c // schedule has a repeat interval of 1, it will loop every; D, J8 f2 V* A) Z+ b! g5 l5 c
// time step. The action is executed at time 0 relative to
6 \9 V9 ~" k( T! p/ F! L; J- w' H // the beginning of the loop.2 b: ]* [& p6 L4 x% l; f4 j0 w
0 W# |0 j- P1 [/ i- i* `
// This is a simple schedule, with only one action that is2 q9 r5 T/ V8 f# U
// just repeated every time. See jmousetrap for more
. u8 A0 |6 j9 u& f$ T // complicated schedules.! A. \ u( i' w& A
3 B5 Y9 |# i" U% {
modelSchedule = new ScheduleImpl (getZone (), 1);
" m3 g# R( B% {0 z+ W modelSchedule.at$createAction (0, modelActions);
" x! S, h+ Q( S: {4 \ E& u+ G7 C1 Q
$ n3 U+ Y% Q* W, R8 ` return this;
5 E8 s I; F. `, a T } |