HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* N, ], q: M* V0 ^, n5 ~2 @- z O; t
public Object buildActions () {
2 M5 i1 B) f2 t; B- @ super.buildActions();
' x$ w8 s) _- u* m- k . e9 H; y ]; H5 z+ t7 d
// Create the list of simulation actions. We put these in
/ L- a1 |, k; b1 ] // an action group, because we want these actions to be
6 v8 m* T- m& ]1 @ // executed in a specific order, but these steps should7 t, |1 v ^& l5 b3 T O U
// take no (simulated) time. The M(foo) means "The message
) e: K2 _2 p& y // called <foo>". You can send a message To a particular' I! y* C' Y! ?8 N2 N
// object, or ForEach object in a collection.
# g2 M8 u5 a9 I: m0 o, Y
: j& d- C: f, ~1 P' k2 ~9 q // Note we update the heatspace in two phases: first run
/ o0 t3 Q2 m( z+ \ // diffusion, then run "updateWorld" to actually enact the
- b2 i$ u! p8 ~ // changes the heatbugs have made. The ordering here is4 k3 I8 o1 ? j& b3 V4 |, Q
// significant!3 b* o3 t/ G' ]$ V t: H, \
0 J( K* b( z+ w. A( ] // Note also, that with the additional
! D4 d1 H, t6 h' Y+ [) d3 z // `randomizeHeatbugUpdateOrder' Boolean flag we can
! B( x% c. m/ p- w8 J5 v // randomize the order in which the bugs actually run
: H+ R2 p* a o5 y' C // their step rule. This has the effect of removing any* D$ L% ^7 S# w/ x+ |6 R
// systematic bias in the iteration throught the heatbug
& m/ {7 r3 c9 @" {. F/ { // list from timestep to timestep( g" h' T: O* v" Y1 y/ \
( }0 b ?; ~* n. J // By default, all `createActionForEach' modelActions have
3 \& K5 Q! O& D // a default order of `Sequential', which means that the8 x5 R5 o7 G: C- A/ A/ C
// order of iteration through the `heatbugList' will be
0 k6 \( p& l2 S/ A& _2 e# m( J // identical (assuming the list order is not changed
1 q& G% x6 K8 K8 ?1 }" B6 b) \ // indirectly by some other process).5 G& S" R2 S2 b C
8 K0 o" }/ `9 Z: d' }& g
modelActions = new ActionGroupImpl (getZone ());
0 V6 ]3 O5 o: O. [4 S" N7 E& f& u$ r5 ] T" \
try {
/ i3 Y, e9 q! W" q" w modelActions.createActionTo$message/ V& }! |( p: `- [* q. z: k/ R
(heat, new Selector (heat.getClass (), "stepRule", false));8 A+ X0 L1 u% N+ p4 b: e
} catch (Exception e) {
5 z) C5 g2 |0 {' g/ b2 t8 ?1 R System.err.println ("Exception stepRule: " + e.getMessage ());
! k) {3 O v; H/ D8 ] }, l; W+ P. T" c; e) }3 S- ?" q
' y8 _' L, g4 |
try {
( R* T3 d y# F2 N Heatbug proto = (Heatbug) heatbugList.get (0);# ]9 P7 X7 m* f' p4 E. G0 z
Selector sel =
, k! q% J5 w0 z( a1 W7 i new Selector (proto.getClass (), "heatbugStep", false);8 ]4 w9 |/ n2 L; ]
actionForEach =
) Q! X. |7 X5 z modelActions.createFActionForEachHomogeneous$call; r1 |# ]1 e# [: _# F& j4 V) l
(heatbugList,( S4 w3 Y* n* ]
new FCallImpl (this, proto, sel,
1 K& {; m) i) g8 [- }6 Z: t3 S# G: R new FArgumentsImpl (this, sel)));
( Y. a) a; k; J } catch (Exception e) {1 T3 J' o" b; C: N! H, x% E+ K4 l
e.printStackTrace (System.err);6 b0 T; I& C) y' O
}6 U7 M% R: J. w8 C1 m- T
1 {1 I; O1 u& _7 x4 q/ m! d5 ~ s
syncUpdateOrder ();
1 t9 M0 \# O4 _4 P, T! ]# f4 p
$ ?/ C: ?+ L" k' V. J" k try {, w$ `$ u+ `* `8 X: j
modelActions.createActionTo$message ( ]; c1 E" z# ~; d; c. w& C
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 `$ z: Q2 P2 v0 q } catch (Exception e) {
7 g8 H0 T4 ~- @0 d5 I System.err.println("Exception updateLattice: " + e.getMessage ());/ ~5 y' e5 F4 y% u& n) K5 c; R2 Z
}# y& j: O1 j! T
8 L( ?( H( A `# C5 Y- A1 M8 ^, C
// Then we create a schedule that executes the
+ g" `0 N, u w5 a! e2 l // modelActions. modelActions is an ActionGroup, by itself it
7 Y7 s: U* ~ Y9 _; B! U // has no notion of time. In order to have it executed in* O* Y; C v& Y2 o# }
// time, we create a Schedule that says to use the! ?2 p/ ?& h1 [/ @2 S
// modelActions ActionGroup at particular times. This
, ^- H4 ]: g' p4 R0 n0 Y: O5 A // schedule has a repeat interval of 1, it will loop every
/ d9 m' |- W$ K // time step. The action is executed at time 0 relative to
, q- V! y t1 |7 \2 v // the beginning of the loop.
/ B- v; e7 b. C+ K; C" Y# r9 c2 I( r
' E& D- B% Q( D) \) I // This is a simple schedule, with only one action that is
|/ I" K" W0 U- G; d+ Q$ s& ]- Q // just repeated every time. See jmousetrap for more2 P! |. _# O$ B! U' m9 n
// complicated schedules.: p9 ]: |; q. x( T) }& [8 _
/ T0 N! I7 e9 ~) k: u modelSchedule = new ScheduleImpl (getZone (), 1);) Z3 i! V' {. Z: T8 l. e
modelSchedule.at$createAction (0, modelActions);
& ^ V# j- ^1 u, k) o! t 2 W7 M; `1 @' p+ { k
return this;
r) I4 R" L% \- S2 y6 D3 | } |