HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 ~# i' U& W! ~0 g: m- Q
* r+ ?1 Z9 N7 |1 K: B/ D' K- c; C public Object buildActions () {9 Z& J8 k, L( Y$ Y1 a
super.buildActions();
: {6 F# F$ o( B0 ~: a. i# }6 _9 U
7 b2 O+ p1 G$ J( y* c // Create the list of simulation actions. We put these in& ^( q0 c/ ^3 { ^" M2 O2 X- G* s
// an action group, because we want these actions to be9 h( _: b: ^! A' J0 N
// executed in a specific order, but these steps should
% k6 E* `4 ?& p: F // take no (simulated) time. The M(foo) means "The message0 l1 ]% E; J- g6 E
// called <foo>". You can send a message To a particular1 P% o- X9 v0 O7 \ `
// object, or ForEach object in a collection.
# f' i2 f2 [3 y1 u/ o' Y
: Q% U: M& I8 g# a$ Y3 ? // Note we update the heatspace in two phases: first run
' t' ?3 i/ K5 k( w6 [, T // diffusion, then run "updateWorld" to actually enact the; H1 S9 k% l; Y) @
// changes the heatbugs have made. The ordering here is
4 D4 q' x2 k7 G U F( [) j9 V L8 _0 e // significant!
- s: h4 P' H/ o+ u7 f9 A$ p ) ^/ a, m4 y0 z; d, N6 t6 n
// Note also, that with the additional: Y o P6 u- n" q/ U# s* Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 Q: G3 s' _" R2 b" X& W- H4 V
// randomize the order in which the bugs actually run
8 D! I9 O* O+ Q. [6 z( H9 m // their step rule. This has the effect of removing any, k6 r* W& h- Y: T8 x' a- Y; r1 P
// systematic bias in the iteration throught the heatbug
, c# P& a. ? ]& t // list from timestep to timestep% k- w2 A# u8 G5 R" H% u8 t) C
2 v; s+ \( D4 [+ `- {' Y/ ~* X3 K
// By default, all `createActionForEach' modelActions have
4 v( M. P$ p5 y& y3 y* B. e // a default order of `Sequential', which means that the! G' ^9 S8 @- l' P- ^. j4 f
// order of iteration through the `heatbugList' will be
. A6 O% l4 `9 { [+ D" b5 ?* ~9 l // identical (assuming the list order is not changed$ ^/ [% c4 [ D) w
// indirectly by some other process).
, h- J5 |$ |# u `& a: e5 X) N6 ~: r' N$ _. y
modelActions = new ActionGroupImpl (getZone ());% J/ q- [9 G& G5 @7 i
7 X( v$ e& i9 e1 k) K try {
5 H( p$ x. j% L1 E modelActions.createActionTo$message1 X- z0 F" h D& H
(heat, new Selector (heat.getClass (), "stepRule", false));! n+ P/ z5 T# ]" \1 d% @
} catch (Exception e) {, R6 G' B4 J, Q0 [
System.err.println ("Exception stepRule: " + e.getMessage ());
/ p! [' i2 G# F# V, W }
/ j* Z k$ g3 V' y/ F2 ]
! j- A" p G2 L: { R+ }8 f try {
/ d Y! X2 ?& f) M Heatbug proto = (Heatbug) heatbugList.get (0);
4 E! X: y* {6 B/ B1 X Selector sel =
7 `+ y2 `, E- P# @ new Selector (proto.getClass (), "heatbugStep", false);% U/ O4 v6 P3 a* V
actionForEach =: R" j6 b) K7 D0 H* _9 `; \
modelActions.createFActionForEachHomogeneous$call" ?0 n0 ?* ~& r* W7 J
(heatbugList,; g# _3 P' f v' J0 G
new FCallImpl (this, proto, sel," e6 Z; ?9 W# u/ W- s
new FArgumentsImpl (this, sel)));
$ |7 d$ Z d) ?% ?! p I } catch (Exception e) {
2 ^/ \8 B) l# O% z e.printStackTrace (System.err);. C+ F% A' a/ a) l. N
}& s, V: Q& C# B5 }6 K9 o& C
2 K( l+ C/ ]0 C5 B u7 c
syncUpdateOrder ();
7 H# Q$ e) i s$ @9 l* _4 W" Q8 s- h$ h) @" i
try {4 u1 f8 T6 U ]8 p2 d
modelActions.createActionTo$message ! ]9 k4 W+ V: w! E
(heat, new Selector (heat.getClass (), "updateLattice", false));$ U3 `. j( j' E# A6 m
} catch (Exception e) {: A" i& ]3 j W( U3 }; o
System.err.println("Exception updateLattice: " + e.getMessage ());/ x3 d3 s0 D$ a9 n5 r# V m
}% u" p1 T6 T. i2 u) u( k1 c
2 n8 a5 l/ \& ]0 S% {1 q
// Then we create a schedule that executes the/ Z1 b; n' P1 W4 B; F. ~* ?; k
// modelActions. modelActions is an ActionGroup, by itself it4 Q7 {! L0 m7 r; L# ]- J
// has no notion of time. In order to have it executed in
: O1 M' Q* X1 ]) y* t; p; K& R // time, we create a Schedule that says to use the- o `0 I# ~& v* l* M2 w6 X# p
// modelActions ActionGroup at particular times. This: g6 o! T5 r; A h! C) y
// schedule has a repeat interval of 1, it will loop every. d3 C* x3 P2 v2 ?) J
// time step. The action is executed at time 0 relative to7 r' J. R6 \0 |5 }+ s* L4 }
// the beginning of the loop.
( R# N. m' r. [" |" m
/ l/ ]7 C0 _9 B6 M0 x( |- I // This is a simple schedule, with only one action that is
% _7 B( q! b% k% M# F Y! g0 N // just repeated every time. See jmousetrap for more
& f$ `% {% O {: t6 ` // complicated schedules.
1 S) Q5 o( S k+ {% O( X3 W. p* _ . j' M5 s- k0 z7 Y3 G0 X
modelSchedule = new ScheduleImpl (getZone (), 1);
$ ?5 `% q* ]: ~# F* ] modelSchedule.at$createAction (0, modelActions);. u3 W- j' z5 ^
' a$ ~7 I% B9 J2 H return this;
( _4 G9 T2 P' g/ g( z2 Z } |