HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! w* M2 D Y" D$ ?+ s5 h% r
6 `& S7 @$ }0 D) R
public Object buildActions () {
" v3 U; m& x3 o' A. v1 h3 l- y super.buildActions();
4 l { s- k* G' }8 g
3 {0 b2 y$ b& r A: W // Create the list of simulation actions. We put these in
) q9 ~" [. X& z( E) @2 Q0 p // an action group, because we want these actions to be2 A) Q! H& J& i3 g1 b
// executed in a specific order, but these steps should
8 K6 n6 k4 Q I. w( A0 p // take no (simulated) time. The M(foo) means "The message- e3 V% z/ z1 D' f) h+ [
// called <foo>". You can send a message To a particular+ p& B( ~4 p! @. v
// object, or ForEach object in a collection. C/ L6 z- \! D/ H( D: ?. b
$ u- y2 C1 L& C4 n7 f( L // Note we update the heatspace in two phases: first run' m+ _) ^, ^0 x
// diffusion, then run "updateWorld" to actually enact the
) m: I2 g, r2 b( i // changes the heatbugs have made. The ordering here is1 ~7 D, f9 o: ]& C
// significant!
) o3 C5 `6 D- f, k2 D0 m
: f. l: d' W5 V8 l& }! f // Note also, that with the additional
0 M! k P' \( c# L( ~( ?$ l/ v: } // `randomizeHeatbugUpdateOrder' Boolean flag we can6 S g2 m' i# B1 \/ }
// randomize the order in which the bugs actually run
* x. ?) U3 P( O5 o# V // their step rule. This has the effect of removing any# L: y: r8 y+ z5 Z
// systematic bias in the iteration throught the heatbug
6 @2 f7 O2 q" P* x, L, C- b // list from timestep to timestep
% i% P* [. ~$ F* X; z) ^9 ] , c% ~4 ]1 K3 q# t# ]; G d
// By default, all `createActionForEach' modelActions have
T, ]+ H6 f' ?# J6 e // a default order of `Sequential', which means that the
. ~2 r, `! V! b8 _: ~* m+ _0 ^ // order of iteration through the `heatbugList' will be) Y4 X6 P2 K2 U- X, Q7 ^7 R! o9 B
// identical (assuming the list order is not changed t% t' c, d! X7 J
// indirectly by some other process).' ^+ H: h+ q% D# f) x
' y' W" {0 `$ \
modelActions = new ActionGroupImpl (getZone ());
# Y: V- l8 E! X# C
& ?. z) a; L Z: ~5 O1 h try {5 B. S% r6 M; [8 e4 h9 o# j5 u/ G1 h
modelActions.createActionTo$message
: Q/ M, u1 b" v: b; e0 `2 s6 ~ (heat, new Selector (heat.getClass (), "stepRule", false));
/ a2 p# M: d5 o, @! m } catch (Exception e) {
. d$ L. Y) K# W System.err.println ("Exception stepRule: " + e.getMessage ());
6 Q4 o5 Y4 f/ d0 I3 ^2 J }3 g% P& [2 P( X8 s- E
) f6 W% d! D4 _9 K/ z8 `1 K$ ^
try {
5 v: ]& m' y) ~: T" c. x Heatbug proto = (Heatbug) heatbugList.get (0);
, T4 o" O. v) x$ q Selector sel =
3 L! Z% [: z* [' y6 [ new Selector (proto.getClass (), "heatbugStep", false);8 m9 T) U% o! x2 {" X, B1 n
actionForEach =
8 `# W' m5 E$ W3 r modelActions.createFActionForEachHomogeneous$call: j$ f% W+ @% w4 D, p6 I+ z& H6 ^( t# A
(heatbugList,1 C+ T% m; ^' D; U5 \% E- W
new FCallImpl (this, proto, sel,
! ^# w: k; O, b- @6 C1 ^ new FArgumentsImpl (this, sel)));2 r0 Z, v: s* i* A2 E' m
} catch (Exception e) {
+ `* F( y% _2 f3 l e.printStackTrace (System.err);
^$ f) h+ M7 z3 B3 P# F# c }
+ h; ]- ^ x* l; H9 H# B" w- q
3 k M* a% F) `( z syncUpdateOrder ();
' s4 \1 Q/ J. N# R6 c/ e) t5 ~ Y
' y% @* ]6 ]3 R* W& E' |2 H try {
% W. R1 Z' V9 ^6 x! b9 L modelActions.createActionTo$message
. X$ X' G$ H/ B: G& _ (heat, new Selector (heat.getClass (), "updateLattice", false));
o; V5 w+ E! [6 ~ } catch (Exception e) {
7 P% ~9 ?5 D9 P6 g System.err.println("Exception updateLattice: " + e.getMessage ());& J3 Q9 N4 X5 v) N9 P8 H
}
% x6 w: k; N/ _) J% r/ q1 Z2 C0 c
j- O0 Q2 q. o$ a" E1 U // Then we create a schedule that executes the# b) V* k* P/ C1 p2 H# |
// modelActions. modelActions is an ActionGroup, by itself it$ ]! x3 ~! x# N8 |
// has no notion of time. In order to have it executed in* R( y" H! w$ i/ U `
// time, we create a Schedule that says to use the
7 O3 L. ?( `+ b- w2 t3 H2 P4 l: q // modelActions ActionGroup at particular times. This
7 Q! j- }& d5 r# v6 \4 i // schedule has a repeat interval of 1, it will loop every
9 [* y) q) ^0 N3 v8 j // time step. The action is executed at time 0 relative to6 A3 J4 T" y4 k$ G }! ~# w9 j
// the beginning of the loop.
: ?$ J f6 m7 G9 P5 K
9 r/ u# L9 S* a/ n* h // This is a simple schedule, with only one action that is
8 c$ U* u8 B/ q: p o( u // just repeated every time. See jmousetrap for more
' I F1 @7 n N2 x: O // complicated schedules.
5 B$ ~5 W! U0 P5 ~ J1 R6 W# \6 a$ _) D- G* G
modelSchedule = new ScheduleImpl (getZone (), 1);
x9 G& X; k/ }7 [- K+ v# B3 [ modelSchedule.at$createAction (0, modelActions);
3 R; }3 P2 y6 e4 P8 ]6 i) K& T H 9 r+ c5 P% I6 U: |' K3 v" C, r" \
return this;" |* M1 P, e% B9 `6 D
} |