HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 @0 C; B& E5 A9 @+ d
! n" C" {. a' \
public Object buildActions () {
! {9 K' c5 r0 @9 G: i super.buildActions();0 X8 y) h% I+ p7 _* l" G
* A2 ]% ^7 S7 Y0 D // Create the list of simulation actions. We put these in
; ^0 _( U3 U d; d6 M; m4 ] // an action group, because we want these actions to be
+ b& k, r9 M3 z$ I // executed in a specific order, but these steps should/ [. O5 [7 G0 ?( G9 C+ R
// take no (simulated) time. The M(foo) means "The message
; c$ _! j2 ~5 g& T& ^5 W // called <foo>". You can send a message To a particular
9 k: I" w9 ]9 O, |' m // object, or ForEach object in a collection., P! |! X& L1 \5 t# I
# ]" |! v; L& A( }' i // Note we update the heatspace in two phases: first run
1 {" e2 p' \" U2 d+ ?3 I // diffusion, then run "updateWorld" to actually enact the# w: j3 f3 F& _; s8 {/ y! E
// changes the heatbugs have made. The ordering here is
' [' |8 @3 {: R3 \* k* } // significant!1 Y0 R! K+ R% F0 i8 Q# ^
T! T7 {" K3 y9 |
// Note also, that with the additional" i8 O: a( S7 P( _" X
// `randomizeHeatbugUpdateOrder' Boolean flag we can' N _; v1 V$ _ T1 n* u4 X
// randomize the order in which the bugs actually run
! H# L+ w/ ? c0 q // their step rule. This has the effect of removing any
/ ^) H7 M% Z$ z' K // systematic bias in the iteration throught the heatbug2 `: W- @/ `3 z3 M- T8 V' b
// list from timestep to timestep
0 G/ T* D, } Y 4 @1 `# l( x3 Q! H" v; _" o
// By default, all `createActionForEach' modelActions have9 U) U! ?( p, Z/ q7 A! k) ^4 f
// a default order of `Sequential', which means that the
1 ~- b3 ?& Q/ X( |2 G // order of iteration through the `heatbugList' will be( ? K+ [3 r, G8 V) f% ]( W
// identical (assuming the list order is not changed
0 k" z$ B( ?( w3 X2 \% j // indirectly by some other process).
1 L' B4 o- D/ m 6 z4 w* l( C6 T8 x
modelActions = new ActionGroupImpl (getZone ());3 S5 W5 N1 ?) E5 U0 X
5 L# z; o b8 h- i7 w) I
try {7 g0 X" y6 w$ w& J
modelActions.createActionTo$message- h& }8 i% c. g: r- T
(heat, new Selector (heat.getClass (), "stepRule", false));
" v: E0 C( G" f& p4 k* {5 x3 @ } catch (Exception e) {# P8 i% S: O6 d8 i5 c4 E7 i
System.err.println ("Exception stepRule: " + e.getMessage ());
5 w, `( d; C% ?' e0 c) N! V }
! ^' a `+ c7 w! |: I
! f( }. K% n/ W2 L try {
8 [9 h5 R& k& P* A Heatbug proto = (Heatbug) heatbugList.get (0);& z9 c q+ Z6 }7 R0 B2 s
Selector sel = - p/ h6 p+ G+ B' w
new Selector (proto.getClass (), "heatbugStep", false);
S/ U1 i9 M1 ^4 R8 m actionForEach =
* [+ W- i& C6 l, D3 S% ^8 k modelActions.createFActionForEachHomogeneous$call/ F/ Z7 o6 Z" c) N! _
(heatbugList,
6 K2 v! {8 u% S! s# q5 w new FCallImpl (this, proto, sel,
& u7 V) \4 O0 R0 k new FArgumentsImpl (this, sel)));
' t5 }. D2 U. O' w& l8 H2 T } catch (Exception e) {2 q! [( y2 ~+ [% j( Y
e.printStackTrace (System.err);
1 m) [+ h5 g1 a @" M$ m( B }
) T6 [6 F# e) ? Y: d 9 C M7 Y/ e6 o/ U
syncUpdateOrder ();: {; G) J+ T/ | _" o0 e; W; W$ I
1 U, E$ l- W* u4 S try {. R- y7 A1 y. h m ~
modelActions.createActionTo$message
7 K F& v0 v P: q. f (heat, new Selector (heat.getClass (), "updateLattice", false));. b6 o" F' J: l4 r
} catch (Exception e) {; n$ Y) A: A3 @! ?( q
System.err.println("Exception updateLattice: " + e.getMessage ());
3 u) ?# ~/ z3 p) R/ h! } }9 i$ F, L' J1 S& P
: ?$ c2 S: \6 o6 c; J0 k n3 l# ?! L // Then we create a schedule that executes the
! H0 g9 ?* o: g // modelActions. modelActions is an ActionGroup, by itself it$ o) y: }6 @9 d j; Z4 b# s) h
// has no notion of time. In order to have it executed in B. t2 v; M# K n9 A: X) |
// time, we create a Schedule that says to use the- U% V, H! M4 e7 w ^3 r" R
// modelActions ActionGroup at particular times. This
+ G. R+ _/ U% f // schedule has a repeat interval of 1, it will loop every
* ?6 r' g/ o$ r // time step. The action is executed at time 0 relative to' f d" B! ]6 u m
// the beginning of the loop.
6 q/ o4 B7 x' L; [
# R4 x! |" L0 S$ L4 f4 e // This is a simple schedule, with only one action that is7 A3 y( n) c F$ b! l
// just repeated every time. See jmousetrap for more( n& }( D3 g) R6 p$ W/ T$ ^% z
// complicated schedules.( b: }* ^7 e" a) `
$ S, h) f0 W" q( F Y% u$ O) p
modelSchedule = new ScheduleImpl (getZone (), 1);
; N( Y* j+ h3 f O: }7 c1 G4 k modelSchedule.at$createAction (0, modelActions);
, t0 e d" E. `/ B. O0 y A4 J' E : i) S- A# `! ?8 _
return this;3 _. @+ L% g/ ?. ~1 J& X0 D% v% L
} |