HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& R+ ^: o% u7 N8 r, ^' C
# W2 Y$ l! d. i! V public Object buildActions () {
( w) i z# j. U) u0 `6 L _( L! V super.buildActions();
6 R$ j/ C' S5 w1 B
; u$ L3 d/ e' |9 a6 M3 [: L1 A! H // Create the list of simulation actions. We put these in
3 c' `, m3 }0 @! k3 p // an action group, because we want these actions to be
7 O. B: H( f- r5 r4 @7 a, Q Y/ O( A // executed in a specific order, but these steps should
9 O4 w3 x* e5 A: Q // take no (simulated) time. The M(foo) means "The message' E/ z% E. b: f" t5 s( ?7 `8 C
// called <foo>". You can send a message To a particular
# y) A; m$ b, E1 p // object, or ForEach object in a collection.4 ] B) ~, M8 O
# U1 T. I7 ~# v4 }* F
// Note we update the heatspace in two phases: first run( Y( T! }. V. B/ j* b- i: n& L
// diffusion, then run "updateWorld" to actually enact the+ ]) b6 o- g! x* B& p
// changes the heatbugs have made. The ordering here is! Z; r! }" I) `$ V; V
// significant!
" z* ^8 `! N. W x5 a. j
7 A7 [+ M6 q+ Z& G# n; N0 G // Note also, that with the additional
- ^4 V+ V( A7 E% n. O // `randomizeHeatbugUpdateOrder' Boolean flag we can
s- T2 c+ o6 W& P: ~ // randomize the order in which the bugs actually run% P7 `6 K" N! W8 z. g
// their step rule. This has the effect of removing any
7 i6 Y" K9 H5 u3 b' K( Z: T, k // systematic bias in the iteration throught the heatbug9 `6 r- M) L1 h
// list from timestep to timestep
1 C4 B8 @5 N: R1 |% A$ ~ 6 i: s: v2 p6 v; e
// By default, all `createActionForEach' modelActions have5 @% C }3 \' n _, d, H( m( f
// a default order of `Sequential', which means that the5 Q. V/ [6 T+ g
// order of iteration through the `heatbugList' will be, q3 O" x$ C0 x0 w8 s
// identical (assuming the list order is not changed
. Y, c. ^( w: M) K: f; c5 k! x3 ~ // indirectly by some other process).
0 @9 p. x8 W1 V3 z6 h
2 P$ q, H2 ^8 B! w) S* F y modelActions = new ActionGroupImpl (getZone ());/ H# g1 r5 v$ j9 x+ f3 l
3 k8 d9 f. l9 W& L* ?! r) j; l try {
; T6 ~5 h r6 ^0 ~# D modelActions.createActionTo$message$ T- Z7 m* k1 S- Z! Q- L
(heat, new Selector (heat.getClass (), "stepRule", false));
$ m8 H$ F1 Y. w' J } catch (Exception e) {
& q, H6 l1 g5 U0 B: O System.err.println ("Exception stepRule: " + e.getMessage ());
, W5 l) ]% G$ T. W. a, J( y7 l j" V& H }
6 }, B' X7 P# s, P" x1 Q) u# v! F* f! C
try {& W+ ~1 O6 t1 l7 I1 v
Heatbug proto = (Heatbug) heatbugList.get (0);; S* L0 k& @" |( L2 R: D
Selector sel = . h4 y9 }4 {. K r* Z
new Selector (proto.getClass (), "heatbugStep", false);
/ N: }9 @% f; ~( K. `# z/ i actionForEach =
0 ]$ [" x% H4 m7 [. V# D+ |! ^ modelActions.createFActionForEachHomogeneous$call
& K+ J/ @/ P0 K* f: x4 E+ n) d (heatbugList,, b* R8 x& U0 b: y6 V8 l6 Z
new FCallImpl (this, proto, sel,; v& T2 b% v1 H
new FArgumentsImpl (this, sel)));
% L; b. ]8 m: _1 Z+ ` } catch (Exception e) {
# C# j5 p4 c. S5 X/ ]3 Y, h e.printStackTrace (System.err);; r& d+ C+ |3 U
}
9 q$ T1 U6 } P( p8 c" M _ 7 F# [4 {% e! m- b& e7 S& s R a
syncUpdateOrder ();4 v5 [; Q+ h( n/ r3 x- v! @
' K" |( b1 ]$ q' @ k try {
$ l) f5 |: r/ a: q; E, V modelActions.createActionTo$message
$ U+ [/ N7 s5 u (heat, new Selector (heat.getClass (), "updateLattice", false));
( Y* v8 @( D3 x0 W } catch (Exception e) {+ n O' W% P& O
System.err.println("Exception updateLattice: " + e.getMessage ());- M" s. M+ }) }8 N
}
, r4 C) `6 L1 b! G% L7 b( @
1 ?) p# H8 g8 H* L; u7 i( g+ {1 r // Then we create a schedule that executes the
% ~* q" S6 B# t2 R. M9 U1 U // modelActions. modelActions is an ActionGroup, by itself it" \1 d. G8 X) p6 J
// has no notion of time. In order to have it executed in
l: n0 ]* h h7 R8 a // time, we create a Schedule that says to use the! i# i' l2 q6 [4 z; s
// modelActions ActionGroup at particular times. This
; n1 ]. d% l" t, d5 P // schedule has a repeat interval of 1, it will loop every, Z9 d8 Q: [* [6 t0 }0 `$ S c9 `
// time step. The action is executed at time 0 relative to
6 S( t/ I7 `) M7 _! T1 g // the beginning of the loop.
4 N) D6 f7 P; ~5 a+ Q! e7 ]' v4 v7 g: o/ w; T2 n" f
// This is a simple schedule, with only one action that is4 \5 R! I1 d8 s8 ~ w, |
// just repeated every time. See jmousetrap for more
: q4 g/ T* C( N6 u // complicated schedules.
: g1 ^+ r6 \" ^- M
' b# ^" m; t! l$ Z( W6 g! } modelSchedule = new ScheduleImpl (getZone (), 1);
( c4 Z+ {7 c$ t/ e* m' i modelSchedule.at$createAction (0, modelActions);8 |8 O$ j3 m; E* A+ m
) U/ A4 w b! t return this;+ V$ t" c6 A Y
} |