HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ j. L, B- o% O9 Y' O% I/ V" K- k
public Object buildActions () {
- d0 C8 ~1 A( l5 \! Q! e. Y2 d super.buildActions();
2 p3 a& m L2 u" d z3 ?
4 ^5 U7 Z) I N; z: G // Create the list of simulation actions. We put these in& @1 P# L" J( W: c
// an action group, because we want these actions to be: g6 l' @# z. x2 c/ D
// executed in a specific order, but these steps should
" k! |4 ] D o v% W* C U8 C5 p // take no (simulated) time. The M(foo) means "The message
+ H/ t# t- K$ L# O7 h" Y- ~9 \% q // called <foo>". You can send a message To a particular
9 A( F) X1 ]7 K1 w; D // object, or ForEach object in a collection.
5 d: `2 T7 r [ U& v' E ; Q/ p: D6 q' H* B& v
// Note we update the heatspace in two phases: first run+ L3 ]! f! V3 \8 v
// diffusion, then run "updateWorld" to actually enact the
g9 J3 q% j' @$ n3 X // changes the heatbugs have made. The ordering here is1 s0 X8 H; f" a0 {# [
// significant!
- v1 \- O. t8 x
- O! B: I5 ?( F- s" n+ F: X // Note also, that with the additional
2 [2 k9 O- F8 A, ~( Y9 m. W% h- S // `randomizeHeatbugUpdateOrder' Boolean flag we can( ~; c1 @7 \/ g% Q$ ~
// randomize the order in which the bugs actually run
3 R) D! ?& P" c7 y! l // their step rule. This has the effect of removing any
( e: N# ? \6 d& f! w3 l // systematic bias in the iteration throught the heatbug
" a( n9 u8 a% l6 Q: X3 Z' Y# H4 C // list from timestep to timestep
) I) ]3 A6 K' f. P; H, N : N, \. q0 C* F/ w
// By default, all `createActionForEach' modelActions have
& E6 o/ o( P6 S( J- a7 m% ^9 t1 u // a default order of `Sequential', which means that the
$ \; q: z7 T% k5 y6 h- t // order of iteration through the `heatbugList' will be7 j9 O4 v# A$ Q, b) o
// identical (assuming the list order is not changed
V4 y4 T7 L$ K$ f4 A* n // indirectly by some other process).
2 z! s9 _% u5 K; R
% u& d$ E* E4 _, d modelActions = new ActionGroupImpl (getZone ());
. |" B" n* W. T6 K" C0 A' }- ?2 X. t" a; p
try {
; y2 m6 }9 d" s$ j( _' _$ } modelActions.createActionTo$message
2 k) M i5 {; i7 a5 R (heat, new Selector (heat.getClass (), "stepRule", false));
; U& `$ q7 P5 B& J } catch (Exception e) {' x: i/ C+ V; ^& P2 {. r
System.err.println ("Exception stepRule: " + e.getMessage ());, K4 ?9 m# B S3 j: ` I
}
! B+ s8 U9 k- y; I" ]0 Z" j! S( x1 n. f/ ?5 g# `& h6 {" U) Z9 V1 x
try {$ }. k9 {+ V1 T( E5 W
Heatbug proto = (Heatbug) heatbugList.get (0);
: _: j, c$ y% P( K Selector sel =
" k# Z# D0 S2 b0 x i, X new Selector (proto.getClass (), "heatbugStep", false);9 d' Z2 H4 Q: t7 x, D
actionForEach =3 t/ r- P& Y i: G4 s& m( F# X
modelActions.createFActionForEachHomogeneous$call
7 k- _. Q0 y9 R- f6 w3 f (heatbugList,6 z$ L' h; S, \4 r8 ]# t
new FCallImpl (this, proto, sel,
( Z- H: b" b( } B/ R new FArgumentsImpl (this, sel)));
" c7 r3 T9 u! [5 \+ ~& S5 }5 T } catch (Exception e) {
( Y6 Y4 q) q1 i, N e.printStackTrace (System.err);
& H9 O( _ p3 X% e3 u; e" x }
5 m6 ^8 P- E: p; e# D 5 t' L) [1 d! h" R! b/ D& ^
syncUpdateOrder ();
( w. p. V4 v: t. G) p+ ~* Q0 _
) @- N) Z: P% \; z try {
' e/ q9 M& @! x3 |# p: K5 q$ } modelActions.createActionTo$message
" x4 c7 ]. M: X F @6 J5 z (heat, new Selector (heat.getClass (), "updateLattice", false));
% i" u' i# i2 U, j1 k- o4 a) O$ c } catch (Exception e) {) W' B8 P& \- L9 i
System.err.println("Exception updateLattice: " + e.getMessage ());: x: K! F7 O& x- x! k4 P
}6 b3 A5 g; [5 d# q& M6 b$ K/ i
9 A1 ~1 r% `- U // Then we create a schedule that executes the
% K; A. C, n8 p# W I5 {! C // modelActions. modelActions is an ActionGroup, by itself it
* F+ t$ [3 E$ M9 \8 b // has no notion of time. In order to have it executed in( X* O) p9 h, ?+ n1 s
// time, we create a Schedule that says to use the: u! G/ d, N& F2 {( M: o
// modelActions ActionGroup at particular times. This2 {; R6 j, X3 Z3 R5 L
// schedule has a repeat interval of 1, it will loop every5 s. u1 P( _) Q: X/ \4 h: v
// time step. The action is executed at time 0 relative to
1 J/ V+ a$ q' U // the beginning of the loop.' p/ B6 i* _* l5 n* E5 V% y3 C8 [7 Q
+ L8 t, c" [/ C0 L* W+ K
// This is a simple schedule, with only one action that is" ^1 r+ [# f# r! _- E$ o( \" L5 `
// just repeated every time. See jmousetrap for more
" |# C5 a5 f5 ? // complicated schedules.
$ z% @4 K0 d* d' s( C+ W ) k. I( d. N* H$ Z( U
modelSchedule = new ScheduleImpl (getZone (), 1);% w- R) ?9 l! Q) @! n! w/ B9 x
modelSchedule.at$createAction (0, modelActions);! P9 ~% g. h0 U
# A/ G7 d/ D2 d" U0 {2 w9 N
return this;
C. h# \7 E0 ^' C } |