HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& H$ n4 |* a% `2 S7 N y' M9 h* N6 V+ w
public Object buildActions () {
: p9 H4 U4 M6 g3 m' J& J5 ~3 a super.buildActions();' F, k7 K2 d# [! F7 j3 e! Y5 D
% J5 c; z$ k$ Z+ z9 Q! j% a
// Create the list of simulation actions. We put these in# P" ~5 j# v5 S* ~, _! g0 c
// an action group, because we want these actions to be
# T) r' ~9 C$ D# F$ z. S8 _; ] // executed in a specific order, but these steps should9 m7 X q7 P* a- U6 j [
// take no (simulated) time. The M(foo) means "The message! W Q% V# Q" o
// called <foo>". You can send a message To a particular- p9 y4 H9 c. S) { N' \, O4 d- R
// object, or ForEach object in a collection." M, V# ~9 k5 L( M' W6 r+ X
* _9 }( W* k: u2 c$ i) T4 Y' s5 O: g
// Note we update the heatspace in two phases: first run# |7 X; i8 H) ~* T
// diffusion, then run "updateWorld" to actually enact the$ @* k( n0 k4 _& c
// changes the heatbugs have made. The ordering here is3 `0 b: @9 I/ @
// significant!
7 q; o$ ?3 W' I / a) O3 p+ p! V0 C1 c
// Note also, that with the additional' Q- s7 y0 @1 }! O" D
// `randomizeHeatbugUpdateOrder' Boolean flag we can- X& M& d9 w, c; k l
// randomize the order in which the bugs actually run
* B5 p- u; M6 {7 q* v // their step rule. This has the effect of removing any9 c$ C( G; D- h i& W, k
// systematic bias in the iteration throught the heatbug1 i7 R8 n ]: W5 T' U
// list from timestep to timestep
, ]" C1 d6 M M& O9 q) d ) X6 J+ g7 `5 \- p
// By default, all `createActionForEach' modelActions have
" m" ~7 S3 I; W! ]5 t9 C // a default order of `Sequential', which means that the3 y. ?/ w/ \4 A3 c9 k( Y
// order of iteration through the `heatbugList' will be
: z8 u7 A U5 e% R. ]2 m9 s7 Q // identical (assuming the list order is not changed
1 m9 `* Y. g" U' g$ \ // indirectly by some other process).
- T5 d% L& j+ _% x
" \1 [' B! h% s: _! Q2 O1 P modelActions = new ActionGroupImpl (getZone ());
( m- s- _/ l" B+ o5 |% Q, E* _6 `
9 S C3 U _2 x b# B2 s0 ` try {
. d; t8 y* c5 e4 k1 f6 ^6 c modelActions.createActionTo$message
: c: h- Z' E' _) Z1 S# f$ }; t- b' ] (heat, new Selector (heat.getClass (), "stepRule", false));$ Y; ?5 P, o. ]1 E8 C, b
} catch (Exception e) {
- F6 B: U- C& V! l( U1 T6 x System.err.println ("Exception stepRule: " + e.getMessage ());
+ u5 N8 j9 n0 K# s }
" o& U2 n: D& p: Y7 J5 p- r/ L& j0 a% n, l. X9 H
try {0 k8 Q9 C& O/ U+ f V* d
Heatbug proto = (Heatbug) heatbugList.get (0);
$ @" R' f" H9 R Selector sel = - K; J+ m( H" C
new Selector (proto.getClass (), "heatbugStep", false);
( o5 J1 ^, n: m+ H3 N actionForEach =
2 b# w6 w( o' d modelActions.createFActionForEachHomogeneous$call, z2 {$ A/ ` U( H# a
(heatbugList,* P" O$ @" Q V4 F
new FCallImpl (this, proto, sel,: i) `/ v+ o, O V2 Q' R
new FArgumentsImpl (this, sel)));0 F, O) C( P* b' M: [. t6 j+ v
} catch (Exception e) {5 D7 M) D3 q" _7 r# A( }; `) M
e.printStackTrace (System.err);0 Q) ~3 \& [/ g- Y$ D
}
. s4 @' h- k3 T & H$ @! o+ Z$ Q: m
syncUpdateOrder ();
( i/ h$ k) Y/ J% I
. O f/ h' K8 O" L! }6 Q: C& n$ h try {
8 y# E, E3 {' X ^ e/ C modelActions.createActionTo$message x9 z+ N) `& n; O6 |
(heat, new Selector (heat.getClass (), "updateLattice", false));# j" i" _- ~; h+ _4 C, _( K8 f
} catch (Exception e) {
2 M9 V% n* s# Z( h# o% ]- g! V System.err.println("Exception updateLattice: " + e.getMessage ());' B3 R* K) M. |% A# Z) Q: Z+ I
}# U. f' t" ]9 j8 K8 D, W! {" R
9 c* W' Y. t# G/ h( x. v1 Z
// Then we create a schedule that executes the. H, u8 m$ f9 `
// modelActions. modelActions is an ActionGroup, by itself it
F4 V& q6 n/ R7 B2 T // has no notion of time. In order to have it executed in
: d! N4 j1 H1 h. o // time, we create a Schedule that says to use the. |+ a4 M3 m( l* j& Y) x9 T5 i
// modelActions ActionGroup at particular times. This
/ x) A5 f! j& o5 ] // schedule has a repeat interval of 1, it will loop every
* p* T- c# J4 P! Y) u // time step. The action is executed at time 0 relative to' `7 I/ ?& Q' x+ `1 ^) Z
// the beginning of the loop.
5 k" k; ~' q7 f$ ]7 O$ C7 M3 W
: J; j9 g( W2 P1 ]! J L4 f; ~ // This is a simple schedule, with only one action that is
5 J/ |7 q+ P- `: j, i. w // just repeated every time. See jmousetrap for more
% `% N% S8 w+ e // complicated schedules.
) z) h* o7 Y/ y) I + R6 X$ ]/ g; O' |( }' y2 V( b
modelSchedule = new ScheduleImpl (getZone (), 1);
! y7 }5 M" f# j& Q modelSchedule.at$createAction (0, modelActions);
1 D- P+ a& ]. {8 t, Y! ] ( G! x3 ? F5 ^
return this;4 E ]. X& c2 J2 m
} |