HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 @# h4 K2 z. |- `5 a
1 L. Y0 r3 M' q" [( w! R public Object buildActions () {; m" {8 X) J' t$ a: d' q/ q
super.buildActions();2 ], N* n2 @6 t! i# J: i
7 F) a6 \6 @' ^0 s
// Create the list of simulation actions. We put these in4 D1 F/ E. b) F
// an action group, because we want these actions to be
: a5 W5 R1 U4 Z4 a // executed in a specific order, but these steps should8 P) m+ E, ~/ x9 A
// take no (simulated) time. The M(foo) means "The message
' \% z' v1 K- j& ~) G3 _1 K0 C! C // called <foo>". You can send a message To a particular' j6 }$ X1 Y: @ P
// object, or ForEach object in a collection.
`" V" c% q1 \/ t) |8 i
5 |/ d4 u6 [) a; ~7 `0 H // Note we update the heatspace in two phases: first run7 R9 ~, y1 \% r/ y: @
// diffusion, then run "updateWorld" to actually enact the- i$ ^) u9 S2 g. \
// changes the heatbugs have made. The ordering here is4 F: ]+ T% i; q' `4 T
// significant!
' H$ K& T( M8 |- q 3 L9 X/ u, q$ I9 ]3 Y
// Note also, that with the additional
5 I: R x, ?& [ // `randomizeHeatbugUpdateOrder' Boolean flag we can
: r/ a8 H! [" w N. M% c! y // randomize the order in which the bugs actually run5 Z5 k9 H9 I! j( ?
// their step rule. This has the effect of removing any3 l$ M4 l2 |4 t: w6 O
// systematic bias in the iteration throught the heatbug
1 F0 n( s. V# M, z4 w6 c- } // list from timestep to timestep) k7 T' D6 ` r9 `% c3 r" q. @7 W
1 V" E; T" t; e2 G- k; h+ M# C // By default, all `createActionForEach' modelActions have
% ]' v3 o, B2 m) p, S4 l // a default order of `Sequential', which means that the
" N6 k ]: W( q- J% ~ // order of iteration through the `heatbugList' will be5 c+ O6 V7 l( T* Y& k# O+ m
// identical (assuming the list order is not changed
( \: U5 t8 S' ^" w _ // indirectly by some other process).% w, @" M; D. d$ ?6 D+ p9 b
X5 y: z; a& J& L/ m
modelActions = new ActionGroupImpl (getZone ());
( ^, I5 x; N/ f# {* Y
4 C$ ~9 O; L* D try {5 r& H1 n5 R1 p3 t6 L1 C! u
modelActions.createActionTo$message
6 w- M" T. O8 Q (heat, new Selector (heat.getClass (), "stepRule", false));6 \% z9 H Y$ m9 S" X1 J! i e
} catch (Exception e) {, [( R# v0 Z! N# M
System.err.println ("Exception stepRule: " + e.getMessage ());
, z. Y! {" @ _ }
0 T6 @6 h0 }3 V. b, _' o
6 d( y4 m' k, d/ J: O$ [ a try {
. x' @9 U" k+ U) f0 g/ p, N Heatbug proto = (Heatbug) heatbugList.get (0);
; Y: s. F5 p- F* B% F/ @ Selector sel =
9 W0 E( g, l0 B Q new Selector (proto.getClass (), "heatbugStep", false);
5 x) @ |6 s4 i% I! e3 d( g9 H actionForEach =
4 ?5 ]/ l% l0 X2 p2 y modelActions.createFActionForEachHomogeneous$call6 @* n7 l. t3 g) }& T! G
(heatbugList,
) {! B9 n& @) H0 M; {1 \. D new FCallImpl (this, proto, sel,* O, C' Y" v: ]3 F1 `/ w
new FArgumentsImpl (this, sel)));
7 o% N; R! Q+ k; P9 Q" e } catch (Exception e) {
' B9 _. I; R6 m: L& ` e.printStackTrace (System.err);# X x, D# E# c: {! D
}
: u3 X4 V; y$ v' V& }+ |8 D+ u
- u' [( @$ U: l syncUpdateOrder ();; }; ]; i0 ?6 L+ L6 H8 p
% Q' L( g X: f0 Y try {* C1 w) }& {* z# ?$ p
modelActions.createActionTo$message
9 f) j, [) ~* [ (heat, new Selector (heat.getClass (), "updateLattice", false));' W# z# |' r& C; o8 ]& b
} catch (Exception e) {( r, d O0 g9 K9 c8 [, v4 W
System.err.println("Exception updateLattice: " + e.getMessage ());
; x: p. F' \. n: i: X `7 }8 w }
8 ^, W, ~+ j; Q1 C, R ) a) X* ?3 ~* m$ V( M
// Then we create a schedule that executes the
+ O5 u4 Y, {$ k0 r // modelActions. modelActions is an ActionGroup, by itself it" Q) D" j4 Z3 D2 s; L4 b0 g
// has no notion of time. In order to have it executed in0 `3 K4 s( U4 u7 ]% X% D7 z) ?9 e
// time, we create a Schedule that says to use the
5 r$ `) V# {3 X0 Y3 T6 } // modelActions ActionGroup at particular times. This
: h8 h3 f, w; V" A- S* _( L5 F // schedule has a repeat interval of 1, it will loop every; \, c. M% i1 [
// time step. The action is executed at time 0 relative to
1 i+ s6 V3 {6 G // the beginning of the loop.
: H6 C3 c7 H# N& d" U2 w* J; P! n }2 z/ q, k! B
// This is a simple schedule, with only one action that is1 H: M' A6 j5 X B
// just repeated every time. See jmousetrap for more
& r. K4 q6 h7 R // complicated schedules.
. B8 L6 c8 y" i) D
8 l; g- Z$ k' X* l# j+ l) N/ C! w4 ` modelSchedule = new ScheduleImpl (getZone (), 1);% b, g5 ~8 e$ a
modelSchedule.at$createAction (0, modelActions);
& @1 Y% r% V2 h% f
& o: L. ]) ~" L- S# M0 M4 Z return this; I0 S9 U) x& A0 c) z! K
} |