HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 }- Y+ y# c1 [, t6 T0 c- H7 ]
, k9 d, N5 ^7 y- E: h public Object buildActions () {; w, J, b9 H5 ]) |1 {- P, f8 R7 H
super.buildActions();
- Z* t7 M$ ]5 v% X9 o0 l( z+ w. K4 G 2 a# C- n* j' m6 G! N: { v. p
// Create the list of simulation actions. We put these in
4 q; Q7 H: }7 f0 y2 \+ k; m4 g1 ^ // an action group, because we want these actions to be
* v" g- O% i% M& u // executed in a specific order, but these steps should
2 ^: J- R3 R0 i. ^- m7 J // take no (simulated) time. The M(foo) means "The message
5 `4 ^4 E9 g$ f& F6 W( c0 b, q // called <foo>". You can send a message To a particular
/ `* u0 z) K& s/ N; D# ] // object, or ForEach object in a collection.8 a, z5 Z) A/ @) P- {' T
7 _5 l) t8 B1 V4 k
// Note we update the heatspace in two phases: first run
- V+ S/ i7 u# a) R' w" Z // diffusion, then run "updateWorld" to actually enact the; S) _3 P% ~" p( s# a) M
// changes the heatbugs have made. The ordering here is! K/ e, a& t% H5 D
// significant!
" M; T% r8 L0 k " B7 ? e4 @$ u; P" w8 e
// Note also, that with the additional$ |- a7 a$ h- Q2 l
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ t% ^8 [1 o2 b) Y& `5 N // randomize the order in which the bugs actually run
' H8 ?+ J* i( y z // their step rule. This has the effect of removing any
: y1 s* U' K" D) p // systematic bias in the iteration throught the heatbug, U5 Z! F: p1 Y x4 F$ ]
// list from timestep to timestep$ H$ z, T R- z
" M M$ U1 L0 u( {/ V d
// By default, all `createActionForEach' modelActions have
5 {) ~; o/ O; l U- K // a default order of `Sequential', which means that the w& J. B, u! Z( s
// order of iteration through the `heatbugList' will be m# m6 w9 V+ w/ }& d
// identical (assuming the list order is not changed4 D- \5 u$ ^4 \
// indirectly by some other process).
% s+ n9 h+ }7 x6 c/ Q- I 5 R1 f3 l/ D# ?' |# s( S
modelActions = new ActionGroupImpl (getZone ());; d! T. u- L- [" i3 E/ B
. K3 I6 B8 ?$ b# H( m& n
try {1 T7 u( W: `( i- ^1 }' x
modelActions.createActionTo$message# q# S; D) Q# u6 b$ O1 |9 d' o6 u
(heat, new Selector (heat.getClass (), "stepRule", false));4 C* u1 Z! ]; `) k6 Y$ E/ c
} catch (Exception e) {
3 x. u, E7 l; I System.err.println ("Exception stepRule: " + e.getMessage ());
$ S2 [0 _& ^/ X4 h: Z" O }
( S; x5 s7 ?( Z m% }/ j- D
+ P t( K" Y3 ^& ] try {4 t5 n" @5 [; Y. `
Heatbug proto = (Heatbug) heatbugList.get (0);
: C0 ?7 L+ \7 y9 D" t0 `9 P Selector sel =
! u9 C4 s6 u) m5 o" ]' G3 i, Q% ~+ U new Selector (proto.getClass (), "heatbugStep", false);# |- ? B) m9 K* e! f% D! \: A3 h
actionForEach =9 X+ U5 N2 J4 z D3 o. f& \
modelActions.createFActionForEachHomogeneous$call2 D/ ^, T! h- F8 A% ]" G8 [
(heatbugList,8 F+ }* r' G2 {; q" m
new FCallImpl (this, proto, sel,
( L+ h/ g; N, j' R- R" o new FArgumentsImpl (this, sel)));' Y \0 n+ Q8 \ h& j; f) c, H9 X
} catch (Exception e) {2 ?: z I1 b: S! y/ X" l
e.printStackTrace (System.err);& Z) r. T% Y# [9 ?3 B
}/ {6 G9 p5 {7 J6 f$ g- b$ S
, N# H4 v4 Z2 |5 K' f1 E
syncUpdateOrder ();
X* Q5 w3 G' P4 u) V p% U0 g. d5 V: n0 \& R6 r' k' V* S
try {
# O- l8 A6 H; p3 Z3 c4 q$ q: ^: F modelActions.createActionTo$message
5 _- y/ Q9 a- P (heat, new Selector (heat.getClass (), "updateLattice", false));
6 \/ f" z2 X' m: ` } catch (Exception e) {% f& K/ m! a& ]) ]( J6 ] N2 l
System.err.println("Exception updateLattice: " + e.getMessage ()); H. S3 K0 D- k) c) M3 L7 A5 y
}
\+ v3 u9 q/ K7 R- B; E \2 j, d9 |2 o+ g
// Then we create a schedule that executes the' U/ x W6 a+ g( s, S( M* ?) B, x+ |
// modelActions. modelActions is an ActionGroup, by itself it6 @( z% X( q$ D7 [1 u7 b/ R) c8 r
// has no notion of time. In order to have it executed in
e1 J/ i6 W8 J; } // time, we create a Schedule that says to use the6 f! `3 @3 D/ ~: g5 e
// modelActions ActionGroup at particular times. This
$ y" I/ ]+ k6 e* q% P // schedule has a repeat interval of 1, it will loop every: n4 v* f8 T* |2 P5 ?* V% v3 z& J
// time step. The action is executed at time 0 relative to
0 s0 v& f n" e: y // the beginning of the loop.+ a; q2 v( Y8 F; k$ l
9 _7 k0 h' Y; t: n
// This is a simple schedule, with only one action that is
. |& t h$ |# h( B9 [* r2 n" G // just repeated every time. See jmousetrap for more
8 M& i9 V& K H- r Q0 U3 P // complicated schedules.
0 G# R3 H5 J- K+ K
; E# l! x7 j/ J/ z, s. J modelSchedule = new ScheduleImpl (getZone (), 1);3 X5 v3 Y0 \6 o
modelSchedule.at$createAction (0, modelActions);
6 l) }2 ?2 y. g% ] # ^5 C% t, b5 u9 [ `1 I) \& P5 P
return this;
6 M1 W4 ~9 N$ I } |