HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 }& U( {5 |' A- H
( \ }; T+ @3 Z, c5 P) i public Object buildActions () {/ e1 \3 F! x7 X% }
super.buildActions();
' i* @# @5 _( X( H
# l5 u2 [) ~5 @* o2 ? // Create the list of simulation actions. We put these in& z$ W, K6 K1 n
// an action group, because we want these actions to be
& x% [9 _1 }% U2 s) Q3 w; Y // executed in a specific order, but these steps should
, D' v, G/ |, K2 Z/ t // take no (simulated) time. The M(foo) means "The message* P" e3 b/ Y3 E. O4 T$ n
// called <foo>". You can send a message To a particular
+ k- d' ]# r" U2 \/ a4 O // object, or ForEach object in a collection.
$ i5 H3 K. `2 o$ O( m1 ]* a8 F 7 x4 E' d. Y9 u& ]* R$ w
// Note we update the heatspace in two phases: first run, ?" p6 R7 c$ [- e- q5 H
// diffusion, then run "updateWorld" to actually enact the! R! u1 G8 t$ o( M
// changes the heatbugs have made. The ordering here is
% H) j% w0 L, ]2 y // significant!! q8 X% k: V" Z) }
+ l# N. Z; a+ d // Note also, that with the additional" Q7 Q: u9 u7 b/ E9 R
// `randomizeHeatbugUpdateOrder' Boolean flag we can( X# Z0 M# o O& Y* u% O
// randomize the order in which the bugs actually run& o6 r4 z; Z$ W
// their step rule. This has the effect of removing any$ k2 G" I D; a9 r
// systematic bias in the iteration throught the heatbug3 X' P/ t/ ?. ^( a7 J
// list from timestep to timestep; s. R' A8 p5 ]% U, f
0 y8 d5 Z4 k4 T8 e7 { // By default, all `createActionForEach' modelActions have
. Q: z4 O* b0 y8 Z // a default order of `Sequential', which means that the7 H) T- ~! v; u% t1 Y* [$ D
// order of iteration through the `heatbugList' will be
: M* y' i! d% a6 J+ h, W. } // identical (assuming the list order is not changed
" P0 C6 P% F* H // indirectly by some other process).
v; r v u; x
B8 s# |, }8 Q: L# E modelActions = new ActionGroupImpl (getZone ());
' m8 Q5 ]( _! [( ]8 s
; _' |9 b3 l- ~) p4 m9 U try {. D6 ?5 h- B) }( ~) t
modelActions.createActionTo$message
+ s( S1 ?' K2 u+ i$ D (heat, new Selector (heat.getClass (), "stepRule", false));
" H3 f: D+ g* q8 h } catch (Exception e) {
1 Z8 W8 q& g* J System.err.println ("Exception stepRule: " + e.getMessage ());' q2 G/ e9 J5 Z8 [) ]+ i
}" {5 T8 T5 h3 n( K% f- m# H
) X* g+ A) T9 k% {6 L% }2 {4 a try {
) `0 l' ]2 r9 [/ |$ M2 y Heatbug proto = (Heatbug) heatbugList.get (0);
6 F; c/ i0 R) j4 I0 Z s) R Selector sel = ; [0 q- K' G, q& J
new Selector (proto.getClass (), "heatbugStep", false);
* J* z/ A& B! t9 F ?3 _! E) o actionForEach =
" e1 q, e5 ]' @8 l/ @! }" Y modelActions.createFActionForEachHomogeneous$call4 A0 Q' ^0 e& q0 ^; w! a
(heatbugList,# [6 k( z T z* \
new FCallImpl (this, proto, sel,. W9 _1 G: K9 m# L4 C
new FArgumentsImpl (this, sel)));& l9 t" n0 s/ A; \: R: Z4 I
} catch (Exception e) {
5 Y- [% y' L8 h# u; t e.printStackTrace (System.err);; X4 L- Y9 X9 s! I5 R$ v' a
}6 [% }/ X5 E$ }' G! B" f
- a l Z0 `; R% G- A# e
syncUpdateOrder ();0 y( r- X* X) Q( h: n+ a1 S9 {( ], R( e
1 A$ {# f1 F7 ]- N2 s: N, d5 C try {
) t/ L* q$ A) \ modelActions.createActionTo$message 7 Q' J( [: P# }6 e$ m5 T# t
(heat, new Selector (heat.getClass (), "updateLattice", false));
. h( w6 j H) u0 V# R } catch (Exception e) {
) g. w. h, Q( h4 ], M System.err.println("Exception updateLattice: " + e.getMessage ());
4 S$ e0 M) Z9 L) I. j! a }- W7 e% {! A' Y; T, V& L# M! i0 y6 l
* }1 s. H" n8 l6 T3 ? m( Q
// Then we create a schedule that executes the7 X8 f* B/ i* p. J& ?1 ^. c0 @6 C
// modelActions. modelActions is an ActionGroup, by itself it J7 F' k0 p/ d7 d' U& u5 D, N" `& A
// has no notion of time. In order to have it executed in, ?0 l, j/ e N) N
// time, we create a Schedule that says to use the
/ K4 r2 O4 z! e# V3 o/ B // modelActions ActionGroup at particular times. This% T% d* r* }3 q3 ]: F: n' w9 e B
// schedule has a repeat interval of 1, it will loop every1 E- R( ]/ w8 m) y( p" f7 w
// time step. The action is executed at time 0 relative to- X2 T- h( o+ X$ i& R# F
// the beginning of the loop.7 i. Y6 k0 r2 m4 E5 Y7 R" n
+ }/ x5 J1 _5 M& r t! k v // This is a simple schedule, with only one action that is: v4 g9 w% ^, ~! ^
// just repeated every time. See jmousetrap for more
4 K- S; @* A9 j- G( J) m // complicated schedules.
p) O e8 I* Q
7 i: l% E6 H2 H" i3 T* O5 ^ modelSchedule = new ScheduleImpl (getZone (), 1);
4 C: r% ]9 J/ o! ` modelSchedule.at$createAction (0, modelActions);7 a2 G% Z) u) T9 E5 M
1 O& t% }9 O; G+ R# v7 U* W return this;
% @$ _) |; D. X7 n* N } |