HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! _4 G) A! f+ V# a4 w4 |; |
8 }. w+ ^* P+ V$ p. P, I
public Object buildActions () {
& n) }5 M; k, k9 r( n+ v& `1 v: P super.buildActions();
4 ?; D0 g, |) f( a ' j2 l3 {" H0 q2 y, e5 M
// Create the list of simulation actions. We put these in
! M5 N7 _0 r2 @% ?" j( m // an action group, because we want these actions to be
, K; h7 R% r* l' }) c! M" O // executed in a specific order, but these steps should1 y) L) D y. {2 L, X3 x; r
// take no (simulated) time. The M(foo) means "The message9 n8 F$ ?+ h2 R9 G/ E) b
// called <foo>". You can send a message To a particular
0 K: ~: Z8 L$ w // object, or ForEach object in a collection.$ g) {. g3 t' Z( N& d! X
r+ c9 f: C( I6 ~$ r( G
// Note we update the heatspace in two phases: first run5 k# J3 }! a% K1 H0 N3 F$ N% B
// diffusion, then run "updateWorld" to actually enact the
- C, V' ^( @% E- Z // changes the heatbugs have made. The ordering here is
9 U7 R& c9 s' ^8 \, \4 v0 x // significant!6 y# z+ Q2 t* [3 }
4 u% S% o- t9 @' {
// Note also, that with the additional
- d" M$ G2 y9 t% P1 v // `randomizeHeatbugUpdateOrder' Boolean flag we can3 N+ _! i3 H. x9 q7 a+ |6 C
// randomize the order in which the bugs actually run( T$ i6 h3 L0 c: K
// their step rule. This has the effect of removing any8 s. `! p' w/ [; d4 B) _; J. e3 }
// systematic bias in the iteration throught the heatbug
/ ]; b$ x) k' ^; d0 c% M // list from timestep to timestep
5 O- W5 N! D! `4 m/ x 8 o. O" Y( R1 I- A6 d
// By default, all `createActionForEach' modelActions have
, b! f+ F2 H- o+ S2 X // a default order of `Sequential', which means that the) R% y3 r- ~- h, w
// order of iteration through the `heatbugList' will be
. {% j0 u/ |' @' y: Z // identical (assuming the list order is not changed
2 @+ H/ n$ i+ N // indirectly by some other process).
3 i0 x: t7 r K
$ ?) m- C0 J5 ^/ p" H' e$ x modelActions = new ActionGroupImpl (getZone ());
) M) |# c& W6 [3 M. R, g
' @+ K$ w; y) ?; M, o! g try {, Q3 V3 @. V( j r0 C
modelActions.createActionTo$message
' \" l# `- Z/ U! G3 E (heat, new Selector (heat.getClass (), "stepRule", false));+ \% a+ Q* ^4 o% J
} catch (Exception e) {6 Q* d* c8 ], O* t# E
System.err.println ("Exception stepRule: " + e.getMessage ());
1 Q0 b! v( u9 x- O( p! {4 M }
0 o2 A6 U2 m' T( F: i ?* D5 q* o$ G# `& Q
try {
4 m9 @" L$ u. { Heatbug proto = (Heatbug) heatbugList.get (0);+ ?$ P/ i4 M0 W
Selector sel =
7 p' j4 g i& C3 j2 V new Selector (proto.getClass (), "heatbugStep", false);5 k1 y2 |* k) I3 ^
actionForEach =
5 v3 J; x+ B# |- g modelActions.createFActionForEachHomogeneous$call8 f5 u5 ?# m* t9 A4 L1 \: d- r
(heatbugList,9 s4 ]: k# n) G/ Z9 @6 {
new FCallImpl (this, proto, sel,' C! ^6 x( z6 ]6 K$ W) h, l' I! W
new FArgumentsImpl (this, sel)));
0 M/ k1 c8 y' O. b& D7 \0 I+ x } catch (Exception e) {2 _% ?) U) L" [( {3 g
e.printStackTrace (System.err);1 R& ~$ k) A: Y9 W) X
}5 o% Z6 F+ B1 ~5 F
( L* D8 S" Y) r! l0 @ syncUpdateOrder ();
4 {/ B% \3 \; f: E2 \; x, d8 P6 ]' F( w5 v; B* w
try {; ?, b2 @+ U8 q" q( ^+ h
modelActions.createActionTo$message
; ]' S9 W# k# G/ u* C/ J8 B, M1 j (heat, new Selector (heat.getClass (), "updateLattice", false));
: g8 s1 n+ f' | } catch (Exception e) {5 w* }" b1 ~, d- [# E
System.err.println("Exception updateLattice: " + e.getMessage ());
6 \5 B$ f, L. `# J5 G" _ }( c- m- C, b( K" J
# e' R0 b) U1 h* k! K // Then we create a schedule that executes the4 @) a0 h) d+ T
// modelActions. modelActions is an ActionGroup, by itself it
/ m) E; Y5 D0 r* I // has no notion of time. In order to have it executed in
% }& C, v* N. |, ~, k B- M$ \! ]3 W // time, we create a Schedule that says to use the
: x- e, k: v- X; A, S8 O // modelActions ActionGroup at particular times. This
" k+ b; |: b6 T( S+ R# S // schedule has a repeat interval of 1, it will loop every' S0 I0 g( q, S8 |2 p8 N
// time step. The action is executed at time 0 relative to
+ Q1 v+ e6 ]8 ~' @& J // the beginning of the loop.9 y9 l' j9 W1 [
4 E: o6 S7 }( w% F% Q6 D% t // This is a simple schedule, with only one action that is
( U3 Q* Q" O/ n# k& Q // just repeated every time. See jmousetrap for more
7 s& z9 @3 T1 V% }5 v // complicated schedules.$ m% W* `: o z" P5 w
: s3 P& d* }1 P# M) E. T( Z modelSchedule = new ScheduleImpl (getZone (), 1);2 g! v0 f7 J1 P5 J6 ~
modelSchedule.at$createAction (0, modelActions);8 D2 ^# i% Z2 k: j5 j$ y0 `
* n, Q N# W9 z. A0 k: a1 w4 j return this;+ ?3 U0 `, y" E& k
} |