HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 @- ~+ ^4 K! \6 O* h
+ V; E. M% c- p3 u3 | k- Y public Object buildActions () {* J) C/ R1 A" j- ^9 h. s& n3 ~
super.buildActions();
* F% P) c' B( k
* P3 G1 f# B# m' \# e3 H // Create the list of simulation actions. We put these in
0 \2 q) @, D- u$ k4 D // an action group, because we want these actions to be5 D9 x' _( ?' u' D! W) a3 `
// executed in a specific order, but these steps should
1 E8 q) Y( @5 @/ T: I2 d // take no (simulated) time. The M(foo) means "The message+ c" a6 |4 \4 P. @
// called <foo>". You can send a message To a particular. I# _4 _8 m9 d8 l' \8 d7 m4 r
// object, or ForEach object in a collection.. H; U7 s% Z9 n4 c" C( R3 ~
! [6 ?+ Z( N2 c9 h+ d& g4 }0 f // Note we update the heatspace in two phases: first run
0 c! b7 o5 `3 H // diffusion, then run "updateWorld" to actually enact the0 {" h9 f1 O2 E3 x A- X
// changes the heatbugs have made. The ordering here is6 @9 f4 R, j+ p( n p1 J
// significant!/ ^4 C5 F# I8 F5 T2 j* ~
2 j( n7 q% ~" x+ X // Note also, that with the additional* n" D6 V5 a* O' \0 w7 e
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ f* v2 y3 Q. _ // randomize the order in which the bugs actually run- I4 R4 _5 x9 [3 D5 L I
// their step rule. This has the effect of removing any' ?+ G' Y& z0 T# ~2 c- i( v
// systematic bias in the iteration throught the heatbug! [, j4 E& c! K& D; D2 B6 ^% y4 y$ H9 ]
// list from timestep to timestep
& G+ z6 n/ j r 6 O9 F" L8 J9 f* c: ?
// By default, all `createActionForEach' modelActions have
5 c; t) i' ?3 W // a default order of `Sequential', which means that the
! I& t: Z3 I; v- ?5 t // order of iteration through the `heatbugList' will be. }/ w# O8 g& W9 c9 l
// identical (assuming the list order is not changed2 {* Y* z9 V, i( t5 ~) g( E
// indirectly by some other process).
& ^& o4 G* Y, K v, M* e 9 S2 _3 J) v) w8 a" h+ a/ k: Y
modelActions = new ActionGroupImpl (getZone ());6 Q: q( G/ J0 c) P- X1 S
7 b2 h/ X" p' Z! u3 |7 M. W& i! \ try {
" V6 m9 c: l1 L) q) h$ x modelActions.createActionTo$message
; k( _7 z8 N- g' }5 U1 Z( h (heat, new Selector (heat.getClass (), "stepRule", false));
2 w/ W, Z1 O( g+ q$ Z- n } catch (Exception e) {
% V+ [% p9 O! ^! E% G9 T1 v System.err.println ("Exception stepRule: " + e.getMessage ());
. c% ^0 N4 s0 O }
4 T+ `3 Y- Y" L1 j! }0 b, l7 ]" Z1 K% x. |- U0 B
try {
: I( N' u8 S0 t+ [# G+ I* \8 u Heatbug proto = (Heatbug) heatbugList.get (0);
+ ]; }) U7 X6 ^ Y( p Selector sel =
, [/ K8 w' C1 U& w$ ?0 L new Selector (proto.getClass (), "heatbugStep", false);
( B- }- ~# Z0 U actionForEach =9 ^# @5 p6 \$ |6 @# H j( @
modelActions.createFActionForEachHomogeneous$call( _" q, J' W( I# |! [
(heatbugList,5 \6 ?. H2 k; I+ M) E, [$ {
new FCallImpl (this, proto, sel,' S' A+ C, _+ ~0 L+ P5 b. u
new FArgumentsImpl (this, sel)));
+ f2 O* k: K( q8 _+ P" }8 R } catch (Exception e) {5 {2 ? I) i0 B
e.printStackTrace (System.err);% O; L7 A q' q! N( B
}
: P" ?( N. a3 B, v* y5 u0 s
3 D; l- X9 n# M) a0 C syncUpdateOrder ();
0 a" |- i$ `8 D l3 i! [, U! p: U/ g( ]+ D1 U
try {3 P* c, A0 J- m: C! h
modelActions.createActionTo$message & I& q& L2 T0 q6 C( ^2 ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
p2 C9 Z3 W& f. F } catch (Exception e) {
' q' L! P- \9 Y System.err.println("Exception updateLattice: " + e.getMessage ());* b2 F0 p1 ~6 i1 k
}
1 X8 k$ p. B4 C* T7 `
3 @% z3 x5 ^4 Y) x // Then we create a schedule that executes the
$ N1 J4 b& P/ P3 V- m8 _, q8 }1 c8 x // modelActions. modelActions is an ActionGroup, by itself it
- a% v! o$ J; H' c9 l# d // has no notion of time. In order to have it executed in/ A/ M' J7 d5 |+ R# Y) J
// time, we create a Schedule that says to use the
& w+ F; N* |2 p* Q* Q* Q2 k // modelActions ActionGroup at particular times. This5 O4 R. { B5 b9 M% S
// schedule has a repeat interval of 1, it will loop every
, _& }0 \% Z# S( m // time step. The action is executed at time 0 relative to4 w! J5 Z' |' a ?) p
// the beginning of the loop.& p! z0 x8 r+ N+ \, g' v
+ D# ~8 p' I" U
// This is a simple schedule, with only one action that is( o" o. S% E0 F' T$ h/ j2 F# {& E
// just repeated every time. See jmousetrap for more
! z8 | m2 p) ^& {9 j. o% B2 O. ^+ ^ // complicated schedules.# ?& b9 F5 `8 b) C
' N1 U" Y5 n& U. n9 p9 ]# Y( l- D
modelSchedule = new ScheduleImpl (getZone (), 1);9 @- P! U9 |( a$ O5 G& I8 ]
modelSchedule.at$createAction (0, modelActions);
3 G5 ?# S! ?/ ^* [3 z9 a4 J( d6 O ) v( a& e5 }, B: L1 d7 x5 A8 H, D
return this;
: |) K4 G# B/ |3 Y8 W) ? } |