HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; I% X' L$ Z/ m; g) J
5 x/ Q3 L0 O# u9 h5 O public Object buildActions () {
" w' I1 w2 I @ t7 m8 c super.buildActions();0 `- v+ {5 E/ B! g. F
: [1 V% o3 q% e/ c" I5 T+ R' U
// Create the list of simulation actions. We put these in/ y C9 P# _# y
// an action group, because we want these actions to be
, k& U& P1 m. J+ m7 V9 U+ k% k# l // executed in a specific order, but these steps should( `8 w: a" R0 K
// take no (simulated) time. The M(foo) means "The message
& ~. |/ Y4 K2 e4 q8 K // called <foo>". You can send a message To a particular
4 N, ?: \# P- q // object, or ForEach object in a collection., \, ~ U' n4 l* P
m, ]7 f8 j5 X4 q) V& L
// Note we update the heatspace in two phases: first run
" H0 d- S) x% x8 o5 ] // diffusion, then run "updateWorld" to actually enact the$ B: I1 U7 e8 b5 c) P
// changes the heatbugs have made. The ordering here is
2 u6 t' u6 y6 x5 w2 @: J // significant!3 W' _) J, ^1 A
# T! O- w+ u) y! Z- B5 p2 V$ v
// Note also, that with the additional
$ M6 Z. \% ?( J8 a1 I- y" w% L // `randomizeHeatbugUpdateOrder' Boolean flag we can1 {" }( @3 |- R
// randomize the order in which the bugs actually run
0 u8 b9 @4 a0 F7 f' p$ M // their step rule. This has the effect of removing any% x, A- t: K) z/ i q
// systematic bias in the iteration throught the heatbug
5 \ _. x0 n! e! d: x; _" @: l2 b% Y8 z // list from timestep to timestep
- [# C" [3 k) l% m* B$ w - E# J" ~0 Y: |1 o) X
// By default, all `createActionForEach' modelActions have
2 p' u: K* D. k$ v3 t6 X // a default order of `Sequential', which means that the
6 d P4 h$ B% K7 G' l7 v# Z // order of iteration through the `heatbugList' will be! `0 b1 a9 L0 \6 S4 f8 J! q7 x
// identical (assuming the list order is not changed
. B$ G8 b6 p; f0 Z" g6 G& l6 X/ |/ \% e // indirectly by some other process).4 ^ i7 R6 W. p7 `/ p: n7 x! P* q
" M* K1 z0 W- S modelActions = new ActionGroupImpl (getZone ());
, B& t, r( u# V+ X) \8 n
$ `: q& }7 m5 T' M& w try {
! R% K, U! J6 I. E modelActions.createActionTo$message/ M3 X5 q1 c; ^$ T1 F% f l
(heat, new Selector (heat.getClass (), "stepRule", false));
7 w+ R* }+ B1 ?# q$ O } catch (Exception e) {
. r# o. q! p! [ r' a System.err.println ("Exception stepRule: " + e.getMessage ());
5 K% v' T/ \7 |/ K$ P }
o0 V {2 M3 C" V3 `5 Q. d$ p {) J* [
7 e$ U3 g& j( \" I2 P% @. b# M1 ^, q try {9 w) s. C4 i; }8 I3 p0 t7 Z* t
Heatbug proto = (Heatbug) heatbugList.get (0);
& J- o: I' H. L. }. _ Selector sel = & p8 M/ t D: x1 _ s
new Selector (proto.getClass (), "heatbugStep", false);, I0 A4 R$ i; C& Q5 y+ K0 S6 T
actionForEach =% w: e0 _8 [: z) p. Z) w) G9 N+ G
modelActions.createFActionForEachHomogeneous$call
* F& M1 G1 y; i) S5 p (heatbugList,4 W6 b% f% z4 V- a, E3 S1 l# B5 j
new FCallImpl (this, proto, sel,
8 W8 [' m/ l+ h& c, b new FArgumentsImpl (this, sel)));/ l0 F8 E' g* Y8 j
} catch (Exception e) {. S8 `# {: v/ b1 g2 M1 P
e.printStackTrace (System.err);
* f1 q# M& H8 ~) Y9 s; e }" `8 t0 x) U4 f4 _, K: A
- |) |* [: q! |$ Q( j% R/ B% p: l
syncUpdateOrder ();
- V: w# Q5 `8 N& N* f
- p) v2 ~6 [6 X+ u try {
' W- x- Z3 l/ J% u/ o4 B" E P% R2 p modelActions.createActionTo$message 1 f& f+ J; R0 J: c! @9 B
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ A: f2 Y7 E6 Z& g } catch (Exception e) {: f1 [$ ~* i: b) a, {9 q8 j
System.err.println("Exception updateLattice: " + e.getMessage ());) y# U- Z$ H* B7 Q
}1 b' _# b3 E6 P3 D
) |+ _( K4 I% s; r) ?
// Then we create a schedule that executes the2 T8 F& ?& Y$ D( ?8 M% d
// modelActions. modelActions is an ActionGroup, by itself it7 \4 U$ ~: r+ u/ n/ G+ \
// has no notion of time. In order to have it executed in
# d7 f5 [ }" j- J3 A& Y# J# k // time, we create a Schedule that says to use the
- t: I1 p5 \' ^ // modelActions ActionGroup at particular times. This/ Q' g) y8 X- {2 x2 Q0 l
// schedule has a repeat interval of 1, it will loop every
% f. f8 H7 ^$ a // time step. The action is executed at time 0 relative to
, S: w1 \0 O2 K$ F0 b+ |; B. C/ S9 a // the beginning of the loop.+ }. L. [) e+ i! F' B0 w3 j
: @; ]% `6 ?3 N+ Z+ P6 x# S. ~ // This is a simple schedule, with only one action that is
" p2 e5 j5 m2 c" H r: B- g // just repeated every time. See jmousetrap for more
, d0 T$ Y3 J7 x# d$ ]( n+ k# S // complicated schedules.
+ X5 ?1 D: S V: p 4 I5 h) F/ k! `( H
modelSchedule = new ScheduleImpl (getZone (), 1);
( u2 N* Y; f4 d" k1 y modelSchedule.at$createAction (0, modelActions);
i3 C3 Q" _# x: g# I9 K. Q # c; z9 }+ P. W `! a3 S( W* R
return this;" ]2 ~/ e) x6 j1 g
} |