HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) o; y0 ]8 R9 H4 a7 W& R) c# R- I) J* ^6 a
public Object buildActions () {' e! `! B, X& z4 ]+ M+ W6 @( `
super.buildActions();
# g% D5 P' q# [* y- ^6 ^ 6 w4 t9 V" O$ S* U) q9 {
// Create the list of simulation actions. We put these in6 @0 d v: H) W( q$ E1 d( d
// an action group, because we want these actions to be
. E( \$ ]0 I2 L% Z) a+ h // executed in a specific order, but these steps should! J6 h- H) P( u
// take no (simulated) time. The M(foo) means "The message5 S4 U& S3 W" E- y9 V Z/ s
// called <foo>". You can send a message To a particular8 T3 Z7 \9 m: E# ?* f; V
// object, or ForEach object in a collection.
+ ~" n; x* f, v& m6 j9 A! o 2 W3 m" R4 W2 p2 a* J; P: q
// Note we update the heatspace in two phases: first run
# B1 y7 f9 m! B0 e+ F- k+ r2 k! W // diffusion, then run "updateWorld" to actually enact the
3 b- a7 Z) ^' a% _ // changes the heatbugs have made. The ordering here is' G, Y% k; \0 U+ z; o
// significant!1 _6 q; g' l5 i, C5 b. i
/ H- N& D- Z, Y; v; c* M1 A
// Note also, that with the additional
* P2 S; I+ i2 l& p/ P // `randomizeHeatbugUpdateOrder' Boolean flag we can1 n$ g$ e6 f" J& j. L
// randomize the order in which the bugs actually run
# K6 @/ U9 l- ?4 c. J# S1 F // their step rule. This has the effect of removing any
9 Y* d m3 S3 b+ w2 w8 X // systematic bias in the iteration throught the heatbug
- H8 ?6 @! v B) i) Z% t) b/ C- \1 T // list from timestep to timestep- I% S9 i7 \( T
5 A7 A# m7 ]+ T // By default, all `createActionForEach' modelActions have. W5 [' v% t, J: k) M1 ?
// a default order of `Sequential', which means that the
4 F/ Q. m X7 z8 a% W1 @7 C // order of iteration through the `heatbugList' will be" q9 K. o+ [; ~$ k' H8 F
// identical (assuming the list order is not changed
: V2 X. R9 J8 o8 q$ [1 t. V0 F // indirectly by some other process).# Y0 _9 G$ n) g9 C R
`& I, p" i3 ^ modelActions = new ActionGroupImpl (getZone ());
8 n+ g$ P% A6 F: n) q! D' ~ F" f; V% Z
try {
) H, L: ]1 ~; w2 p modelActions.createActionTo$message
: y1 f7 N" I9 F$ D (heat, new Selector (heat.getClass (), "stepRule", false));8 A- }& ]( p- h
} catch (Exception e) {
- s8 p& s5 q T1 P: a( h System.err.println ("Exception stepRule: " + e.getMessage ());9 y; A3 U4 H) V* r1 D: A
}6 B' ]! Y6 k* ~. b" n4 ^
0 H, |! Y0 v) G- u- R try {
9 ~9 d1 @4 w/ B6 r, v8 S Heatbug proto = (Heatbug) heatbugList.get (0);3 c; W% F, R1 q& }
Selector sel =
$ o2 j/ D: `# r) H new Selector (proto.getClass (), "heatbugStep", false);: h" q# V) @0 g! Z* x( P; w+ _
actionForEach =8 F5 P& j0 J8 |7 b3 g/ \
modelActions.createFActionForEachHomogeneous$call
K- u) O1 g9 v' u1 i (heatbugList,
2 |; n0 I, e ]1 R( ], b+ H new FCallImpl (this, proto, sel," d. ?$ s3 n" d& `4 T/ o
new FArgumentsImpl (this, sel)));
# P: {5 Y) o3 U/ D& l9 F) j } catch (Exception e) {% m- V* r4 F4 ~) Y" y
e.printStackTrace (System.err);
3 h+ l! v- [3 ?) z1 t" [ }
5 d- b& h7 f; }$ r. R1 p c8 j ' P8 ?9 V, b) ~' Q; D8 W5 \9 d
syncUpdateOrder ();, c) G2 L* x% ~5 ^2 p
5 {2 p! g" u0 _4 p6 ]
try {
1 v: t# j- d/ C$ I' K$ G6 H/ s9 ~ modelActions.createActionTo$message
/ A" l- j* L# a (heat, new Selector (heat.getClass (), "updateLattice", false));9 O3 s7 Z: B$ i' G& K
} catch (Exception e) {! r8 x6 `5 p3 l
System.err.println("Exception updateLattice: " + e.getMessage ());
! P! P, r4 Z0 F9 z6 [9 E" Y2 }( f }
4 ~0 T. V3 j, O0 R* o- o . ~ u/ v, u. O( l& m+ o
// Then we create a schedule that executes the
) K1 P9 Y/ W# T& b4 Z% _ // modelActions. modelActions is an ActionGroup, by itself it, A. Q) L: U/ g% ?
// has no notion of time. In order to have it executed in9 h! @6 c( e" J4 e- M& s" F
// time, we create a Schedule that says to use the
' \* E3 }# g P, k1 Q // modelActions ActionGroup at particular times. This
: F' z$ e) l' N. ` // schedule has a repeat interval of 1, it will loop every
! N" i* y) \: l# `9 ?. k$ l // time step. The action is executed at time 0 relative to q2 ~6 I/ |- `7 O, Z- V
// the beginning of the loop.: s) i" B6 f! o0 ]( Y$ C% N6 A. m2 a
0 Z1 I2 g/ j- \( l1 @9 Y, L9 l // This is a simple schedule, with only one action that is& O- B; W- k4 j/ m5 u. m
// just repeated every time. See jmousetrap for more
/ ~7 o: U1 B8 A- {7 t- E3 z" ~& t // complicated schedules.
9 G7 [1 G2 c" ~! {" b
) l. M* K5 [# f. { modelSchedule = new ScheduleImpl (getZone (), 1);( j4 h7 K7 R7 x- `! W: }) c {7 V
modelSchedule.at$createAction (0, modelActions);& ~: |* C- \- [1 s x9 L x) E* A8 Z
9 g @$ P2 C4 C! {+ H
return this;3 ?. S' f* f; k5 s: ~) C
} |