HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. S1 h/ W: U$ C0 e2 _6 ~) f! |) A; }3 q/ C9 s- m# K" b
public Object buildActions () {
( I5 c/ Q3 d, k super.buildActions();$ y& i7 f2 s# E( j& R% M9 ~) x4 k% p( B
2 Y) a0 G# y! f, [( r# w/ ^
// Create the list of simulation actions. We put these in
# j8 z4 f. p0 U% R // an action group, because we want these actions to be- C2 V# ^ M% ?1 F: ?0 l6 J
// executed in a specific order, but these steps should3 S/ U( }1 c& @% q" S
// take no (simulated) time. The M(foo) means "The message
+ Q! K# {5 |2 X% W // called <foo>". You can send a message To a particular
% _4 ^( K8 a0 x" P* J // object, or ForEach object in a collection.
6 R) k/ k/ O/ T: P2 S$ h 2 u: R0 L6 L& k% R
// Note we update the heatspace in two phases: first run
9 H, d6 x8 G1 M }7 ]% a // diffusion, then run "updateWorld" to actually enact the
0 `8 A" y* t' { [- T // changes the heatbugs have made. The ordering here is
/ e& j8 X4 _6 [+ Z% R9 j) ] // significant!0 N1 F9 g; W8 w
6 l d& G N% m9 j% ] // Note also, that with the additional4 Z- C4 Z9 a. p# T0 ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can; W! J8 s+ D$ x& e3 H, d: G
// randomize the order in which the bugs actually run
% K/ g+ ^1 b' z. k8 G' ^& a // their step rule. This has the effect of removing any
0 {9 ]/ [9 S5 O% B+ y: @ // systematic bias in the iteration throught the heatbug7 c2 Y1 h# Y0 W) Z
// list from timestep to timestep
- B6 f9 k1 N) F g9 E+ g
* M" u" r; s$ ?) L // By default, all `createActionForEach' modelActions have& K2 M8 j3 o$ |7 [
// a default order of `Sequential', which means that the1 B+ r k4 n" ?/ e& d$ v
// order of iteration through the `heatbugList' will be
! p, I2 A" E m2 A. r // identical (assuming the list order is not changed- [0 n8 x ?8 [1 o, a- V( J
// indirectly by some other process).
. K- w' C+ @ h7 j 0 z% e2 V( m$ @% {
modelActions = new ActionGroupImpl (getZone ());
* U, N- p- N5 A1 D
) E8 s! N& _/ J& k0 b try {
, G8 M3 {5 O# \) j& Y) R* c modelActions.createActionTo$message; N% ^% |# u/ K5 W. r3 B
(heat, new Selector (heat.getClass (), "stepRule", false));
( I _) l, Y- ?( L } catch (Exception e) {
1 G( O6 {4 }! ?4 I8 j0 Z$ p3 S System.err.println ("Exception stepRule: " + e.getMessage ());
' L( L; ?1 {/ ^ }
9 L/ E$ L' R! r* |
$ l+ p t7 {" i8 T9 z% o try {) F' P( T( c0 [- M( }" V$ {" B3 _ B
Heatbug proto = (Heatbug) heatbugList.get (0);
! S; y- J4 B l8 ~) W Selector sel = 7 r/ p0 _' s$ E5 K! y: o3 a8 \- O
new Selector (proto.getClass (), "heatbugStep", false);
3 J% Q) o3 p" g' ?- v actionForEach =
) A% \' p; ^/ q# @ modelActions.createFActionForEachHomogeneous$call* U( J5 L# ^0 i% _, Q2 C9 I& Z
(heatbugList,8 j! Q; B } z( f2 B% V3 k( O6 w! W
new FCallImpl (this, proto, sel,
' z1 \: g1 T3 D4 ^ new FArgumentsImpl (this, sel)));
/ i& C- C$ T" k6 o) N } catch (Exception e) {2 E% y$ R& }8 [
e.printStackTrace (System.err);5 y+ z1 M! W: k* S+ `& c* k. C- ]
}+ {& ~+ B/ R. w' I
- B. |8 m$ s, Y/ E6 y+ E8 i w syncUpdateOrder ();
5 W: c7 S2 q4 U9 n$ H& X% K7 C) ~" _( s1 S! t1 Y' S3 o
try {
) X% h% x! b" F& {# V# B1 j modelActions.createActionTo$message
" @; O, W$ S. t; O (heat, new Selector (heat.getClass (), "updateLattice", false));
8 \3 W/ t; g! U/ W m, o, J } catch (Exception e) {+ a+ Y6 Y( u4 m6 v
System.err.println("Exception updateLattice: " + e.getMessage ());8 [2 s* \" B; {' f, g
}1 W8 R* Z# ^: s, R* _0 |5 @6 D
, M( U- f7 m5 h, l- X9 i( R // Then we create a schedule that executes the$ y% R( f" q4 D+ _0 W
// modelActions. modelActions is an ActionGroup, by itself it
) o" Q) F% L: l" D- ?" Z // has no notion of time. In order to have it executed in
+ j9 o& p. q3 ^: I // time, we create a Schedule that says to use the
7 W/ g( `; Q1 ]. m" Z& v // modelActions ActionGroup at particular times. This
4 _. C0 Q0 M0 R // schedule has a repeat interval of 1, it will loop every5 M+ r' V8 Z, O+ z
// time step. The action is executed at time 0 relative to
4 M% | N: B4 Q5 {9 B // the beginning of the loop.9 S( U3 r/ V, C( j- P, m) W. \
* S; A7 A! u2 K4 p, V* B
// This is a simple schedule, with only one action that is
4 |2 Y, j' G2 o5 b1 W9 `& ` // just repeated every time. See jmousetrap for more# I2 m% b3 w: n7 C, A# _
// complicated schedules.
: F' \5 p% Z( i- i ' o/ N4 i" @ J ]3 u
modelSchedule = new ScheduleImpl (getZone (), 1);
* N/ s& w# y7 r5 x: Y S modelSchedule.at$createAction (0, modelActions);% K2 B* F, U- x* l0 x! @' L: q
4 p. A J. Y% [' v' H
return this;( R& Q4 Z/ r; h# G8 O
} |