HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, @) r( I3 ?' u4 Z+ a2 k2 u1 H; C
$ |) {, I' E3 A% [6 n+ R$ X2 G public Object buildActions () {
' Z; g( F) v$ n5 W& Y. h9 S super.buildActions();2 n! b% b; q0 {/ R* g% @8 W
9 P* p0 {- l4 |/ g // Create the list of simulation actions. We put these in* m2 v; q3 c' W y+ |; f
// an action group, because we want these actions to be2 _/ Y1 N7 x$ Z$ e h
// executed in a specific order, but these steps should |7 b4 A* X! }8 x' c0 ]- H8 a
// take no (simulated) time. The M(foo) means "The message
. k6 q- O. M# w' q // called <foo>". You can send a message To a particular: R/ b7 Y0 s1 n" C2 L/ _
// object, or ForEach object in a collection.
% A3 ~. }/ Z7 x. Z+ @9 ^ ! G. F* @) [+ D% r, C( s |! ~
// Note we update the heatspace in two phases: first run
4 H" }: ~) {) d, E" j6 x // diffusion, then run "updateWorld" to actually enact the
- v/ @2 q2 O$ m4 x- s% J+ ~% { // changes the heatbugs have made. The ordering here is3 a. V5 ?. L% g4 y; J5 ?, W6 q
// significant!
# a9 Q- D# y, W7 I
2 S! M+ P% U7 M$ h5 w% A9 | // Note also, that with the additional9 z! X% G% ]/ z# d- \; O
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 U, o3 D4 H+ r) D. a- U
// randomize the order in which the bugs actually run
/ E3 d6 g& }' T7 g8 ] // their step rule. This has the effect of removing any- V: ]* c* I$ Z/ I* @: }
// systematic bias in the iteration throught the heatbug
- \3 A$ B2 D; B3 x% o // list from timestep to timestep
* _: y, n9 O" Y3 @) q' x6 r# a
8 H: O' y" ~( I( c& [5 F // By default, all `createActionForEach' modelActions have
; B, |6 k; G5 C6 K0 P // a default order of `Sequential', which means that the; q" [& i2 Y5 p0 C
// order of iteration through the `heatbugList' will be9 H) F3 r; F _3 F9 A" M8 j
// identical (assuming the list order is not changed
# J Y+ ~7 U M: r4 w1 a, ? // indirectly by some other process).
& z, i3 c0 D C. Z4 h: t 2 B0 S0 O# }( A$ s$ | ?2 ^
modelActions = new ActionGroupImpl (getZone ());& n9 O# D" I$ U* g- X
9 L- S; y+ _* c7 g) ~+ H7 K" U' E. ~ try {
' t0 T7 V0 a2 h% o2 \2 k modelActions.createActionTo$message6 C9 q- i3 t1 |- w2 Y+ T
(heat, new Selector (heat.getClass (), "stepRule", false));
4 C7 {# T- n) } } catch (Exception e) {7 S2 |. ?( V1 Z1 R
System.err.println ("Exception stepRule: " + e.getMessage ());' H* I2 F) C, }2 [. N5 _
}# [& ?4 V/ X4 u+ ]- f3 E* ^' [6 h
2 M6 N! S; W+ M. J4 W
try {
0 D9 E) {8 f0 \ Heatbug proto = (Heatbug) heatbugList.get (0);
\' H+ ~) F) ? Selector sel = 3 P( S* n6 U! U6 A
new Selector (proto.getClass (), "heatbugStep", false);
" @ c* Y0 E$ @: m% M1 u9 B actionForEach =; D, z$ w7 t" C% y
modelActions.createFActionForEachHomogeneous$call
" V- g- h& U" Z U. b (heatbugList,
- g& n9 ^; h0 z, G1 U3 Y7 m7 F new FCallImpl (this, proto, sel,! x+ u$ M1 b' h9 M ~7 b, G
new FArgumentsImpl (this, sel)));
7 N) z: P! Q h! H5 G8 F/ P [ } catch (Exception e) {
, b: _) t0 t4 n* d+ s* V7 g e.printStackTrace (System.err);
1 N# J, G7 v4 W: O" ] }
" ?( {3 T8 m+ Z0 g4 W, o( r# \: ]/ N9 n
* H3 l& R) k; i$ l+ j, _/ N* x syncUpdateOrder ();' H5 i) R e! p A
+ z# v0 S7 R! @, k
try {
: @4 ?& H* ~9 C/ ^9 a z modelActions.createActionTo$message
/ x; ]7 {3 W: |9 {- b, x (heat, new Selector (heat.getClass (), "updateLattice", false));5 V7 d: u! f( A, ~$ x
} catch (Exception e) {; l6 U% T% U0 I' i/ ^' p+ ?
System.err.println("Exception updateLattice: " + e.getMessage ());% P/ \8 O" e, A3 f# _1 K
}
& e6 N E3 ?& Z @4 W
9 ?$ K5 P6 R6 m" z // Then we create a schedule that executes the1 c( ]) {1 l U$ H7 d
// modelActions. modelActions is an ActionGroup, by itself it
+ \; E. k* [" n6 P4 C# G+ g5 m // has no notion of time. In order to have it executed in
: @( j' j( \/ D9 U3 F* w/ u // time, we create a Schedule that says to use the
8 Q+ k# k& k' { // modelActions ActionGroup at particular times. This1 a0 U/ n, G. K
// schedule has a repeat interval of 1, it will loop every
9 U" Z+ J/ L* p: m // time step. The action is executed at time 0 relative to5 b/ @0 }( S+ e8 i1 }1 f3 F
// the beginning of the loop./ y1 X) t" c S
1 o3 c& h9 m! L
// This is a simple schedule, with only one action that is- W) K# b" Q, D: ^
// just repeated every time. See jmousetrap for more
' G" X5 p! T: S. L // complicated schedules.2 w. a# J- q m3 \5 o& L
4 [. u5 h! |+ W) j3 W( b; ?
modelSchedule = new ScheduleImpl (getZone (), 1); Y- @7 S9 x7 U: K
modelSchedule.at$createAction (0, modelActions);& z% r% x0 J' i4 K9 s" W# W
2 r7 v& b! X6 G, I return this;
6 Z. Y$ ?, b' h } |