HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 a. c; ^8 H; q, q0 ?& a O% I6 o
1 g9 O9 g( D0 c/ G) p, l
public Object buildActions () {
1 o% E7 [; ^, \. | super.buildActions();
# \8 |2 A# Q; }6 y) l) | 5 M8 Q* j) f. f3 G# u* P
// Create the list of simulation actions. We put these in" ]: t7 ]" ~2 @, n$ Y
// an action group, because we want these actions to be8 q7 N V% ]" W8 ~( g, [$ y$ {
// executed in a specific order, but these steps should. R6 \: g$ U0 O5 Q9 c
// take no (simulated) time. The M(foo) means "The message
2 C- |6 r! e- D0 f: l // called <foo>". You can send a message To a particular7 p, o; ~/ j6 t0 ?6 v7 r# L, H
// object, or ForEach object in a collection.
x' P& L( w7 I- b v% a
1 `4 n& b8 g1 J. p1 [ // Note we update the heatspace in two phases: first run4 I3 \% n" B4 E/ _
// diffusion, then run "updateWorld" to actually enact the
, S3 k# c5 {3 O% Q( _8 \ // changes the heatbugs have made. The ordering here is+ S8 ^" ]/ q7 J) R; M3 B
// significant!
& R0 ?: ^( Y3 [+ ` H [
# A, B* l A+ G$ X7 [0 l // Note also, that with the additional
) S6 x2 i9 C" Z# e" x, M- }$ a- l // `randomizeHeatbugUpdateOrder' Boolean flag we can# W4 i: O; P1 B1 F0 w
// randomize the order in which the bugs actually run' {6 Q6 h, z1 _- o2 B" o3 x
// their step rule. This has the effect of removing any6 E U6 E3 `5 o! J- F
// systematic bias in the iteration throught the heatbug
. Q# Y9 g9 i0 d, D$ l7 ~ // list from timestep to timestep
' m" X: ^- S2 l c. ^ V$ p
( Z Y7 n3 v" }0 h // By default, all `createActionForEach' modelActions have; B& E! x8 N: S' }9 ^
// a default order of `Sequential', which means that the
' p- I& a; C2 X/ }/ W // order of iteration through the `heatbugList' will be" `; {0 H" B3 E; y& s
// identical (assuming the list order is not changed9 o( {- M7 W1 j; m
// indirectly by some other process).2 h5 e$ q0 w* K. e& z D8 j2 c2 S
, w- l2 p/ _4 m+ F% V& F- i$ o4 P" M
modelActions = new ActionGroupImpl (getZone ());
$ l* s4 R# U+ p* C" C
0 ?5 k: H: ?# p$ I7 I, v try { m7 W4 H( M. w F6 e
modelActions.createActionTo$message1 V9 {2 R! {' X Y
(heat, new Selector (heat.getClass (), "stepRule", false));, x9 _" C- G6 Y: J0 N
} catch (Exception e) { w4 t6 r/ l+ ] e* G1 s0 S
System.err.println ("Exception stepRule: " + e.getMessage ());' |' g. h/ L( i/ n* t
}
& n$ t: }# ^" k- ?3 Y5 U9 O0 t j+ s4 C) q1 h& W
try {! W$ P2 g6 h$ r C3 f
Heatbug proto = (Heatbug) heatbugList.get (0);' D' `- ]5 _, t2 a- l! t
Selector sel = / R$ s) r# c8 Y- [
new Selector (proto.getClass (), "heatbugStep", false);
1 B$ `) _- g3 g ~! o& R actionForEach =$ G- e' F8 P9 b' ^5 N- v% j
modelActions.createFActionForEachHomogeneous$call8 t* @! C1 z& J0 m. v6 f% `
(heatbugList,
9 ^ w, |* R0 {" Y- ` new FCallImpl (this, proto, sel,
4 u" R* X0 z, i/ V$ p new FArgumentsImpl (this, sel)));- r, H1 O0 b1 r7 w' O2 a
} catch (Exception e) {5 p+ |/ u7 J/ \; D8 @9 T
e.printStackTrace (System.err);
) S! |, |% r7 }9 ] }0 N! _. ]+ Q5 M( e
6 C, |9 L B. ^. p# t7 Q& R' G
syncUpdateOrder ();
( ]% n2 k, U6 \( M' I% g
! {& C8 q6 B$ l5 B& c try {
6 v! [) _ k/ A- D% I- l0 F modelActions.createActionTo$message ) i' @, |2 ?) ^# R& m* Y: b- r+ Q
(heat, new Selector (heat.getClass (), "updateLattice", false));
: f0 }, L4 J3 T; F } catch (Exception e) {
4 i; ]1 t5 Y* D# m" f- m' |: o System.err.println("Exception updateLattice: " + e.getMessage ());
+ Q" c5 j4 g( U* R: F }# }$ e. b* i5 r6 s* G" A* H" I! P+ Y# n' {
+ Q3 i6 C2 N: E0 J9 \6 ] // Then we create a schedule that executes the
7 a# p5 }: y1 D // modelActions. modelActions is an ActionGroup, by itself it. p. S0 p' Q6 C1 f! |3 X5 a
// has no notion of time. In order to have it executed in
* ~9 G: V# g% ^3 q // time, we create a Schedule that says to use the
( Z9 u4 B7 H- | // modelActions ActionGroup at particular times. This
' U# E: f% r2 x, b$ L // schedule has a repeat interval of 1, it will loop every
5 A9 g) H) j4 q ^7 T' N( }9 d0 @ // time step. The action is executed at time 0 relative to) [ G2 l2 N' v
// the beginning of the loop.
+ q' x* T7 z- q( u2 g& n& h0 l1 h8 {) K3 [
// This is a simple schedule, with only one action that is
7 F2 Q$ [9 J/ K8 f. e7 ?; | // just repeated every time. See jmousetrap for more
, q) \+ b1 n/ R" c // complicated schedules.3 Y* h$ n, g% Q. X
9 m3 K0 y! Y: h: A
modelSchedule = new ScheduleImpl (getZone (), 1);7 p6 r6 x/ a& E
modelSchedule.at$createAction (0, modelActions);; A( r1 l7 Q; H
2 j% V# Q7 P* |: t/ {8 Y
return this;! B" c- a7 p: B9 h" _0 N
} |