HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
V: B' Z" t' L* D$ p2 G M8 |9 g2 S- d
public Object buildActions () {# Z, V6 t+ a, D7 V M9 u' ~
super.buildActions();
$ p. R6 K( Z1 P" ]" Z 5 }! g5 W6 {6 d7 K) n/ P. `
// Create the list of simulation actions. We put these in
0 x8 I4 j4 f. C5 v+ p9 ^ // an action group, because we want these actions to be
5 ^9 h+ B* B3 l" J // executed in a specific order, but these steps should
" z( @, B5 r1 y4 g2 d" M. S Q // take no (simulated) time. The M(foo) means "The message
) m) V/ N! Q( O% b, J // called <foo>". You can send a message To a particular" A8 o: F5 [6 ? L
// object, or ForEach object in a collection.$ A \ z4 g2 [: g* k
- y3 G4 b1 ]8 s# H2 P // Note we update the heatspace in two phases: first run
- i4 T+ D+ S( P6 t! H- _ r4 | // diffusion, then run "updateWorld" to actually enact the
- s, h7 A* u2 X! b6 | // changes the heatbugs have made. The ordering here is
' J8 `& a3 B* I9 [( u // significant!
# S! j9 ?" X0 I+ x' i ' |9 L! c+ G5 |, x% D
// Note also, that with the additional$ i( K+ ~% X" ?# A& J3 Y# u2 h
// `randomizeHeatbugUpdateOrder' Boolean flag we can" S. E0 b9 ?7 K7 g1 V& z
// randomize the order in which the bugs actually run; W( G% j8 i' X) I9 L
// their step rule. This has the effect of removing any( M- x+ c3 X8 w9 l' s
// systematic bias in the iteration throught the heatbug
1 @8 n% z9 s" _& [5 k" B // list from timestep to timestep
9 c3 {, g9 f. r! ^5 S: Y f; v& m ' g# {3 D7 H J( H9 z
// By default, all `createActionForEach' modelActions have, M1 _- V N: Z9 t
// a default order of `Sequential', which means that the: B1 A, X. U0 H' {: \ d/ C
// order of iteration through the `heatbugList' will be/ [# l3 j* t) A6 K
// identical (assuming the list order is not changed: l8 d' @+ l5 p9 \4 B8 n
// indirectly by some other process).
' y. ?9 D1 K9 k ~' o8 Q
! T0 |) l- B7 a3 k+ v modelActions = new ActionGroupImpl (getZone ());
+ z" c. D5 a: ]1 Q" s; m! j" r& u0 j
try {! z' O4 C3 s3 {/ B0 n( j' I
modelActions.createActionTo$message
" D$ Q1 R$ q* R9 V. L" o (heat, new Selector (heat.getClass (), "stepRule", false));2 W! I7 a0 ?: u5 i" H
} catch (Exception e) {! Q- H0 p, j2 W( z5 H3 y1 Y3 X& o
System.err.println ("Exception stepRule: " + e.getMessage ());% R8 i8 ~7 n7 h9 I
}6 B* d7 ?# b3 [ m$ p
: h/ `! e: O% g- h try {2 y2 {/ |( _2 k9 Y, L
Heatbug proto = (Heatbug) heatbugList.get (0);
7 a1 d% O: g$ q- F# `. N' ?' R Selector sel = 8 X0 k% _( T) b
new Selector (proto.getClass (), "heatbugStep", false);; ^0 J! A6 z4 T6 ]3 l, ~% N
actionForEach =1 y9 k1 J1 [$ h4 v
modelActions.createFActionForEachHomogeneous$call
* r4 F5 p R: a* D* j) f (heatbugList,3 _% Z: n+ o0 x9 }/ i6 j" ^
new FCallImpl (this, proto, sel,
) H2 q9 p" b" E* Y9 y1 g new FArgumentsImpl (this, sel)));( W# l6 e# f/ ?& O' `9 J- i
} catch (Exception e) {4 X4 T1 j( ^. }+ r; ~% y$ T4 s/ F, _
e.printStackTrace (System.err);
4 @! @; b9 d2 M( U" G, l, p }
# Q; }$ B' g4 r! x) C: ^% h
( j" T4 }# }4 I9 C9 G( z syncUpdateOrder ();( o: Y% b2 f- |/ J. ^# I
# C+ V/ k- a. ]. E1 } try {
6 v5 r2 v3 M ~' x# i! L modelActions.createActionTo$message % P ~/ Y Q: S
(heat, new Selector (heat.getClass (), "updateLattice", false));) S) m+ w$ j3 s
} catch (Exception e) {5 t6 E0 W e0 m# c
System.err.println("Exception updateLattice: " + e.getMessage ());
4 L8 |1 ~, y( W4 { }- V( N' B6 @+ N+ f; l& Z5 E1 x9 v9 }6 ?" [
3 I$ {% H+ V8 [$ v- l) W3 o) {
// Then we create a schedule that executes the
/ ?. M2 O: J. C+ ~ // modelActions. modelActions is an ActionGroup, by itself it" y2 G2 B1 w" G4 {
// has no notion of time. In order to have it executed in" h# F" i; l8 b: i. q
// time, we create a Schedule that says to use the
& T$ p( T+ t. C2 _* R // modelActions ActionGroup at particular times. This
( q m6 {. P- u6 I) L // schedule has a repeat interval of 1, it will loop every
* N3 b7 b# K O9 [/ c6 ` ` // time step. The action is executed at time 0 relative to
) Y* W5 d M3 x, O // the beginning of the loop.
1 k# K0 W! a6 v8 o8 h" l# g0 Z: E6 @$ l1 c
// This is a simple schedule, with only one action that is
5 q/ O/ x ?- Q0 _+ A // just repeated every time. See jmousetrap for more
! [6 {& R5 z2 ? // complicated schedules., ~1 X; G" w( }' d+ R' A( r: e
# {4 O7 M% B! K: t8 W+ r2 f
modelSchedule = new ScheduleImpl (getZone (), 1);
$ I- z: X i- s ~: Q- D modelSchedule.at$createAction (0, modelActions);3 E# m* b6 _1 v( X. J$ L6 M
. D/ x; Y$ K" a$ K return this;' p2 _* y; Q& W" l0 n
} |