HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- j8 {$ p1 k. S+ g
+ v. Y/ M5 s2 q4 Q public Object buildActions () {6 T) q' t. s: g* G! [) Y
super.buildActions();
u! y( ]1 O! h0 Q# I 8 A) n) P$ t2 p! V$ e0 L3 F( b
// Create the list of simulation actions. We put these in5 n1 F, y. o' A0 J- P0 g7 @/ H
// an action group, because we want these actions to be
% _% E2 d9 ?3 g$ n( I( p% B1 o // executed in a specific order, but these steps should
1 `- [2 [- T- Q* D3 l# z2 [( y // take no (simulated) time. The M(foo) means "The message' Y2 Q7 P' I* K4 F$ C# D* B
// called <foo>". You can send a message To a particular: D2 c- {7 T' h! ^
// object, or ForEach object in a collection.7 D8 y! C3 e0 _* Q
5 O: g* I# F$ R6 `& e% w // Note we update the heatspace in two phases: first run
Y/ }- `1 V$ T# @ // diffusion, then run "updateWorld" to actually enact the
# j6 H2 b/ {9 a // changes the heatbugs have made. The ordering here is
5 u e5 j# }& Y2 y# u L# G$ g // significant!8 m9 t `$ ]4 B* v1 `5 d" V
) O* u3 ]; r/ Y! |& ^ // Note also, that with the additional7 U3 l- B4 d9 O5 ?, y
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 z6 P5 V# X% {0 e' S
// randomize the order in which the bugs actually run; R1 `, h$ A3 `0 h# K' O! }8 _
// their step rule. This has the effect of removing any
# P8 D. g. R5 p8 q& |( M/ n // systematic bias in the iteration throught the heatbug7 v3 K* j3 }+ t
// list from timestep to timestep6 Z2 t) T' E6 J
$ C' v# e+ B8 s8 }9 s2 v* }$ d. I( L
// By default, all `createActionForEach' modelActions have9 i2 `+ k2 P1 R6 k7 h
// a default order of `Sequential', which means that the2 w$ z) q" h. w5 G" r1 T
// order of iteration through the `heatbugList' will be" Z' ?6 k2 q6 T& u
// identical (assuming the list order is not changed$ G- C& R7 m- `% F. |9 T
// indirectly by some other process).
, ]# H: @% E8 U4 C4 S9 T
" H% \2 B7 U2 C$ |8 `. Z, {, @ modelActions = new ActionGroupImpl (getZone ());) N' B" G$ H @3 F9 i
! w) ~7 |" |* E2 X2 D- G# S try {
: K! B( Q/ G8 C modelActions.createActionTo$message4 ^* O: `* N. n3 h
(heat, new Selector (heat.getClass (), "stepRule", false));* n) ^7 h- ~7 H3 O( J
} catch (Exception e) {3 E7 m* L* ^8 z: e, m4 d
System.err.println ("Exception stepRule: " + e.getMessage ());
# L+ U: W8 e6 M% R }
. O6 U2 N3 [1 y- J" F- v. V( B
0 A- @4 c6 B# [; X6 {! n6 z- ^ try {
9 m0 O0 K9 w5 b4 |7 P1 ?* S Heatbug proto = (Heatbug) heatbugList.get (0);4 \, M8 [3 v! ~5 m7 y ~
Selector sel =
5 l* n/ x1 D L1 } new Selector (proto.getClass (), "heatbugStep", false);, C- U( l: u& R; v
actionForEach =
1 S( w% J! A! h' D8 ~2 [6 H$ a modelActions.createFActionForEachHomogeneous$call7 {1 f( t T5 o4 @) h- L; \2 d
(heatbugList,
. c* A% q! {+ M new FCallImpl (this, proto, sel,4 ? c- I8 q; G# p. N
new FArgumentsImpl (this, sel)));
3 }8 ?& p5 A' T( l5 \ } catch (Exception e) {
0 \- t9 \; b3 ?' R e.printStackTrace (System.err);
. g( t! i7 B; j2 H8 Q& R }
, s% m) S6 `4 c- j! D4 q* _1 Y & K7 z- T0 @6 y# X: ^$ C
syncUpdateOrder ();* }0 c: Q6 G7 S5 v
9 e& d* f& \* } try {
1 k) |9 k/ G1 o6 y9 n modelActions.createActionTo$message
% {; S( D g/ t (heat, new Selector (heat.getClass (), "updateLattice", false));
5 M: _+ K5 i" e/ x" N } catch (Exception e) {
4 G( Z' h% n/ `+ @ System.err.println("Exception updateLattice: " + e.getMessage ());
5 S( T& m( B! K# x) y; k/ | f, x. O( X }
: y& l$ B* S2 z1 e+ ~: ]- ~) S ( V: D; u/ u/ `) l a
// Then we create a schedule that executes the$ N5 K$ m9 H; j& @
// modelActions. modelActions is an ActionGroup, by itself it: e8 K- K+ X) n; w5 t K' M5 t
// has no notion of time. In order to have it executed in7 O# e4 e8 ~$ Z( F+ j$ t4 x
// time, we create a Schedule that says to use the
) c9 G- p q. S4 X; g // modelActions ActionGroup at particular times. This
/ R1 W5 u. e- ~/ A // schedule has a repeat interval of 1, it will loop every6 r, G6 u, h9 a6 Z
// time step. The action is executed at time 0 relative to
% _- o& O, c# z // the beginning of the loop. ~( U) L) |; D& J ]. D- T4 q
) W- I9 q4 L" {
// This is a simple schedule, with only one action that is0 E* L. I. a% b* a( j8 F V
// just repeated every time. See jmousetrap for more
. t+ X) j; s X) h" M/ {* \ // complicated schedules.
8 t! W# P g- w6 S' f. r 9 d2 q" |! Y" e9 R" ?4 w4 Y
modelSchedule = new ScheduleImpl (getZone (), 1); x0 c: t/ n# E, ^+ L
modelSchedule.at$createAction (0, modelActions);) v. ?, W- O. `
W. P. z1 e! S* p
return this;
6 @- T. e* q) \1 ^ } |