HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! }/ O* r1 C' {1 s/ b! v! r
/ Z q# P3 v+ c% y3 n
public Object buildActions () {
D% q. G& P. X: ^( n5 V) C super.buildActions();
P# i- N) J/ B3 z 5 l$ K- ` b- h
// Create the list of simulation actions. We put these in
, z& ]# q8 V" e( C8 g7 J // an action group, because we want these actions to be, y# }+ K: Z5 i9 k
// executed in a specific order, but these steps should7 |8 b' ^1 K1 O0 k/ S5 D& R
// take no (simulated) time. The M(foo) means "The message( Z$ c. G ^) q* D: J
// called <foo>". You can send a message To a particular
3 _( R, h6 [; X5 [8 A // object, or ForEach object in a collection.' ^: M( D, b1 Q9 B& Z" {# P
1 e$ l; L' v. Y0 ` n
// Note we update the heatspace in two phases: first run
3 X" |- h1 i$ }3 c9 `5 H/ Q // diffusion, then run "updateWorld" to actually enact the
! h2 T* z$ M* c1 g ]& k // changes the heatbugs have made. The ordering here is
6 P' H. @3 ~" J5 f* x" d6 n // significant!7 E5 u/ q; w* ?" X! y, K
8 |/ q* \6 H/ N; Q/ V
// Note also, that with the additional* l! h7 `) v: B9 L3 t# @1 n) ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can" M: w, V5 x B' l! o+ Y% F/ e
// randomize the order in which the bugs actually run
; k6 ]/ c c! l7 S4 `/ L, g // their step rule. This has the effect of removing any
3 y# i9 _$ l, }. M // systematic bias in the iteration throught the heatbug
. A$ M% _% O, L# U6 h8 C // list from timestep to timestep
' F) @9 V9 R A; U
! g U$ _5 o( o3 F) I // By default, all `createActionForEach' modelActions have
b4 y& v/ \8 G" d2 X0 \ // a default order of `Sequential', which means that the0 W' m. a+ j+ C" l) e* a: t
// order of iteration through the `heatbugList' will be) V- k& w+ q& |% P
// identical (assuming the list order is not changed7 B& P3 G* N5 n
// indirectly by some other process).! @! t( x7 o6 [) B
4 Z) I4 ?" T6 Z( o: f& j' P
modelActions = new ActionGroupImpl (getZone ());2 o/ R4 ^8 B: y1 x% c' ~2 Q
; ^% U; U# w: S% B( L2 j z
try {
; a/ Y* w" j2 `* O& g1 O W modelActions.createActionTo$message
7 k$ @- S/ r0 f" e (heat, new Selector (heat.getClass (), "stepRule", false));
4 w' M! J* v* z6 ` } catch (Exception e) {
+ [) A/ @0 `2 | System.err.println ("Exception stepRule: " + e.getMessage ());
4 ^- z$ G0 q! {& R' `8 w/ p/ g }
0 O3 O* D( ]- n! W' M2 I1 t' M6 C3 z7 @" N. O- Q0 U9 `
try {" c! ~5 Y) E4 N5 h# R
Heatbug proto = (Heatbug) heatbugList.get (0);
2 ?. O H( ]; |# X5 q' Z- V Z Selector sel =
/ U1 V C' |+ c new Selector (proto.getClass (), "heatbugStep", false);
* u) B* D. U3 D; f' t! b1 J' M actionForEach =
$ S8 p( D: u* t7 l8 B' x Q- [ modelActions.createFActionForEachHomogeneous$call+ j$ X% `$ a: b. K
(heatbugList,. |* {0 P1 h& i( f7 [
new FCallImpl (this, proto, sel,
* r: j' y! m; N2 s1 G3 i L. q new FArgumentsImpl (this, sel)));5 `% c: q, z+ k( E" J
} catch (Exception e) {
% k. g3 d- j I5 t. a' C e.printStackTrace (System.err);7 `3 \. [9 |7 m% ]6 u
}
i! {9 ]9 c. t3 `6 A8 z- j+ ^ 1 F) k K% ]# i$ X: m5 `3 T9 r6 s, `
syncUpdateOrder ();/ }. G+ O* T7 r9 @
7 L! m0 q$ Q4 K, P" ? try {
) R0 X4 z2 |3 I" H( f modelActions.createActionTo$message # P* q8 c. v+ t' k0 Q7 F
(heat, new Selector (heat.getClass (), "updateLattice", false));" B: u! \% D2 l) }1 D% J: F. Z
} catch (Exception e) {
5 h$ z e& a/ ^1 B System.err.println("Exception updateLattice: " + e.getMessage ());* x6 O" \) I; x3 l P0 p& U
}7 U; O7 i$ i* Y- A0 R8 l
V$ ~8 L" R6 `4 K' @ // Then we create a schedule that executes the
1 a: R1 `6 M3 i- |1 v: w: W // modelActions. modelActions is an ActionGroup, by itself it
+ |* _: L+ x+ g' W$ N. ` // has no notion of time. In order to have it executed in
: j, t6 j1 B D# y; G // time, we create a Schedule that says to use the' L- j& w1 F I( ^
// modelActions ActionGroup at particular times. This4 N1 V' `# R8 b e$ M% {
// schedule has a repeat interval of 1, it will loop every
9 v. t% e8 x. [ f' | // time step. The action is executed at time 0 relative to2 X5 o6 S: _/ F( P0 H
// the beginning of the loop.
4 K! |! m. r& ]/ q. p7 A# C# `5 t. i1 s7 \
// This is a simple schedule, with only one action that is8 _: X+ \' w2 c- U! v, I
// just repeated every time. See jmousetrap for more3 l0 Z0 d! ^6 v- l
// complicated schedules.
: ^& @7 Q% L1 d# \% U) h: @6 |) n' I. R
5 ]) T. r! l w- T3 H0 h# b modelSchedule = new ScheduleImpl (getZone (), 1);* t& k" A" }# [- Y9 d" x* ^
modelSchedule.at$createAction (0, modelActions);2 C x; P& [; G% v
3 n: B2 \5 V8 p) S return this;
8 B/ G* l; {0 d0 s } |