HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: p6 U0 h# R- [0 I; R* u$ u
+ S i ~; O9 Z public Object buildActions () {
% \) j8 \: Q7 {; m1 K! Q8 @ super.buildActions();0 s( i& m' V) W1 }% G
& A2 L7 f, P+ N$ v q // Create the list of simulation actions. We put these in
. X$ V" }& Z6 o$ } // an action group, because we want these actions to be
* |% s, r, s8 o6 W+ P! o# `1 ? // executed in a specific order, but these steps should3 K) }& M( o% I) b ?4 W
// take no (simulated) time. The M(foo) means "The message
" G- y9 J; j6 k! R // called <foo>". You can send a message To a particular; h0 ~# Y& E q! ]% F7 t3 L f, w
// object, or ForEach object in a collection.
C# P% \' i2 s3 v
/ M; ~2 i2 p; F# c% k: m // Note we update the heatspace in two phases: first run# c4 a, Z% b n$ i
// diffusion, then run "updateWorld" to actually enact the
c+ L& l& t9 N // changes the heatbugs have made. The ordering here is
$ r8 f l+ F, P3 U // significant!& I9 ?) J! |' T/ V8 O$ }1 r7 a
; d( l) W5 x. z$ I, K // Note also, that with the additional: f( x8 y* R0 |$ \1 d
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 M2 C. u' S3 Z, o
// randomize the order in which the bugs actually run
$ C) C: @# J9 t6 H" ` // their step rule. This has the effect of removing any
7 e1 l# v; M! L# N5 w // systematic bias in the iteration throught the heatbug3 R( ^4 J7 ~5 E& a2 ]' o/ L
// list from timestep to timestep
. ~) F* ~- ~/ @ 7 p: g, d( Q& @* n
// By default, all `createActionForEach' modelActions have
4 Z( Q& a- i* S: l8 R) z // a default order of `Sequential', which means that the
$ ?- R/ M4 ?; t( K" s5 S // order of iteration through the `heatbugList' will be
5 j {9 l4 j q) P5 Q // identical (assuming the list order is not changed8 S/ f/ c6 h, X8 G9 O" }
// indirectly by some other process).1 V1 n0 S1 D1 u$ S( F$ A
* `+ A T' {/ |; [
modelActions = new ActionGroupImpl (getZone ());' @% F+ e3 V/ e0 H
( s" I5 [ e$ I/ a" C
try {
- M6 ~- G* P" S0 j$ C" K" Z4 z2 { modelActions.createActionTo$message6 M. r; D8 P: }6 R* U& y ~, Q2 ?+ u
(heat, new Selector (heat.getClass (), "stepRule", false));+ j% R& F* @, n; h( {# h+ X
} catch (Exception e) {
A4 `2 q. M& I5 J, E9 A System.err.println ("Exception stepRule: " + e.getMessage ());
' ~( c; x3 |7 t, o8 H7 U }1 V9 F8 Q, P% e
( [0 O- Q, y! k5 t, D try {
, M6 j2 N: x3 v; f Heatbug proto = (Heatbug) heatbugList.get (0);
: {' J3 d. Z% O# h+ r8 N3 b# r Selector sel =
( ?2 T" t4 v% G* S new Selector (proto.getClass (), "heatbugStep", false);# B" T$ M# Y ^* F( B u% O
actionForEach =* @, M) [" F! |4 Z
modelActions.createFActionForEachHomogeneous$call
; c2 U# `6 j: H$ e8 E (heatbugList,
; O' l, }' u: c new FCallImpl (this, proto, sel,4 k% x3 |4 {* s* v, C
new FArgumentsImpl (this, sel))); Q7 f ?' ], S( p& A
} catch (Exception e) {1 \7 h0 w4 D4 W7 S- y; }
e.printStackTrace (System.err);, K3 V2 X2 ]5 y
}
0 }. v: x5 `( Z* Y - v; J# P. e% T6 D1 w
syncUpdateOrder ();4 k7 @. O( g1 L( a
. O6 V6 B( [! v" s9 @$ U try {
" j W! E+ f( }3 d$ T5 W2 [ modelActions.createActionTo$message $ s; N( Y* C! H$ y' b6 U
(heat, new Selector (heat.getClass (), "updateLattice", false));5 Q* k/ l% ?4 [
} catch (Exception e) {
0 ~0 D; Z. g) p' |* ` m3 ]4 f" ^( T System.err.println("Exception updateLattice: " + e.getMessage ());) V* G3 `* D/ f. i+ [
}
6 t0 `6 L7 a& H8 @( Y# T, P/ L% k# n 1 c. q/ m6 M7 w; e& f
// Then we create a schedule that executes the! g6 S4 q$ s4 F9 B3 E& H+ _
// modelActions. modelActions is an ActionGroup, by itself it
, _/ U! b! i. B* H: M // has no notion of time. In order to have it executed in; o+ ^& t( ]$ D8 `6 r
// time, we create a Schedule that says to use the" ~ t% M7 t' S" p8 S- D
// modelActions ActionGroup at particular times. This+ ~8 N) Q* d4 ]* v r% D$ M
// schedule has a repeat interval of 1, it will loop every
( [( [3 b- i2 i U" n, `, d // time step. The action is executed at time 0 relative to4 f- `. T6 \5 j
// the beginning of the loop.
$ |4 d9 ?$ C2 n) [
+ G3 ^/ L8 Q. X+ Y6 j4 p2 U // This is a simple schedule, with only one action that is
0 L$ t' U! f( i. D // just repeated every time. See jmousetrap for more: d- c" c2 M$ ]
// complicated schedules.
0 N& c+ N7 b4 P+ `' ^+ ?% ~! A2 B 7 c9 W+ ~; P9 x: r4 R! j1 P
modelSchedule = new ScheduleImpl (getZone (), 1);. c$ Y) _8 s9 h# T' U6 `
modelSchedule.at$createAction (0, modelActions);
3 Q6 s( r5 u4 t/ h/ l3 R2 M6 E
9 {1 b( y. R& C return this;% o: D6 }7 s5 m8 B6 c: V
} |