HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. P* V. g# E/ _8 r' x1 f
* w' M4 p% j' {' d; b, y
public Object buildActions () {
5 K/ k' ~( p# H9 j! V' ? super.buildActions();
1 E% c. i7 U' ?* S
5 w& r1 \8 O0 G# p // Create the list of simulation actions. We put these in
) T: m4 `2 N1 d: H // an action group, because we want these actions to be
5 H7 c. N% O8 v' ?$ `8 C t$ z // executed in a specific order, but these steps should
0 i( r4 Q) U4 U4 D( K9 C) n& R' a // take no (simulated) time. The M(foo) means "The message# e- c6 U4 |: p7 ?. M
// called <foo>". You can send a message To a particular {1 x' h# w6 o" {5 ~" V: C
// object, or ForEach object in a collection.
' W2 E' @' z' `) S
8 b5 H$ o" Z+ Q1 X Q9 O+ p // Note we update the heatspace in two phases: first run! R, y0 [1 a2 d6 h
// diffusion, then run "updateWorld" to actually enact the
/ H+ |; I; {: R. G; n8 b. }( H/ X // changes the heatbugs have made. The ordering here is" g$ B: Y! }$ r3 w
// significant!
. X' W$ H7 p F* ?3 a. m6 E ! ~ n8 w3 {: {: k' x: q! n
// Note also, that with the additional- {8 x0 s* |2 S) J- T
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 B M, j/ s5 v3 F3 ]
// randomize the order in which the bugs actually run
2 y+ l& r) c+ p k7 N // their step rule. This has the effect of removing any5 ~! N1 E5 f3 M
// systematic bias in the iteration throught the heatbug Y5 [5 l9 R2 l8 T8 X: |% ?1 Z3 s
// list from timestep to timestep
/ T: V: m) z& V1 V h: A1 l
. D4 e8 m9 l, t# Y. w6 {5 H // By default, all `createActionForEach' modelActions have( @0 w' J) a& x
// a default order of `Sequential', which means that the8 q* E" K9 v! _3 e
// order of iteration through the `heatbugList' will be9 ~5 w. O/ U6 O# o0 e _, N, ]: {9 ?
// identical (assuming the list order is not changed
, Y" s3 \ T) Y! \ // indirectly by some other process).$ `& x# u0 w& Q& X& E' u
8 p1 T) I3 S; j* D6 S modelActions = new ActionGroupImpl (getZone ());: L/ R: l$ _0 L( |! _: s
* J% a( v; W2 o3 _7 x- T6 _7 N% ? try {
1 N& X* s& V1 { modelActions.createActionTo$message
! J' e; {2 \9 n2 d, u) | (heat, new Selector (heat.getClass (), "stepRule", false));
9 |8 k: F3 i% ?" _7 G } catch (Exception e) {
0 O3 e; O% A; ]: ~3 c6 n& m System.err.println ("Exception stepRule: " + e.getMessage ());
2 E& [2 M! d* y; d }
4 p* H$ ?* B/ ^, |6 t3 N* r; w& u: o( }2 K$ ^
try {
3 y, H7 h9 s+ V) d- A& T Heatbug proto = (Heatbug) heatbugList.get (0);
- R5 S% E( R# L" I1 ] Selector sel =
( H' [( b2 x- L2 ` new Selector (proto.getClass (), "heatbugStep", false);
% Z3 r, I1 ^1 ~- B actionForEach =
1 J6 v' T; p/ s9 x6 A modelActions.createFActionForEachHomogeneous$call/ E& ?' O4 D' W: w; c; S ]$ |. Y
(heatbugList,' o! f. w: s6 a( O' |
new FCallImpl (this, proto, sel,
6 R y6 w9 S/ B5 X+ |& a0 \6 X new FArgumentsImpl (this, sel)));
5 K6 V3 |; B7 o8 S) n: T } catch (Exception e) {
% C5 O7 L$ h& d$ _' L e.printStackTrace (System.err);! y5 j0 w$ O" z$ K
}
% I+ Q# ~' [) X: H0 P & m) W, Y8 }5 x: t" r8 n2 T! R
syncUpdateOrder ();* Q4 v% F, R, m8 p) ~- V
$ T% k& k9 Z# i% i! K
try {
( X p; C8 J" b modelActions.createActionTo$message : b- k* L" q( X, u0 }
(heat, new Selector (heat.getClass (), "updateLattice", false));
) B! z: k5 o- `8 e. t } catch (Exception e) {
' ~$ R5 i- M! x. E5 W$ d System.err.println("Exception updateLattice: " + e.getMessage ());
1 K0 |+ i; V; H! V) q }( j$ b+ S1 y: z1 o4 P
7 y1 W/ V& Y' M+ U5 Z
// Then we create a schedule that executes the4 ]8 [8 N: m# K7 l3 R& m* |( D
// modelActions. modelActions is an ActionGroup, by itself it7 a0 t" z7 D' }% p! Q- h* O/ J
// has no notion of time. In order to have it executed in. N+ c. w7 k5 `
// time, we create a Schedule that says to use the
1 _, f- U' m z* c+ ~; I // modelActions ActionGroup at particular times. This
# a4 u" i% y5 h h0 U2 f // schedule has a repeat interval of 1, it will loop every
# C+ e6 d- g0 c' K$ D // time step. The action is executed at time 0 relative to
! t- _) m! `" [0 W, ?" F // the beginning of the loop.
* R9 H. `2 C% p' f( C1 ~/ O7 W, M+ Q- z0 K! e# \( u+ R
// This is a simple schedule, with only one action that is' t2 V3 J% K) _% v1 h3 |
// just repeated every time. See jmousetrap for more
3 h! L% u% a7 x! P/ O // complicated schedules.
; l1 {* q6 F$ f5 L5 |1 d8 u
+ w7 O- j( c- L1 E modelSchedule = new ScheduleImpl (getZone (), 1);
# e9 I& K% G; ^ modelSchedule.at$createAction (0, modelActions);. W1 l* {4 d9 |7 p; j
2 G4 ~: V; y5 D: J5 I/ F( g" P4 v
return this;7 R" p# E/ W; T
} |