HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; x) d. c# b; O. `/ h
2 h5 C9 }% B( u8 e2 J& U7 ` O. I
public Object buildActions () {7 w9 i& B4 } F/ K: M! \
super.buildActions();
5 [8 A9 j1 C4 j) {1 ~# l2 l/ l! N z
/ |1 b# ^, r/ I: ?( c* T // Create the list of simulation actions. We put these in" \3 ] I" H; D2 u$ u, v
// an action group, because we want these actions to be% x$ p) v7 S- o# H+ A1 K; }: A3 m
// executed in a specific order, but these steps should
( C( j0 y" N1 H) l2 t# g$ A, P // take no (simulated) time. The M(foo) means "The message+ I: `2 w9 n5 W2 L4 ]+ Z1 `" ?& [
// called <foo>". You can send a message To a particular' k+ g L1 r! F7 [# A
// object, or ForEach object in a collection.
; j' M0 I) H( W; U3 P1 X 1 i, S. v, b5 \/ d* P& |
// Note we update the heatspace in two phases: first run
) x) A9 ~8 w( s* Z9 R% m$ k- p$ \# G // diffusion, then run "updateWorld" to actually enact the, n& D2 W- d2 j2 x' ]/ C3 S' u
// changes the heatbugs have made. The ordering here is$ w9 O% _$ S6 @
// significant!
3 W% F( w* M4 h- ], X- u9 I ) a0 P( j; A9 T8 r
// Note also, that with the additional1 h+ B; f, f: @2 z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; v! y5 N; u. I. N1 X // randomize the order in which the bugs actually run
- l/ m0 ^/ V4 H5 [, H$ W3 C' w // their step rule. This has the effect of removing any
1 s1 {) \9 A8 A: ]& o6 E // systematic bias in the iteration throught the heatbug
& S* m/ t$ a" A0 u* [4 ~8 s: P // list from timestep to timestep$ |: g7 [8 r2 b/ }2 I* W1 p' {7 r
" n E' u$ S* w& R5 } // By default, all `createActionForEach' modelActions have
4 ~) o. @% x' f! ]% _% l6 j5 T) ? // a default order of `Sequential', which means that the8 _2 s0 o7 J6 [; K
// order of iteration through the `heatbugList' will be
1 n9 x+ M' j" l7 k! y // identical (assuming the list order is not changed
1 a8 C% D! f( c; f // indirectly by some other process).: H8 N& a- o/ _7 ]% b/ r
4 l% ]- @! {* J p/ v" U% j8 f modelActions = new ActionGroupImpl (getZone ());( j- y$ T+ _5 N. k: _' L
+ x7 e8 I5 @% ]4 }2 H( P/ H try {. Y/ s. n: b$ v& t: v. Z
modelActions.createActionTo$message
& R( ]8 ], _2 C; e1 ~ (heat, new Selector (heat.getClass (), "stepRule", false));" L7 n# E6 W- I, Q7 N' d
} catch (Exception e) {% y. Q* a$ m6 c/ D; C
System.err.println ("Exception stepRule: " + e.getMessage ());
+ o$ m+ w/ {: t6 `. M }
- w( Y# F$ Q3 H8 B3 p- ?4 P5 h8 d# i/ u( _
try {
( A# F& @& K1 t: O# [& y Heatbug proto = (Heatbug) heatbugList.get (0);
' ^8 ^* f( C$ t: D Selector sel = - F0 C. Z0 m( h- A: B/ s1 s
new Selector (proto.getClass (), "heatbugStep", false);
$ g! H6 B( O# I _1 l5 L; G actionForEach =5 \ T0 Q' S8 x+ t" o
modelActions.createFActionForEachHomogeneous$call
) ~9 L) p4 T3 o7 v (heatbugList,1 X0 B4 s, o) N7 N. Q8 Y) H" S, }
new FCallImpl (this, proto, sel,* @# U4 r# F7 {) U% P
new FArgumentsImpl (this, sel)));6 c8 B" m! }9 A* k* a* w9 W" H
} catch (Exception e) {
6 V# V3 Z* A( v: v" w% u2 F3 v* I e.printStackTrace (System.err);4 J6 {: q# r" T" A4 G2 g
}1 k3 a, a" A$ q0 K2 j4 b+ n. d
4 R4 H _5 [% `( ~" o) x. ] syncUpdateOrder ();, _& T6 ^$ a% a5 J* T+ X g" G
+ X2 o; R7 D/ G* g, d) e0 r try { R/ j2 |7 u4 R Q Y9 v3 Y
modelActions.createActionTo$message
9 k" K3 W8 {+ D" F (heat, new Selector (heat.getClass (), "updateLattice", false));
/ P: [# [% N6 K4 J1 ` } catch (Exception e) {# E4 A8 I3 e1 m4 h5 E" l2 I
System.err.println("Exception updateLattice: " + e.getMessage ());5 I5 v, b, j9 d* o& C7 T5 Z* O3 s# O
}
! q% l4 q. t0 b* b' V5 L
0 ]2 q& X h& f# H1 i+ }/ r2 P* s // Then we create a schedule that executes the
5 w7 H$ t% R! p) N* x // modelActions. modelActions is an ActionGroup, by itself it
3 ~1 Y0 [# B( R9 u7 B. m // has no notion of time. In order to have it executed in
* }0 O1 {) m( x6 i" h' m // time, we create a Schedule that says to use the
# c" n" p1 V, ?3 c ]% O- f& V- L: x // modelActions ActionGroup at particular times. This
) v8 G3 j: D: n5 O0 x8 V3 X // schedule has a repeat interval of 1, it will loop every9 M4 c2 p1 h$ _5 d9 F2 ], l5 B6 |5 z
// time step. The action is executed at time 0 relative to0 S0 m0 D6 k9 V' \$ F3 \
// the beginning of the loop.
9 z) a$ h3 P( B3 A0 E# z% h5 R p5 c3 S0 a3 g q) O: F9 `. X
// This is a simple schedule, with only one action that is
6 x/ R! [! W, n# q // just repeated every time. See jmousetrap for more
, q# P9 B6 U1 t1 h; N // complicated schedules.
- c) e7 O; O1 J $ V w1 y5 t4 d! O% u. t' [3 b! O; I5 @
modelSchedule = new ScheduleImpl (getZone (), 1);
9 I8 e2 k1 c/ W modelSchedule.at$createAction (0, modelActions);
6 ^* _( P3 }( J9 s0 y1 _( t" S
: [$ D" s0 P T% h return this;( e0 s& x) M4 h* H6 y, O/ w
} |