HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. ~9 {0 Z9 j) m* o
0 h/ f2 y* G* m public Object buildActions () {
$ }" O9 e q3 V; T1 n x9 v$ B super.buildActions();
6 h" x! J4 j8 }) ~ D
: U0 M+ K4 { S+ n8 q) Y // Create the list of simulation actions. We put these in0 e/ c( j2 K0 L: }( Z7 L& W
// an action group, because we want these actions to be5 [. v2 J7 n4 Z2 L* m2 \4 D7 K, i
// executed in a specific order, but these steps should! H3 O* o0 g* F7 I
// take no (simulated) time. The M(foo) means "The message
6 b2 P W+ F: F7 n // called <foo>". You can send a message To a particular
; L& m# w; g' W3 |8 D! D // object, or ForEach object in a collection.
+ E, b# H6 m2 S9 ]; _ $ o) Y9 c7 |1 {( F$ u
// Note we update the heatspace in two phases: first run
9 L5 k5 w. V7 U4 e5 A8 ~ // diffusion, then run "updateWorld" to actually enact the4 d$ g' l \6 ?! C) C1 C
// changes the heatbugs have made. The ordering here is T/ W. ~3 c9 N% i/ O, f
// significant!( @6 G2 e! \" ?5 }) I
. s# T, _) y2 w# E
// Note also, that with the additional1 M2 M) u; [- _ s" j0 W1 @
// `randomizeHeatbugUpdateOrder' Boolean flag we can x7 G4 n% E; V' s+ }
// randomize the order in which the bugs actually run0 u- |2 z0 _& G& j
// their step rule. This has the effect of removing any1 _1 T$ t, m3 n3 ^9 C4 h/ h9 P
// systematic bias in the iteration throught the heatbug
2 K' G8 I ]6 ~( Z // list from timestep to timestep
" i/ k/ @! s- p 2 }' y+ \- I8 W- h' }0 a
// By default, all `createActionForEach' modelActions have
! `2 Y( g( c2 U( U/ ^2 D/ w // a default order of `Sequential', which means that the4 l, v/ _7 W$ x2 u
// order of iteration through the `heatbugList' will be
! s; n; T V K) d' e5 P0 k- M! ^ // identical (assuming the list order is not changed
" U9 |3 R! W# U( C; ?& c" N // indirectly by some other process)." I% c1 K# i9 w8 Z; j$ C7 {
A5 ~2 Z: Q, H J9 M: T; j; a modelActions = new ActionGroupImpl (getZone ());
4 ~, k4 l) N- \+ N2 y3 G
% s7 O9 k/ J' I, Z: ?' ?( g1 C try {
- U- T2 s2 D" P modelActions.createActionTo$message
; e, \ i7 T: g' w (heat, new Selector (heat.getClass (), "stepRule", false));/ f2 W5 b* m9 I
} catch (Exception e) {
* p( Z+ ], g/ c5 D& G0 F) D System.err.println ("Exception stepRule: " + e.getMessage ());2 y* S2 T- _; e7 c3 [
}) h% h; A2 T5 \9 R- \& ?0 Z# ]! J
8 Q0 y' `/ R8 g0 q; E0 C
try {# f" i# w( `- _: b# l
Heatbug proto = (Heatbug) heatbugList.get (0);* P2 }5 o* ~7 ]9 T, ~% `1 ~
Selector sel =
+ J5 B8 y, |1 M# Q6 Q new Selector (proto.getClass (), "heatbugStep", false);' f+ A5 k& k* ]7 Y8 S
actionForEach =
3 M. X% E5 R/ [0 b8 c: d modelActions.createFActionForEachHomogeneous$call
; B, X. c+ k) X+ R8 z& E (heatbugList,5 {8 \0 o T% A' l: ~. N
new FCallImpl (this, proto, sel,
( \; r5 j% B% k' G8 g new FArgumentsImpl (this, sel)));
T' s5 l" C4 Z1 E } catch (Exception e) {
3 X6 n6 b; K, b! i2 T$ ~* \% {) y e.printStackTrace (System.err);8 j9 ^" i9 M, @$ A
}
n4 l5 _ e3 ^: Y" G% l! q . u% E, z7 n, E# Z7 j3 N
syncUpdateOrder ();& V4 |* N6 k _) F5 x
# M8 Q# p4 N# H
try {
$ _! h8 Y+ ?$ v; ^ modelActions.createActionTo$message
5 r9 n# h1 ~' G (heat, new Selector (heat.getClass (), "updateLattice", false));
! U$ y u" q9 |" u6 O6 S } catch (Exception e) {
t/ v: S. ?6 L. c: x7 W System.err.println("Exception updateLattice: " + e.getMessage ());7 e, c% }& I" w D1 ^
}
# n1 p1 V; k: [! H
- Q! M% J9 `# o8 J+ t# @+ p // Then we create a schedule that executes the1 ?$ P2 S/ Z' |2 D9 K( _' S
// modelActions. modelActions is an ActionGroup, by itself it
N7 n* ^- l5 [2 A! Q // has no notion of time. In order to have it executed in
$ W2 y. E2 T3 W: Y7 y0 r, @$ T. _; h // time, we create a Schedule that says to use the
+ ~! x- l5 y T // modelActions ActionGroup at particular times. This
8 N( W& ]1 N8 g6 r2 x+ c, b // schedule has a repeat interval of 1, it will loop every% z0 p; f* \5 u' M) T
// time step. The action is executed at time 0 relative to: _( Z' F8 y, Y n& K. {9 R$ p: T
// the beginning of the loop.
4 O2 }7 ~0 o1 A' g. B' F" `
2 f6 |+ G* } [# ~( P& E C // This is a simple schedule, with only one action that is
4 {$ R2 z$ E1 U T. ], k5 x // just repeated every time. See jmousetrap for more
, M9 P, R& {/ @4 h+ c // complicated schedules.5 T% p; T7 }& @: e9 v
0 h- B/ L/ c# k9 w+ C+ _3 B modelSchedule = new ScheduleImpl (getZone (), 1);
0 V4 H* p7 P4 b; v2 l9 ]- n6 `. t modelSchedule.at$createAction (0, modelActions);* D0 h; b3 a2 J# G
* G7 A" ?6 r3 T/ x' \# Q }5 ~
return this;+ Z) @! D$ |" b0 c
} |