HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 L, h2 z" h( u+ y+ s. c5 E
1 B( H, h* H( i" A; Z2 y public Object buildActions () {
4 F( i" i2 d( a5 S super.buildActions();+ z' t+ X% \/ ~- R, \/ X+ w
2 D) Z2 \4 |* S4 V0 Y" ?1 J K
// Create the list of simulation actions. We put these in
' V2 \4 z1 {- O+ |1 | // an action group, because we want these actions to be) A @) }& T( @1 [( ~
// executed in a specific order, but these steps should% a i: {: F* M
// take no (simulated) time. The M(foo) means "The message# j- I$ `4 ?7 w% k
// called <foo>". You can send a message To a particular7 R6 u3 h0 f( a4 J
// object, or ForEach object in a collection.
' N; ^, v2 Q# L9 i1 `" P; v! k
( `3 E, S) ]: `: s2 t4 b // Note we update the heatspace in two phases: first run2 U- M- ^7 |6 T
// diffusion, then run "updateWorld" to actually enact the+ Q2 J6 A# p7 g' m- _+ T- N
// changes the heatbugs have made. The ordering here is$ Z: S5 u. F. L7 L) C1 `
// significant!1 e- k7 @/ Z% g
( b, N/ J# N+ V/ B+ ~. m2 p // Note also, that with the additional
1 w q6 R+ Q: s5 F // `randomizeHeatbugUpdateOrder' Boolean flag we can6 P/ L7 K: G- M
// randomize the order in which the bugs actually run: P" w' K0 p+ q: r: Q9 ^' O9 Q
// their step rule. This has the effect of removing any
0 g8 D, }& X) J7 @8 G/ t( L0 a // systematic bias in the iteration throught the heatbug
7 {- j3 v$ |* n; l7 S7 E6 _ // list from timestep to timestep) t0 Q' F& F D' Z/ w
4 K( A+ {9 d$ R/ g. H$ P" y // By default, all `createActionForEach' modelActions have/ |4 l! y# \! C/ G* e. ^
// a default order of `Sequential', which means that the
. _4 e+ c/ a; l' \ // order of iteration through the `heatbugList' will be: `+ w0 E. |9 ?; h7 J, P
// identical (assuming the list order is not changed7 r) Z0 f" W% y, J8 Z- T, N
// indirectly by some other process).' g$ ?, t/ T* N0 }% E
0 m+ |2 J# P8 P, ? modelActions = new ActionGroupImpl (getZone ());
5 r3 l6 P$ L- x* A- z& D+ U3 D+ S9 u
try {7 U! j: F( Q* h$ k* r2 Y
modelActions.createActionTo$message
! s; ~' y# S8 ?) ?! b2 r (heat, new Selector (heat.getClass (), "stepRule", false));3 W( b& r3 h/ R6 S" e
} catch (Exception e) {/ w+ h/ x4 \/ ]; L0 F8 @/ K) K, H
System.err.println ("Exception stepRule: " + e.getMessage ());
7 Q+ Q3 q6 r. J: ? }
; B7 h. y4 J0 w2 F1 ]
0 f* S( k* h; N% t4 Z6 c try {
* |3 L5 X# }& h* A1 h! I4 l Heatbug proto = (Heatbug) heatbugList.get (0);
$ K3 t3 R) F& R$ K7 ~$ W+ {9 E Selector sel = / E+ K6 g: N5 @8 p; X' a
new Selector (proto.getClass (), "heatbugStep", false);( r7 P( I; `& N, m. Z/ b
actionForEach =
5 e3 @' g# b3 E# p3 v( z2 l modelActions.createFActionForEachHomogeneous$call' u9 j* T: y2 h3 f: X7 g8 R+ a9 `
(heatbugList,- V. c- N0 \/ _: q
new FCallImpl (this, proto, sel,
* S+ o8 k2 X6 l7 q5 B1 a! f new FArgumentsImpl (this, sel)));
2 t. g6 a" \9 S, L } catch (Exception e) {
# w& H* c1 A" N) W& Z3 T e.printStackTrace (System.err);
' m7 F! I, B O! |& \ }2 i3 f& k7 q% R( h
% k9 o) l" n9 h s# z/ r
syncUpdateOrder ();
) I! ~9 q$ b; y& ^
& |/ ~+ {% [1 _/ |, } try {
: G! S1 U+ u* u8 n) A X6 N" j& j4 y* Z modelActions.createActionTo$message
4 K& w! Q# q ~( S+ A: G% M (heat, new Selector (heat.getClass (), "updateLattice", false));
& P$ j4 x" a8 H) G _' P } catch (Exception e) {7 F! a+ }- P: @3 h
System.err.println("Exception updateLattice: " + e.getMessage ());
) k! g/ f# z/ ^5 f @4 A7 { }
9 h( d7 |- c, u2 I& B# g @ 5 c1 [0 X5 t0 K) k h
// Then we create a schedule that executes the
; a3 B% S( \8 D/ W' G" w. m // modelActions. modelActions is an ActionGroup, by itself it
8 S% L6 c3 f# g' K // has no notion of time. In order to have it executed in' }* B6 A _1 T% H' K8 h
// time, we create a Schedule that says to use the
- N. I5 T1 b+ \, {) X# G; ^! n. w+ N // modelActions ActionGroup at particular times. This
' ]* k% Q4 J7 `5 C0 B; U# A. \" M // schedule has a repeat interval of 1, it will loop every0 m8 F0 f7 s6 n; j3 C' X: B) C
// time step. The action is executed at time 0 relative to
" ^0 R, ~( Z/ K& b // the beginning of the loop." [0 n9 g! U5 L; e
- Y" ~/ ^( J x // This is a simple schedule, with only one action that is. O, x; }1 w0 S9 `. |; U
// just repeated every time. See jmousetrap for more
% h+ M$ A! L9 B! P5 i% L' s // complicated schedules.( [! k$ V# n' j9 `) y9 r1 D
( F! Z9 {. I/ @# N" B: W ~
modelSchedule = new ScheduleImpl (getZone (), 1);" J: z. _& q3 z8 O+ B0 D
modelSchedule.at$createAction (0, modelActions);
/ S2 @. }; |9 j7 p0 }/ @
8 E) R* C; `9 C' @! R return this;! h0 G5 Q6 p @8 ~. T! f
} |