HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 y- c/ E: b" ?" V) T
- y$ q, J$ p5 M% [3 `8 S( B/ ~ public Object buildActions () {( m# k& P* y* w0 R8 X- d
super.buildActions();
4 o9 ?' t& i. W, m , e0 U; U, T: M3 f( u* q" ?2 g- {. I
// Create the list of simulation actions. We put these in" O; r' {" R: l9 u" ~! A
// an action group, because we want these actions to be) P4 [$ w3 C7 n' ~" S6 L
// executed in a specific order, but these steps should
) l' C8 N7 ?) | // take no (simulated) time. The M(foo) means "The message
: X' v0 c: S3 F- E7 Z5 x7 x // called <foo>". You can send a message To a particular
0 ?. M( j. v) G: w; G) p; g // object, or ForEach object in a collection.) x4 H: X2 F! [+ o4 \2 C
% A3 J N* ~, f- V4 M2 M3 j8 q$ H // Note we update the heatspace in two phases: first run; h, ]0 O" i; o% E
// diffusion, then run "updateWorld" to actually enact the! T- Q; t: m. }8 G0 {5 X- m
// changes the heatbugs have made. The ordering here is
6 n- F+ p$ l* R9 H // significant!
) K% r, R9 a* t+ G9 g 3 m3 y% Y9 Z0 e4 }* b
// Note also, that with the additional; [% b( o; t$ L w- k
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ p& L6 |' h5 u: y; u
// randomize the order in which the bugs actually run: Q' I+ p8 H7 f) E: g$ {. P
// their step rule. This has the effect of removing any0 W& e" w( _; X5 c
// systematic bias in the iteration throught the heatbug1 A# ?0 a& n) w- ]- t: E$ @# g' ?
// list from timestep to timestep
1 C" e6 b2 m+ g- }( d
y. Q7 L7 ~3 O6 ?0 q, k! {0 H // By default, all `createActionForEach' modelActions have. E ]4 ~' K3 O/ i
// a default order of `Sequential', which means that the
% ` k: I7 b9 y3 p5 C$ _ [9 w; g // order of iteration through the `heatbugList' will be
4 x3 K* i( I* F/ `8 r4 P- T9 K // identical (assuming the list order is not changed
( c8 p7 V6 F8 |3 _" H2 i9 S // indirectly by some other process).
2 }. e% z$ ?! g9 M5 y9 m- {! R $ D, d8 J" m) n: K" z8 [
modelActions = new ActionGroupImpl (getZone ());
% N) }" W! O- C9 e! `. G) ?" L5 w( \! u
try {
6 U+ k/ Q. z5 p7 f/ B modelActions.createActionTo$message# ~3 T# w! f6 }( M! D' C
(heat, new Selector (heat.getClass (), "stepRule", false));7 f+ S6 O A! n: t; U5 G% W1 f! {
} catch (Exception e) {: r/ ]) D: q2 k1 S7 y% r$ H% X
System.err.println ("Exception stepRule: " + e.getMessage ());3 H! F9 o. ^8 w* q( k/ T( H
}
. N9 r7 @( V, ]. [, Q% Q; Z8 P
# [7 Z% ~% r8 K( @ try {! V1 s k& i5 L6 Q
Heatbug proto = (Heatbug) heatbugList.get (0);
4 ~5 h3 K4 _. R( U: o Selector sel =
+ r. M$ {: t, n' I2 m N new Selector (proto.getClass (), "heatbugStep", false);
0 L9 o/ m8 V" J3 t5 u1 x actionForEach =) i3 ] k" c/ x( U
modelActions.createFActionForEachHomogeneous$call* d# ^( `+ u5 h3 S5 }$ e
(heatbugList,7 E6 M! e6 B" Q# o
new FCallImpl (this, proto, sel,
' L% k+ g4 L* P. O7 O new FArgumentsImpl (this, sel)));
. W- Q# U2 D ~" i$ q, U } catch (Exception e) {
: o+ y5 J% ?+ u" J! a! F: p e.printStackTrace (System.err);
3 v+ ]) |, H8 o9 Z4 M }
/ H" ~3 G% A0 Q
3 [ j) Z/ I, V syncUpdateOrder ();8 r0 W) }. R) U" _9 E
$ P/ V' p' t) J' w9 G try {
x9 X1 o" _* r8 k$ R) u modelActions.createActionTo$message 6 s3 i8 ]; g; U. Z5 E3 I
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 u% v p1 f7 r8 N1 A! c } catch (Exception e) {& T) ^5 c3 M8 Y
System.err.println("Exception updateLattice: " + e.getMessage ());
* C; |5 r, z) ` }" m. z" _: q' k" Y4 w
- V. \" ] X- R7 f: E
// Then we create a schedule that executes the
3 f2 d+ ?9 Z; h: H6 m // modelActions. modelActions is an ActionGroup, by itself it; H# c5 Q# z+ j; k: `; h4 e
// has no notion of time. In order to have it executed in
% a x8 X3 e/ |; H6 L6 r5 \# m3 j, L // time, we create a Schedule that says to use the
( Z' w; X! N& Z! a" V, r4 V // modelActions ActionGroup at particular times. This
- u7 x4 B/ x& A; X2 C& d, t5 a // schedule has a repeat interval of 1, it will loop every
( E, v5 _5 S; w! u! V9 B" e) X // time step. The action is executed at time 0 relative to
6 U, T7 x2 b0 H6 o. @3 ~ // the beginning of the loop./ k c" b* U* f8 B/ ~( n
. I& m9 m9 C# l( T
// This is a simple schedule, with only one action that is( r4 H6 T; v/ X3 [- \$ Z
// just repeated every time. See jmousetrap for more" y$ S( U, M9 k$ q
// complicated schedules.
7 g9 w* p: S8 h* X: ^7 _- a
3 B7 a, q j) ^. J" y" o2 j modelSchedule = new ScheduleImpl (getZone (), 1);) |6 N/ D; o7 Y; J
modelSchedule.at$createAction (0, modelActions);! H1 C! s5 d$ j' L6 T9 J( f
% w3 N5 I( X+ m+ F' G1 U return this;
# N8 K9 L& B! N$ {) g } |