HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" R& P; u# m& ^2 ~
$ {: N0 f6 y' X: s: h0 h public Object buildActions () {$ U* S. T9 D) q/ Y f, R/ ?& Y
super.buildActions();/ S5 A' C* o- C& g* v. _8 k$ j/ ~
" S3 v0 x+ e$ W' Y( x, r // Create the list of simulation actions. We put these in! o) i6 N! @: T* T
// an action group, because we want these actions to be
# w# u- g4 ]/ X // executed in a specific order, but these steps should8 M+ U+ Z! P; B! F K) S) l
// take no (simulated) time. The M(foo) means "The message
) Y' D x2 G2 m, Y3 C9 l% P7 q // called <foo>". You can send a message To a particular
9 U, ]8 B# @' h0 _ // object, or ForEach object in a collection.. z* m2 x" g2 g% b, [( i
9 u I1 ]5 q u4 c H; x // Note we update the heatspace in two phases: first run. n# r. ^6 [5 N, e) g
// diffusion, then run "updateWorld" to actually enact the
% i3 K1 W4 y |+ ^3 @' d3 | // changes the heatbugs have made. The ordering here is
% S& j, k6 ` S // significant!
, S) |! M3 n8 u # a% u3 G4 j) }: h
// Note also, that with the additional0 S( B4 u; X# z. ~3 ]8 E. |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# z, }. O* C+ E9 F, w* B3 L // randomize the order in which the bugs actually run2 n; J s) L |( p* [$ b `
// their step rule. This has the effect of removing any
$ p2 o2 F3 d! p' |% N0 _0 } // systematic bias in the iteration throught the heatbug
$ i! x+ U) u$ J, h4 Z // list from timestep to timestep7 o' l7 w9 t0 m* I: S1 ?' U
0 r4 G$ \* e0 ^+ j9 f. [, Y // By default, all `createActionForEach' modelActions have8 i! \0 U. a' p3 r0 z1 c
// a default order of `Sequential', which means that the7 \0 j+ H: J4 [6 ~" X( s
// order of iteration through the `heatbugList' will be
$ h. D* n4 Q8 Q* {; p8 K* L3 u // identical (assuming the list order is not changed
( \: u+ e, L1 q) O/ H8 b- o // indirectly by some other process)./ s; P+ S$ D6 W
6 V& |7 j: k7 }$ a, Z1 S( x6 B modelActions = new ActionGroupImpl (getZone ());
8 D: w# ~* w6 Z+ _# V2 T! ?4 g, b5 k, \: f% }8 x
try {" E l8 B' N. [: D
modelActions.createActionTo$message
5 v% o, U% T$ v/ Z1 v' t1 K1 Q (heat, new Selector (heat.getClass (), "stepRule", false));
! ^4 u' Y, X* j/ d } catch (Exception e) {
$ h0 F$ \8 S* e3 }2 ]/ J3 x System.err.println ("Exception stepRule: " + e.getMessage ());
: L/ D/ Z W3 t }
$ L% W- Q1 H7 P- S& E- {; n
8 z& F; _& A. b% d try {/ E' Y& T( M; r0 I8 z
Heatbug proto = (Heatbug) heatbugList.get (0);; X) T1 j1 q( P! Z$ @5 i, e
Selector sel = + p/ H& t0 P) [, H( m( k: z0 G
new Selector (proto.getClass (), "heatbugStep", false);
+ l# t. Y# |3 M+ l. x0 {2 t actionForEach =& ]/ o6 h# P9 |
modelActions.createFActionForEachHomogeneous$call Q7 I, r8 D) N' L
(heatbugList,
- x, q# w: E9 y _! ^# h- u" X new FCallImpl (this, proto, sel,+ r0 R5 p. l) B( ]) ~
new FArgumentsImpl (this, sel)));
: H# R" v- C7 W B0 Q5 i- r } catch (Exception e) {
0 h" V# r( Y$ r d1 G# R e.printStackTrace (System.err);+ _7 K. G6 b+ f5 G; @
}: a" m% Q% f3 i5 N4 N. H: u9 v6 m
1 y" q/ R' ?# ]
syncUpdateOrder ();
2 A6 x2 H( W+ |$ h
/ o3 _! y. ?. R7 {2 V1 f try {& ?* t! b8 ^1 i! q* [0 P6 t
modelActions.createActionTo$message
& W4 m3 H! \1 l( t4 d( L (heat, new Selector (heat.getClass (), "updateLattice", false));
& ~5 y8 |6 q- [+ l) ~7 w } catch (Exception e) {
) ]- _: _$ e: Q8 n" H) l+ H System.err.println("Exception updateLattice: " + e.getMessage ());
8 \ H8 [9 H' K' @6 V$ ?; e }; P% [; R. `4 z) p+ j. Q
8 Y" C$ f+ H5 V& _/ _! x+ U! d
// Then we create a schedule that executes the1 b2 ~* E! s w2 [: {
// modelActions. modelActions is an ActionGroup, by itself it0 C N" l9 a4 r& q: y8 g
// has no notion of time. In order to have it executed in
' Z3 I0 V. ?/ B, k // time, we create a Schedule that says to use the
/ B) \) r( ~5 x$ x+ ~1 ~ // modelActions ActionGroup at particular times. This( b0 H1 s0 p! U0 |. l Q0 ~" @3 B
// schedule has a repeat interval of 1, it will loop every
$ X5 I2 n F* }0 x' W // time step. The action is executed at time 0 relative to
/ R$ D% }1 |. Z4 z: x7 E // the beginning of the loop.
5 b" n$ ]! |3 m! b
4 G" U" O& r8 d8 M' s; ` // This is a simple schedule, with only one action that is: ~8 t s. T2 H8 _1 @/ _
// just repeated every time. See jmousetrap for more K5 Y+ ~% Y& f
// complicated schedules.
& l. Y; T8 W; s* [" W . d: w A7 l7 g
modelSchedule = new ScheduleImpl (getZone (), 1);3 H. g2 ]. h* p, r4 d: S
modelSchedule.at$createAction (0, modelActions);( V W6 d3 x, @; [. i
9 F/ C X" l* \# M; N6 b" K return this;
$ i8 E1 {1 K3 W8 O } |