HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ @5 }, E* s" C0 O$ e- [
" }! ~& T, t* y9 U public Object buildActions () {5 x6 H, z1 U2 `" c' s
super.buildActions();) x: J8 t- s$ x# H* U* O* t
7 R0 X/ B% k* ?9 c1 e // Create the list of simulation actions. We put these in
3 R! `1 f- V; N/ h9 F+ S // an action group, because we want these actions to be
( ]1 a+ f+ |$ Z1 ~ // executed in a specific order, but these steps should
[, U; T; U: _ H, B, }- a% { // take no (simulated) time. The M(foo) means "The message
" @1 R, `3 I0 |4 Y1 A // called <foo>". You can send a message To a particular. \+ r2 \2 z; Q8 S
// object, or ForEach object in a collection. {5 c; E( a+ y7 g. F# [/ o
* i g( W) K4 V+ y0 B3 e // Note we update the heatspace in two phases: first run
- h. H* N9 b1 p6 b // diffusion, then run "updateWorld" to actually enact the+ }. G+ T; L1 |5 V1 R3 L# l
// changes the heatbugs have made. The ordering here is- l* I" q z9 a }
// significant!
1 Q! N5 q& I- i$ u/ q 0 _1 N4 \ e) P, K. B" ?& ^
// Note also, that with the additional
! @4 F( Q: q6 J/ r" _+ d4 @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 b8 @5 y ^8 u& k // randomize the order in which the bugs actually run
M# |, o" ^: ^ // their step rule. This has the effect of removing any
- e Y- u9 O# g8 }* `5 n; [ // systematic bias in the iteration throught the heatbug, {0 m3 { l$ C8 t. r1 S- I
// list from timestep to timestep0 J1 k2 I: N2 y m6 S; k* O; W
0 \9 c+ ? m, k- H
// By default, all `createActionForEach' modelActions have) V w. j! a+ l5 x
// a default order of `Sequential', which means that the8 W2 b' X7 h( W# x" o0 z
// order of iteration through the `heatbugList' will be
* g" q9 `8 T/ `/ W" A' O // identical (assuming the list order is not changed) G& o3 D% `' ]7 X
// indirectly by some other process).
4 x# B H: v6 k) [" w& L) S! ]9 K: Z
9 x9 r7 m) ?# p3 F8 k* N8 X modelActions = new ActionGroupImpl (getZone ());
+ T6 K: ?1 C* P6 f8 a) V8 X: Y5 U$ O u( Z, {5 E' L9 Z6 q: w
try {
r# i* Q/ e M3 z; w8 J# q; S modelActions.createActionTo$message6 n; L' _ K$ T: W6 ~2 ?
(heat, new Selector (heat.getClass (), "stepRule", false));7 ]! K$ _+ l6 g* G5 O- V
} catch (Exception e) {
7 ~& p8 ~: O' Z ?: y$ z2 ^1 F System.err.println ("Exception stepRule: " + e.getMessage ());8 V) ^5 M7 Q+ A6 X
}
0 ]. n% {! N( n6 K+ W$ _ [7 g, f4 z6 |" F1 X7 \7 k3 r, g
try {
9 e+ G9 A0 Y* {% C% |6 H0 g7 } Heatbug proto = (Heatbug) heatbugList.get (0);
* i6 T `! H2 v& e" I/ F& z Selector sel = 5 E: I6 F4 u3 T- T' `; P
new Selector (proto.getClass (), "heatbugStep", false);
7 b0 Q) |/ C6 ^; u& C3 l4 p actionForEach =* X" r: j7 v4 N; h
modelActions.createFActionForEachHomogeneous$call; d4 Z& b+ l3 J T7 M: j
(heatbugList,
3 n+ H5 c2 G3 ?! g- m6 h new FCallImpl (this, proto, sel,
( V- v/ F3 `8 u8 U2 ]# u! p new FArgumentsImpl (this, sel)));. V5 q. |+ V r H0 w
} catch (Exception e) {
6 W8 V+ D2 F6 y7 ` e.printStackTrace (System.err);
& |% M4 Y Q) r }
6 O" j. g1 [/ W' S# u% g3 e( m% F
) e% ^1 G2 |' A syncUpdateOrder ();+ H* P& m' m. i- q3 a4 t. y
5 z7 R3 |0 u, ^2 I
try {, t! ^0 g: v) g6 H b) H
modelActions.createActionTo$message & p& c7 X/ j' _% [. [+ r& h: p" u, j
(heat, new Selector (heat.getClass (), "updateLattice", false));
# K. }9 B3 V8 E9 b) h8 b/ j, J; A( h } catch (Exception e) {
9 U5 Q: u+ z1 |, J System.err.println("Exception updateLattice: " + e.getMessage ());8 `4 I2 `6 h& s5 o$ J5 X- l4 P6 C* D
}
# ?% N# d7 J/ J# R0 Q! S: s. N
( z7 s0 Z& n# g7 g3 g2 W# r- K // Then we create a schedule that executes the" J7 r4 p8 k; t1 ]4 ^* B: o' n
// modelActions. modelActions is an ActionGroup, by itself it
+ q; a4 [; u5 o5 n. X2 n) f6 m // has no notion of time. In order to have it executed in! Z7 W4 L: f0 t z0 ?! v
// time, we create a Schedule that says to use the
7 m& s! }1 j" j6 e& A7 p // modelActions ActionGroup at particular times. This# e4 N, `9 E6 f. H
// schedule has a repeat interval of 1, it will loop every3 |" h, ?' g1 B7 `3 j; o* z9 f
// time step. The action is executed at time 0 relative to
$ i: \6 `( a1 f // the beginning of the loop.
% [! O; O/ q) b) i" W- t7 Y- }9 f/ M8 ^% a' O
// This is a simple schedule, with only one action that is
; X* K( [; @/ B // just repeated every time. See jmousetrap for more$ U$ y: _3 |7 L0 T! e
// complicated schedules.
s' }9 t# c+ H. H @ 0 L8 X7 L" |4 h! k/ P: Y* X" ~1 \
modelSchedule = new ScheduleImpl (getZone (), 1);! _, v9 e% f" f& d) U% l- x# Z2 b
modelSchedule.at$createAction (0, modelActions);$ D; J# k0 S5 v5 A6 Y& f, g
: \( C- ~+ b3 g" h- G. b return this;. U- r5 m5 r7 n- h/ P
} |