HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" ~ {( X7 f/ v3 W0 P
+ f( X) u1 d2 ]/ }/ n8 J
public Object buildActions () {0 J* Z) ]7 O8 r5 P
super.buildActions();/ |+ J( p# m; F5 X; Y+ K& o) X: p
4 t- \6 y5 ]9 v1 `
// Create the list of simulation actions. We put these in/ `! _8 b2 x$ N: \& a8 i
// an action group, because we want these actions to be
5 \5 U* W' v. E$ N% R0 x // executed in a specific order, but these steps should
* f; K$ L3 S8 G // take no (simulated) time. The M(foo) means "The message
6 [4 Q: | N% i0 O. o // called <foo>". You can send a message To a particular% d o, L, n) V, W( w6 |! O* r
// object, or ForEach object in a collection.
8 A( z7 x3 e2 s4 n
3 b( n2 \ ?! _ // Note we update the heatspace in two phases: first run
; i7 p3 { Z! g o' K s // diffusion, then run "updateWorld" to actually enact the6 g% Z4 q, a" ?" P6 h1 [) M
// changes the heatbugs have made. The ordering here is" X2 J J G% K9 x0 P0 S2 G( D
// significant!: |6 ~) L1 b5 j+ c3 H: j
) F$ J" ]- w1 t3 k+ a( ]7 v // Note also, that with the additional4 I6 t( N: @# \0 ]3 a) |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) R$ ~2 a* t2 F# _: t9 T3 y // randomize the order in which the bugs actually run4 u* N" |8 i' N- q
// their step rule. This has the effect of removing any5 z9 y6 R& }' U5 h
// systematic bias in the iteration throught the heatbug H4 g: c: g& a# f
// list from timestep to timestep
4 O3 z$ R" L5 d6 @ ! B7 d0 O j5 o
// By default, all `createActionForEach' modelActions have2 w$ P v$ d K; K& t7 ?* d
// a default order of `Sequential', which means that the
; l/ A: X8 T" K4 }( u // order of iteration through the `heatbugList' will be; u2 b( V; |. K3 W7 v" |
// identical (assuming the list order is not changed
4 J$ ?$ S% Q I" O# k3 j8 o4 g // indirectly by some other process).
2 g) L$ S" a7 G. B/ [ 0 P2 T' n+ e9 b/ A( g1 u
modelActions = new ActionGroupImpl (getZone ());
% I. S7 M2 Z- e
) e! X' i' r/ c: H try {( N+ P% f7 g9 F7 w. o& m k
modelActions.createActionTo$message: }% X4 A4 R. o) ?# G& [: J. Z
(heat, new Selector (heat.getClass (), "stepRule", false));
0 O, O0 D& x6 z" D } catch (Exception e) {
, Y9 W- e; W! G/ `6 t& f System.err.println ("Exception stepRule: " + e.getMessage ());9 R# P2 n7 {# m Y1 ~3 T$ p' y/ [
}9 E7 @0 R' T* X- M1 e
. c% I) ^/ ]/ O2 D5 G2 T$ d
try {
! n! T7 e& l* S# o5 B Heatbug proto = (Heatbug) heatbugList.get (0);
9 N, d8 R. n% E" M. C) l Selector sel =
% I6 M( m2 [0 y! }: j new Selector (proto.getClass (), "heatbugStep", false);$ E8 s2 L8 y" A) J
actionForEach =
, b& B$ e( ^ o modelActions.createFActionForEachHomogeneous$call1 L. Q0 y, |5 |% ?8 T) K. q
(heatbugList,
6 R" M: n# w- W6 N4 x. L/ w& X new FCallImpl (this, proto, sel,
6 c7 x- T4 t! s7 C: v, K, z new FArgumentsImpl (this, sel)));
; P% Q6 k/ q# K0 f) j( u# k. J" T. V J } catch (Exception e) {# Q2 _$ F5 J3 I/ g
e.printStackTrace (System.err);
; M5 u2 o: k( P; b$ z }1 {! r" ?' A8 {/ _
' m, _5 n" o5 M4 }0 @% q syncUpdateOrder ();3 }( J. _* i: W7 t
) H7 i4 o, S `4 t, D. r try {' E' F" @' }- f4 z- _" c) V9 F9 Y
modelActions.createActionTo$message $ m' M( ^6 `+ Q. O/ J
(heat, new Selector (heat.getClass (), "updateLattice", false));
( U6 W6 v+ b+ C3 r+ b( \: m* Q( d } catch (Exception e) {. c/ ~& W/ }) _! q0 s. B) v" N
System.err.println("Exception updateLattice: " + e.getMessage ());
0 a, Y- c, d+ p E }
* ?; d& V3 P" z; G1 X; T# J ; R1 N% x }# r. @" a
// Then we create a schedule that executes the* U$ `* d! c9 N2 g
// modelActions. modelActions is an ActionGroup, by itself it" \, i' n6 D0 d/ i
// has no notion of time. In order to have it executed in
& G& l0 G |$ [9 H! F // time, we create a Schedule that says to use the
( n+ k# I* c$ h e5 I // modelActions ActionGroup at particular times. This/ ?& L0 }+ {; y8 N- m7 C/ Y
// schedule has a repeat interval of 1, it will loop every5 o2 ]# b3 `$ g% ^1 D7 ? O
// time step. The action is executed at time 0 relative to. ?1 s' }5 b V. `: ~/ o
// the beginning of the loop.& I* M' w/ X6 O6 x, d! M$ ]
\2 o g+ @! a1 `9 y0 m& Q v
// This is a simple schedule, with only one action that is& M- a+ `2 n0 d
// just repeated every time. See jmousetrap for more
% r9 u! N, K3 u" M7 |; O // complicated schedules.# y/ B2 U0 f0 \
" [- \) f3 c4 K, @: G modelSchedule = new ScheduleImpl (getZone (), 1);+ O$ J: N% ~) ^1 m! L! J& S( X
modelSchedule.at$createAction (0, modelActions);( ~& U [3 U* A) m3 L
' [0 U2 ~ e" Y6 P return this;" W2 X$ x4 T! I8 Q6 l5 x
} |