HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; \) f. [ e0 R6 B" ]" {
% ]( K2 ?% D. q% X8 u
public Object buildActions () {9 T5 o' u) M' m& ~. v
super.buildActions();1 v) W1 b5 R# m
7 a& ~0 d+ I, l" p- [+ M' s- u
// Create the list of simulation actions. We put these in) R2 \6 }" Y& ^2 N9 F- |8 t
// an action group, because we want these actions to be
) `5 b4 ], o, ~- { // executed in a specific order, but these steps should* z8 }# ^" E x$ H h. A' b" d
// take no (simulated) time. The M(foo) means "The message1 z0 B; m( W, A* W- j
// called <foo>". You can send a message To a particular) r- }# P6 g# o
// object, or ForEach object in a collection.4 @' f U* q( K$ ~; b; H& j
5 U' o2 S3 J; |/ S+ w4 d
// Note we update the heatspace in two phases: first run
' b+ Q! ]$ A& S // diffusion, then run "updateWorld" to actually enact the1 [8 b" q) A3 T2 v: X
// changes the heatbugs have made. The ordering here is
' a! w9 u" s4 n7 l, \5 C // significant!! j( y1 {- O! q
6 k- Y2 S4 K, L; `4 J# f: L // Note also, that with the additional$ A% x* W3 b1 B
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 U! n! @0 ^: A' T
// randomize the order in which the bugs actually run
5 n* R; \1 t8 f: Y // their step rule. This has the effect of removing any: K! g( k7 a! K( E8 Q, ?
// systematic bias in the iteration throught the heatbug
7 i' k# j5 S. S. K8 V& {" W6 |1 M // list from timestep to timestep
7 P* m+ m$ b% y7 @) | 7 m& v m2 @! Q( Q6 `
// By default, all `createActionForEach' modelActions have' F8 |+ e( n. x4 h; V1 y, e
// a default order of `Sequential', which means that the
0 f% B3 P& u) \ // order of iteration through the `heatbugList' will be9 Y* V1 Q8 L ~0 W& i" R5 [
// identical (assuming the list order is not changed" d& @& L$ V5 c* i/ J
// indirectly by some other process).
$ t Z W- `& [0 r
* M( \% y1 f4 R modelActions = new ActionGroupImpl (getZone ());
& ^6 q$ C0 ] h/ P8 l5 ?( H4 c! a7 @+ z; R/ P
try {1 t' V- w. R5 p
modelActions.createActionTo$message# x, g2 E$ i( w! K3 ^
(heat, new Selector (heat.getClass (), "stepRule", false));0 c+ p. A. T3 C6 o7 {
} catch (Exception e) {
" |3 P3 g2 L9 K System.err.println ("Exception stepRule: " + e.getMessage ());6 p5 \8 X& v# o; j& L2 A! h
}/ g2 l x# x; ?! E; r- o
* h* z. \( F# ^2 ^ try {# i: Q D6 I! I
Heatbug proto = (Heatbug) heatbugList.get (0);
3 g+ F) Z) G# O7 ]9 w9 V6 k% q/ d$ \ Selector sel = ! o7 n/ g2 Z. v% J1 w2 Y
new Selector (proto.getClass (), "heatbugStep", false); I' @( p* [1 B
actionForEach =/ O5 S. U3 W t. R" N' j( C( D
modelActions.createFActionForEachHomogeneous$call3 d- O% z: @# i$ J1 A
(heatbugList,
* V' C1 {" r k new FCallImpl (this, proto, sel,
* A0 @. }% B, H, v7 F2 ]- B new FArgumentsImpl (this, sel)));. c4 A6 D8 b8 h# G2 L% a8 ~9 n, ]. Q
} catch (Exception e) {
& y0 {3 Y6 @5 J! S! V$ p/ E e.printStackTrace (System.err);
u P+ x" _. p* E( O }$ {" E' r) b, Q1 a) ]" w
, T4 k, @& ?" g syncUpdateOrder ();' k4 B) I; a4 Q/ \+ _! k5 ~
o7 i: D: [: T0 G/ ]# i( u6 I
try {2 A/ D" R( _6 T! Y: e. Z& }( `
modelActions.createActionTo$message 9 ?5 V0 \1 b3 V) P" R8 p
(heat, new Selector (heat.getClass (), "updateLattice", false));! Y( v; Y4 H0 B, F
} catch (Exception e) {
; `+ p+ D. q9 [2 N: ^& ` System.err.println("Exception updateLattice: " + e.getMessage ());
7 S1 `2 G8 [$ n( p+ \! k }
) |& [- M& Z$ W3 K
. P8 M/ u u3 t% R1 ^, Q+ {4 Y // Then we create a schedule that executes the
5 G3 n+ E/ B) N2 l) @; q( L // modelActions. modelActions is an ActionGroup, by itself it
# p% [( K" }/ ]! U7 L( G // has no notion of time. In order to have it executed in( y& @: q2 Y; G" s* v+ a
// time, we create a Schedule that says to use the
+ N( c! Y4 q1 ?; l; R) w // modelActions ActionGroup at particular times. This" v! G# l! ], z& V0 X/ E" }/ h ^+ b* J
// schedule has a repeat interval of 1, it will loop every
, g9 q* [ y) L3 Y+ a // time step. The action is executed at time 0 relative to# R6 {8 x& e, X9 [1 D4 `: k
// the beginning of the loop.& n; [1 J) c. G$ Z1 ]# j
) I9 r Z- B3 M/ f7 ]2 C1 U2 _6 X
// This is a simple schedule, with only one action that is
% R6 x) o5 P1 t, n. S6 } // just repeated every time. See jmousetrap for more
[# j& i' x" o! E; v: B // complicated schedules.$ Q! A, s1 f5 V6 `/ M
) `: _" ?5 W+ k: b
modelSchedule = new ScheduleImpl (getZone (), 1);' c) D7 i) u# k! U4 ~2 b) s
modelSchedule.at$createAction (0, modelActions);; o5 f' x0 U8 i8 j4 z
* `. v" l. b, }2 e; e' ?) w
return this;+ e9 t7 N6 M% W- j0 n
} |