HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 J$ J: V5 ?# J) _4 Z4 t: S6 m
, T' A. N' V7 \: {; L, n public Object buildActions () {
6 C k! Z; J( T4 h super.buildActions();
# _" c5 K( D/ ^$ E1 q; L6 @ # d3 P4 M. }- m- k& F: z' T# b
// Create the list of simulation actions. We put these in5 f2 Q* g5 W3 w: E$ A
// an action group, because we want these actions to be; c% z/ z4 M: d5 B# U; T
// executed in a specific order, but these steps should
: @* k; ~8 t5 {) Y+ m: u) n, p // take no (simulated) time. The M(foo) means "The message
" D$ U/ B- [- S* p' i* l9 W. M! P // called <foo>". You can send a message To a particular) x8 ^6 p/ u% m; G" n# p0 d
// object, or ForEach object in a collection.# n* J5 h6 b* @ p% k$ y
* ^+ Y- |( m- K: q
// Note we update the heatspace in two phases: first run7 ^4 n; Y5 k* \0 c# {. f5 \& t
// diffusion, then run "updateWorld" to actually enact the
' N! v7 ^( D. B- { // changes the heatbugs have made. The ordering here is
9 Z4 |+ b1 ^: R4 S9 J ]4 Y // significant!
' X# k/ `' x) W
4 ~8 B& F1 h0 I2 o* X // Note also, that with the additional
* l0 h) |: V% P0 ~3 i // `randomizeHeatbugUpdateOrder' Boolean flag we can$ X- M# [; }2 C& Q' f: _5 k
// randomize the order in which the bugs actually run
$ p! }* y. r4 e- h- p0 Y e // their step rule. This has the effect of removing any7 t$ J# v6 N3 H
// systematic bias in the iteration throught the heatbug/ u5 Z5 y, f) G
// list from timestep to timestep3 ]" ^8 E$ m/ O& Q
* z) a9 p8 {6 z6 k1 }) _ // By default, all `createActionForEach' modelActions have. N9 q7 `) J/ j/ V0 p( ~6 h
// a default order of `Sequential', which means that the7 Q9 [' q( y. [8 |
// order of iteration through the `heatbugList' will be v0 W' z- o! h; O3 T9 C( @4 Z
// identical (assuming the list order is not changed
: C7 Z' \+ S |' w p // indirectly by some other process).
# s! |# n- N% {) q$ K
* a1 l& {7 X) Z# a- B% } modelActions = new ActionGroupImpl (getZone ());
5 Z2 G# ?% ^: F8 W: Q; D/ D( Z4 v# S; q8 {$ Q8 ^: R# [
try {1 y; N$ a( h& v, ~/ G4 `
modelActions.createActionTo$message
7 a2 S# v4 A; ?; ~5 E8 C: V8 v (heat, new Selector (heat.getClass (), "stepRule", false));
4 x$ {" {9 I& G! T7 z, r } catch (Exception e) {
) Q2 [: Z" l- J( W- _( X8 o! F System.err.println ("Exception stepRule: " + e.getMessage ());
/ \7 J" Z1 q! N5 n7 \0 V# T }2 V* E. I k# N( w
1 F W$ R) O# k: k, O j
try {4 L* Y2 @; V0 e8 R7 x& Q& E
Heatbug proto = (Heatbug) heatbugList.get (0);
* k1 k- X0 n; [9 A7 K X Selector sel = , k3 p& J4 g/ \/ M
new Selector (proto.getClass (), "heatbugStep", false);$ n K* @2 b- A) z8 R& h
actionForEach =: l/ ] m N, C; s& d0 j
modelActions.createFActionForEachHomogeneous$call0 i; R. H7 k' Y: \* @
(heatbugList,: \" R) ~" C* Y* }; O
new FCallImpl (this, proto, sel,
9 J [, K8 @9 P' S& d0 q7 l( n new FArgumentsImpl (this, sel)));
! _* r- H7 }7 E/ A% J1 B- T } catch (Exception e) {9 d$ `/ Z& ]& u! j0 Z
e.printStackTrace (System.err);: o; y8 f9 K9 O3 a* m
}
6 [3 Z% c$ p' c& @ 4 B# M9 v5 e! U
syncUpdateOrder ();
8 P8 z) [% p5 G# [' _, l, m; M* c1 i: Q$ _- _% g6 T, L$ ?
try {
* Z9 k; b4 v% z5 c modelActions.createActionTo$message 8 a% c7 K2 D! m1 ~, P! q
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 \" M. m: @1 a# H+ | } catch (Exception e) {* s1 ^7 i1 z; W0 ^) m- q/ ^
System.err.println("Exception updateLattice: " + e.getMessage ());- b2 m& D: w3 g/ W" x/ p
}" I: v- R+ m# Y9 v
1 f# K' w) n! a& }8 T+ L$ Z. F // Then we create a schedule that executes the% I3 w, ~- V; [4 n
// modelActions. modelActions is an ActionGroup, by itself it! m% j j' t" S: t7 @2 X1 ]& t
// has no notion of time. In order to have it executed in
4 E) M4 V6 ^9 q" ^! S# t9 a // time, we create a Schedule that says to use the4 t# Q f) ]: O3 G2 s! {- ]; r
// modelActions ActionGroup at particular times. This
, E6 z8 @/ i/ r9 g/ R0 R! f // schedule has a repeat interval of 1, it will loop every
$ ]3 m. }/ \& Z% ?5 B9 I7 M" \ // time step. The action is executed at time 0 relative to
/ i& G. v' ?. o" y i7 N // the beginning of the loop.
) Z: j i- W) E2 W# T: a5 C2 Y0 T, I8 b8 Y; p! d9 I9 J
// This is a simple schedule, with only one action that is+ @! l, G6 s) W( t% |9 |
// just repeated every time. See jmousetrap for more
8 H) U) O. H+ h // complicated schedules.9 }, J3 p! o% M4 b$ a$ F
3 ]2 X! a) o: @" E
modelSchedule = new ScheduleImpl (getZone (), 1);
" O/ p: V, s/ T6 t modelSchedule.at$createAction (0, modelActions);
7 N, e" L- D8 _' Z 5 v" E* k3 [& S% X
return this;+ g' [0 \/ I5 w0 K9 I
} |