HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: s. a# @- q7 P8 n
* f0 q# D2 {* d( Q% u+ `* H% L public Object buildActions () {9 ^5 b. w0 }$ h* b9 C
super.buildActions();
( }8 g) a7 U# p3 R0 J. ^
7 C: |* ]+ v3 h5 \! D! M. o // Create the list of simulation actions. We put these in) }9 i! K8 b3 U! y; x
// an action group, because we want these actions to be
3 l1 d# w( t+ m( g // executed in a specific order, but these steps should
6 o* P# f/ N. j- p // take no (simulated) time. The M(foo) means "The message
$ o# j4 [9 q0 S$ |, @1 L // called <foo>". You can send a message To a particular
( a; d4 c; W. F% c7 ]$ F0 r2 B) z5 E // object, or ForEach object in a collection.# A- x; i& j2 h( I% h
( ^$ I) r* u( [, J# V7 }2 `
// Note we update the heatspace in two phases: first run% s) \: n. S, _7 u4 `0 b
// diffusion, then run "updateWorld" to actually enact the
' `6 g6 p1 a5 b" \) H- f // changes the heatbugs have made. The ordering here is1 l/ ]0 C7 i& H1 U' ^! F) q
// significant!
7 g) L/ G% T; ~
# w0 x- X2 e( L! f- i" d2 I! V // Note also, that with the additional) d* ?! ~% r, {# v( K6 m6 v! c
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: S: A' z( L, c, A // randomize the order in which the bugs actually run
: f7 M) r8 u" `: i // their step rule. This has the effect of removing any! V' n7 z* ~: c. z4 ~
// systematic bias in the iteration throught the heatbug3 L# b( b& F1 Z8 F" D8 B
// list from timestep to timestep
& o4 j- Y5 i% | O6 P; ]2 y
! ~! X; }( D; v! ^. Y // By default, all `createActionForEach' modelActions have
1 t' n! i0 \2 P3 E0 W4 |7 I // a default order of `Sequential', which means that the) z3 Q* m+ o; T! e2 n
// order of iteration through the `heatbugList' will be
+ x3 D V* X0 p3 C // identical (assuming the list order is not changed, \2 ?- [4 A1 t7 L
// indirectly by some other process).1 @1 x4 e4 ?$ l/ _ z0 [* g
2 b [, l, u2 H. }6 o modelActions = new ActionGroupImpl (getZone ());4 R. ?( V: B$ b d
& G/ [# l( t# k8 E ~1 }/ ] try {7 {2 c" d& B; j# ^+ t* Z- I
modelActions.createActionTo$message
2 \; B1 e$ {# s8 b9 T% z# I (heat, new Selector (heat.getClass (), "stepRule", false));
9 v5 F" N. W4 m v } catch (Exception e) {
4 P2 u7 { B7 q/ P& Z+ F$ `! L! _ System.err.println ("Exception stepRule: " + e.getMessage ());( `: O$ S; d8 ?6 o( i; f% \4 ]
}, s5 v/ [- I5 [
( x7 l/ ` Z* V8 }' Q- G: e try {4 ]/ d0 j+ @: @2 g
Heatbug proto = (Heatbug) heatbugList.get (0);1 n2 B1 U: u( v9 f* {5 Y/ N
Selector sel =
6 y" S4 x, U, e- @ ~- ~$ P4 a5 z new Selector (proto.getClass (), "heatbugStep", false);
3 D: L$ \+ V7 {$ f6 W actionForEach =6 Z# L9 c5 r. P9 c
modelActions.createFActionForEachHomogeneous$call$ u% X2 P j" r5 A: D& q; D# q
(heatbugList," {, b8 h( y0 W; t
new FCallImpl (this, proto, sel,
1 P% D* N$ l4 W; R& D new FArgumentsImpl (this, sel)));) Z7 Y# X& \: n/ {
} catch (Exception e) {
* P9 _+ _0 r2 @# k e.printStackTrace (System.err);
8 ]1 S2 H8 o2 h }( X; H! Q3 O- _* j. j! z
# k! `- v# p, X! N; I
syncUpdateOrder (); |: P4 ]% j0 i$ V' t
1 o o: V* t% W try {1 O/ E4 ]/ u# v* h& \7 Q# \
modelActions.createActionTo$message 5 K0 x* f8 C4 H2 K3 w8 i
(heat, new Selector (heat.getClass (), "updateLattice", false));$ Z: H8 k2 B1 z: L0 N
} catch (Exception e) { n8 M5 R* N" V2 h
System.err.println("Exception updateLattice: " + e.getMessage ());
" o6 D$ [- ?( f1 H! q% Z }
: m4 f( y; t1 S: \4 d / n4 t8 H- s- f
// Then we create a schedule that executes the8 j5 x M) w- L( @
// modelActions. modelActions is an ActionGroup, by itself it
) C9 x; O y9 G# d9 e5 ], m. o/ L // has no notion of time. In order to have it executed in* N9 }8 m7 K, L. a
// time, we create a Schedule that says to use the G: Y: `8 ~. w+ w
// modelActions ActionGroup at particular times. This" T" C% n1 L, w" }# b( D
// schedule has a repeat interval of 1, it will loop every
6 q) k Z: S: l8 U // time step. The action is executed at time 0 relative to7 S1 z0 W$ e4 l P
// the beginning of the loop.
) H8 n, }0 ?0 U* Q/ U4 j6 {
?/ p( g7 Z( F2 Q3 f1 Q // This is a simple schedule, with only one action that is
9 M: M* W' M7 z) I9 ~ // just repeated every time. See jmousetrap for more6 ^4 w- U, W6 F; Q5 a! _
// complicated schedules.
. }: f ?9 b7 O; u/ D : E B1 m2 a n: G5 {3 t3 `% R( G
modelSchedule = new ScheduleImpl (getZone (), 1);
1 \( v$ W- L7 y s4 _ modelSchedule.at$createAction (0, modelActions);
3 }0 q/ s5 A n; ] V# M; K 6 W' c- T4 k5 Z7 ~( C
return this;
, ^2 g2 V6 a! G } |