HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* h! l6 q1 n4 G# |
8 N5 f" ~6 x* n. z8 [* G public Object buildActions () {# _5 e# O1 N' Y, T
super.buildActions();
/ U4 O! i2 g T
O0 @0 z" K( J, b, Y // Create the list of simulation actions. We put these in0 e; O+ x; k( Z: t
// an action group, because we want these actions to be$ D4 L, S4 ?& M- l2 n* o; Y7 E
// executed in a specific order, but these steps should
; Y, ~5 [6 }7 D$ W5 M% q // take no (simulated) time. The M(foo) means "The message
; S& l# S+ v' g5 v // called <foo>". You can send a message To a particular3 W6 B: G3 j M* K; k# `- {
// object, or ForEach object in a collection. r0 K( l1 b* b
& O- {+ }; V* k& l" k' j2 {6 j7 h // Note we update the heatspace in two phases: first run# O1 f; s' |+ j) `6 O+ W. e ?
// diffusion, then run "updateWorld" to actually enact the; A4 d7 ^7 c! R
// changes the heatbugs have made. The ordering here is1 Q( }5 _* [* O7 x, P, h
// significant!
# N1 z: x# m, C* F& p
+ ?: [- m, y" R; A. d% D // Note also, that with the additional
' o0 {8 P" A5 g0 b. R // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 x4 J& w2 ^- f. l9 |9 ^ // randomize the order in which the bugs actually run/ u# T0 r! z7 ?& N
// their step rule. This has the effect of removing any
' B9 R: U2 T5 ~! B3 H" ^. { g" l5 X // systematic bias in the iteration throught the heatbug
# g% {9 a2 o! i5 t9 o* d3 k // list from timestep to timestep
3 Z$ e. j+ z4 W6 L8 L
3 B, o7 V6 r! R5 j // By default, all `createActionForEach' modelActions have4 l/ D$ I; O* V L2 D1 S
// a default order of `Sequential', which means that the6 t& o8 v* w- R; m% O0 _
// order of iteration through the `heatbugList' will be
0 `1 A' X, G; _. C B' Y, N2 `+ G% H8 x // identical (assuming the list order is not changed
2 P; v8 `2 u$ P* _ // indirectly by some other process).( ^! r$ y5 E# C. E" p/ H, T
0 {: E8 p. c. R: ?8 U modelActions = new ActionGroupImpl (getZone ());
& c! \: w! ^; q, W$ l# g; O3 V( j: y, |# A' {2 h- V; P
try {
A4 G+ l" g6 d* m modelActions.createActionTo$message% s" ?% Z4 O, {6 @& K8 H3 I- x" S& [* l
(heat, new Selector (heat.getClass (), "stepRule", false));' x$ Z% k! d" U
} catch (Exception e) {
) u# J2 U9 D5 A2 o. S) A System.err.println ("Exception stepRule: " + e.getMessage ());8 U$ ^" a; J' Z2 \5 ^7 Y+ C
}
! Q& D& D W9 I2 f- u5 _* i3 c- ]8 k S# w' W" c o% F3 n( q( ?( v
try {5 h7 @5 k% @4 t# w" x+ n
Heatbug proto = (Heatbug) heatbugList.get (0);
) x2 A$ m. w0 X, V" O" T Selector sel = ; }: P$ ^( K; K' T
new Selector (proto.getClass (), "heatbugStep", false);
6 W2 A" d2 {$ I* S8 K$ ? actionForEach =6 A- _. s6 W+ m+ D3 B3 k
modelActions.createFActionForEachHomogeneous$call
7 E4 E. S8 i- Z) W, U% o; q (heatbugList,
' ^8 e5 z% Q! W3 v* j# ^3 ? new FCallImpl (this, proto, sel,( N& U" k3 Q. y# M
new FArgumentsImpl (this, sel)));
3 x* O8 M* p0 t: U } catch (Exception e) {5 ]) G. g4 B3 D& X' Z8 e& T
e.printStackTrace (System.err);. u& J3 U# A; i/ F% E
}
2 V" `! b) M5 ^3 E
- V7 K8 v( \1 q, w& t% J! d6 ] syncUpdateOrder ();7 ?! B F0 X5 N3 j8 }) g
# s8 L7 N$ x1 q. t! Q' T8 K" e try {
% u' v7 c6 G* \ s# w modelActions.createActionTo$message ' V2 E' W2 l3 V, x
(heat, new Selector (heat.getClass (), "updateLattice", false));' X) E: d8 p+ j# K4 ^1 W* L
} catch (Exception e) {
6 s* G. J, w- Z! [: F5 G) d System.err.println("Exception updateLattice: " + e.getMessage ());4 g4 I! `0 D! n) J$ z5 q
}
1 j1 [9 v" k- c8 N. C: A( a
- W9 }( x& p a, U" Y // Then we create a schedule that executes the
9 M& y& q0 D" n. W2 Y1 u) k& c // modelActions. modelActions is an ActionGroup, by itself it2 O( c7 \) T: X6 Z9 W1 s ~
// has no notion of time. In order to have it executed in7 e9 k) |$ i$ v6 J
// time, we create a Schedule that says to use the
! O! X9 g& x" ` // modelActions ActionGroup at particular times. This- m0 x* {8 k! L) k& d
// schedule has a repeat interval of 1, it will loop every
6 ]( b0 k% c7 j // time step. The action is executed at time 0 relative to# ?- t' |, p+ m9 m: ?" T! r) `( ~
// the beginning of the loop.
4 [. R- g7 h& I4 V4 {" ~
& i( l' M, {3 |- C% X // This is a simple schedule, with only one action that is6 z4 y+ k& p. X0 y
// just repeated every time. See jmousetrap for more8 |! S6 w4 u- `' M& H8 U
// complicated schedules.
, H5 ^( o5 B* [/ e4 n& Z3 y
W% q6 O* Z4 v# k modelSchedule = new ScheduleImpl (getZone (), 1);3 M; p; h6 _1 m4 s! p) r9 y
modelSchedule.at$createAction (0, modelActions);
/ D/ f( O; s2 Y3 G; U3 L' p- G+ T
# n* X$ h5 F5 g, S, J4 h return this;, W: K) E/ {9 {/ i9 I$ y8 X
} |