HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
D2 H# y# C( ~ X6 c
$ o! C9 c9 A) L( d" K. t! [ public Object buildActions () {
# _. y5 q" d4 v7 z3 j super.buildActions();& P& u$ x& ]9 |" {/ o. v
' _( B9 h) Y7 _) @3 Q( \) M // Create the list of simulation actions. We put these in6 F# Q6 O4 n* j: G. v: i
// an action group, because we want these actions to be
; C0 ~0 g5 J+ _4 ] E3 q6 R% o2 Z5 r // executed in a specific order, but these steps should
. ?; Z6 O, w, F. S( A: ] // take no (simulated) time. The M(foo) means "The message9 H8 \, H# O/ L% `4 @- T8 q5 r% \
// called <foo>". You can send a message To a particular" j1 \" U2 e: U: Z. ] l
// object, or ForEach object in a collection.
9 Z8 x1 z, M5 y2 x8 o
+ k* N+ {( g6 U( m$ G: o6 ` // Note we update the heatspace in two phases: first run; @4 X8 @3 b; t( W6 h
// diffusion, then run "updateWorld" to actually enact the6 ~' O: i" [( b' ^; u
// changes the heatbugs have made. The ordering here is
* d; P( H( k! N/ X* q: E3 T // significant!1 f- s( b* X; F7 M5 H5 G
" o1 w. V- n& Y, I4 v5 D0 p, G7 ~
// Note also, that with the additional- U. g/ Z0 H" |8 O; ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' g" x* q& R5 v2 O/ u // randomize the order in which the bugs actually run
+ P" l1 @9 ]8 F, j' ~" w // their step rule. This has the effect of removing any
* v4 u. b" q4 B6 S5 ~- w; J // systematic bias in the iteration throught the heatbug& [* Z) `2 h4 p, B5 d- F
// list from timestep to timestep" ]9 K# v2 e2 P8 s; a- \
* G4 ^) S0 N/ t: N // By default, all `createActionForEach' modelActions have4 P9 u! i3 `4 O
// a default order of `Sequential', which means that the7 C i8 T: [% C5 o7 `* r- }
// order of iteration through the `heatbugList' will be
l* k7 _8 ]: h# i7 E0 T9 Z. a // identical (assuming the list order is not changed
2 ]$ E" D- A6 m' }- h7 B // indirectly by some other process).$ f- z- B3 S) {7 K7 \" Z* X9 ?
+ C5 `5 z* P, \ Z) n. D6 [ modelActions = new ActionGroupImpl (getZone ());
* A1 ]4 k! I+ R' D$ C6 a4 `6 G9 L3 c) j
try {
. i7 |1 U5 s: M, X modelActions.createActionTo$message2 T/ m8 m* k* Z0 i( P. A
(heat, new Selector (heat.getClass (), "stepRule", false));. T5 \8 M; w: A
} catch (Exception e) {+ z- l; G# t1 N* r9 y/ d' v; M6 n W
System.err.println ("Exception stepRule: " + e.getMessage ());
# A' z' ^9 v7 T/ L$ n. E L }2 h9 q0 o& R7 F0 k* W
d6 l. x% m6 t$ ^" g* {
try {9 i' _7 N8 S+ J3 w5 r& ^; l) x, a
Heatbug proto = (Heatbug) heatbugList.get (0);$ m5 w. Z4 @6 {" Y6 U2 C5 P
Selector sel =
! } Q8 Y: g# h/ [: n. t/ ~ new Selector (proto.getClass (), "heatbugStep", false);( @! x( K; k6 S
actionForEach =
2 w; O: Z5 x+ n2 \1 ^0 r! r% f+ m modelActions.createFActionForEachHomogeneous$call
! L1 d! e: x: ]( d (heatbugList,
+ L3 V4 `7 a4 j' V5 J2 ]' C8 ] new FCallImpl (this, proto, sel,0 D3 n) e0 k" d0 B3 `
new FArgumentsImpl (this, sel)));
- Y) y8 r' X: F; L' e4 `$ g5 q$ m: W7 y } catch (Exception e) {" ]/ O" e- f4 O9 F: N7 I( ^
e.printStackTrace (System.err);0 G2 P1 R! B! ]# I# h8 ^
}1 J) q/ r* T, L2 V3 X
- s3 |5 _3 k% S. t* a syncUpdateOrder ();4 G* Q2 {2 f( r8 @6 Y5 |
0 x; D9 A* s2 [: x( r! Y try {' U9 C5 F1 ~( w9 l# b
modelActions.createActionTo$message S- `1 @: o4 s/ J7 O
(heat, new Selector (heat.getClass (), "updateLattice", false));* W" R. N& n7 ^4 o7 f! f
} catch (Exception e) {' U8 r3 V. M" Y
System.err.println("Exception updateLattice: " + e.getMessage ());) x( y1 P# F3 h. P
}
8 E# [# O" K, p9 h1 P9 @0 f. t4 M , J) I& L. m$ m1 e( I2 {1 }: z% e/ X
// Then we create a schedule that executes the
1 D3 M* s6 ?$ h. v+ l9 ]- ^ // modelActions. modelActions is an ActionGroup, by itself it+ u0 \- Y1 w; [) `
// has no notion of time. In order to have it executed in
; G+ l( h6 g/ o5 w2 k, V // time, we create a Schedule that says to use the
# y% F8 G M% H // modelActions ActionGroup at particular times. This7 |( p: f6 t1 W8 t( [: y; W1 v
// schedule has a repeat interval of 1, it will loop every1 R0 E5 ?, x9 I! D5 a$ B- R
// time step. The action is executed at time 0 relative to
2 W7 ~9 v- u$ q* R0 l // the beginning of the loop.& w" n( T! T' d& t1 U
8 M1 K- d( U' W! x% `
// This is a simple schedule, with only one action that is8 b5 s3 \% c6 Q D: u" q) ]
// just repeated every time. See jmousetrap for more
; j; P* r g% m, L' H // complicated schedules.( j# K. y5 s2 J9 a& a5 L$ f
( Z- r X- m5 w
modelSchedule = new ScheduleImpl (getZone (), 1);: ~4 u$ a* o5 d; Z3 ?7 r: j
modelSchedule.at$createAction (0, modelActions);. e) f, d {, {+ k6 S. R
. ?3 i" ^% y8 a9 i, h
return this;
3 e% q E- m% _; {: k1 b% e } |