HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ F( M) {5 _ n# L6 B4 U( g0 H
3 j. z$ v8 R- t# b N. B public Object buildActions () {0 a) J, _2 f7 F' Y
super.buildActions();
, N+ ]0 ^0 w: ] 8 R! ]: L: O# `% P( J. w
// Create the list of simulation actions. We put these in, S$ q6 k' q! W5 A; x
// an action group, because we want these actions to be$ N7 P! n1 G* y# G/ S" W
// executed in a specific order, but these steps should
4 g6 s( X/ c, K) Q `7 y // take no (simulated) time. The M(foo) means "The message4 O. u/ c }, K8 I- r
// called <foo>". You can send a message To a particular! B9 [! G$ }' ~" m' @2 d4 N( R6 Y
// object, or ForEach object in a collection.3 e+ ?, |! V- s+ d
) i8 w! [* g$ }$ U4 K8 [8 d // Note we update the heatspace in two phases: first run& ^6 b7 o7 ^5 }4 {; `( O
// diffusion, then run "updateWorld" to actually enact the
' L- q7 k f# w- `# \" D // changes the heatbugs have made. The ordering here is$ G+ [; t9 I9 q% z( ~. r
// significant!7 M- m3 Y& X, H7 {
+ z. h+ W+ S) g6 `0 d7 a // Note also, that with the additional
1 t, R) Z; s% j9 b( V8 [2 c3 K* {$ F // `randomizeHeatbugUpdateOrder' Boolean flag we can
# @, h4 ^( O0 L; x // randomize the order in which the bugs actually run) p1 b* c3 P# b8 o, G- ?9 k, O+ ` y7 H
// their step rule. This has the effect of removing any- I: w! @) M9 a, U+ q1 Y, H
// systematic bias in the iteration throught the heatbug
8 q& C; K0 O* i7 d. K, r // list from timestep to timestep) ~/ V6 Y! L3 d7 y w: P
3 R' O8 S" X3 H4 H6 \ // By default, all `createActionForEach' modelActions have: L' I+ _8 |. W& G N* N5 v
// a default order of `Sequential', which means that the/ H- Y; r0 a0 V; @+ Q' k, k
// order of iteration through the `heatbugList' will be
/ C) x/ u; p5 g9 l' x5 i // identical (assuming the list order is not changed
' Y( J3 B8 n* ?9 S9 F7 W% X // indirectly by some other process).# [! A, l# o5 d( I Z+ j
! l/ L5 B8 W; U6 t5 a9 j& p+ w9 ~3 t
modelActions = new ActionGroupImpl (getZone ());* Q' s1 i' m( I8 U8 e h d
0 z0 |: u, `8 }- v6 _0 z& h0 v
try {# |( y1 t. ~6 W1 t% o
modelActions.createActionTo$message( Z# D. ]! z( ]& p3 O' Q1 H% G
(heat, new Selector (heat.getClass (), "stepRule", false));" E0 _! i0 M# N- ]
} catch (Exception e) {
, K; E% _, }* t/ c$ { System.err.println ("Exception stepRule: " + e.getMessage ());
( c. Z6 Q/ [# G, }5 ?0 P- G8 | }
9 R, F4 K7 g* K1 {; G9 H4 ]
: m K( C' W9 }) k G3 C try {) v2 ?) J! {8 z$ s- s, }6 [
Heatbug proto = (Heatbug) heatbugList.get (0);
# J. v! M( D7 ?# B: Z Selector sel =
; J, h/ j0 ~, |7 |7 m new Selector (proto.getClass (), "heatbugStep", false);
4 h; G- D/ B' U! M' Z% d8 ~ actionForEach =; I4 E' { m1 z3 B- r
modelActions.createFActionForEachHomogeneous$call
* R$ e. b9 d! T5 ? (heatbugList,
1 _" }$ U4 x+ }6 T/ N new FCallImpl (this, proto, sel,
3 N5 C, y; g( |1 y0 Y9 i new FArgumentsImpl (this, sel)));) S& v, T' t* y1 O" J; A. E
} catch (Exception e) {
( O2 M9 L# `2 } e.printStackTrace (System.err);
# N. a$ t% l( R1 b4 I4 r) q }5 @) H9 }1 E* G( w" k! {
3 e, b! n9 R- P T
syncUpdateOrder ();0 `4 E4 K% H5 I) U7 e$ s" V
5 |- i: |% B9 P7 G: E try {. y$ ^5 t' Q- g
modelActions.createActionTo$message
+ Z+ l* I6 h3 O4 @ (heat, new Selector (heat.getClass (), "updateLattice", false));; Q1 I$ |' |$ M X M
} catch (Exception e) {
/ t) z+ k8 ]+ V7 g& M6 W, F! p System.err.println("Exception updateLattice: " + e.getMessage ());: Y1 W' q( C+ z
}
% i; X# m! B% z: }6 o$ I - m) @5 @6 P; Q g
// Then we create a schedule that executes the+ { i; e4 {: E4 Z# i- B1 {
// modelActions. modelActions is an ActionGroup, by itself it
8 X& }% S* e' [; f# d _( I // has no notion of time. In order to have it executed in4 _0 G# Z: M6 e% C. a' h
// time, we create a Schedule that says to use the5 c9 f5 z4 n7 n0 B. x @
// modelActions ActionGroup at particular times. This
M$ \$ o+ j0 n0 g+ i. ^- f+ C0 O) @ // schedule has a repeat interval of 1, it will loop every
- }& {' B2 N1 e9 p' u% |. ?4 L+ {2 y // time step. The action is executed at time 0 relative to
# w) \# y. w; K( d5 l+ n // the beginning of the loop.: o1 c; u7 l' W6 T" n
7 ^7 a) T4 {+ E1 X
// This is a simple schedule, with only one action that is
, q# l+ m& Q* W. [ // just repeated every time. See jmousetrap for more/ e( c" h# M! M1 @( m4 K
// complicated schedules.! E) B& s @. n/ v, M
- [! n! y) P) |* k
modelSchedule = new ScheduleImpl (getZone (), 1);) U( a7 h: o# q1 w% E
modelSchedule.at$createAction (0, modelActions);) A& ^% \2 k( m: T9 }) c1 T
7 r7 y3 O! K& i f return this;: a( u; B& Z% x0 g/ C( W* i; L8 Z
} |