HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ i& S0 V9 g/ v# G+ d
1 `1 b/ d" B% B! r& G% a* a public Object buildActions () {
3 @ B- E, U* p- x+ _3 W# Q/ G super.buildActions();* X' p; ?& G9 [2 N
0 w: M# A( z0 `1 U! ], a
// Create the list of simulation actions. We put these in
" i5 i" z$ J2 u5 a7 k // an action group, because we want these actions to be
' k' ^8 r3 ~! f$ W // executed in a specific order, but these steps should6 t# O& ?+ _4 K! m: E* ^
// take no (simulated) time. The M(foo) means "The message
" @. o1 ]- B! I7 c6 j // called <foo>". You can send a message To a particular6 L8 V X; N* B" V+ _7 n# o
// object, or ForEach object in a collection.
- ?- n, C% r* U5 \# f- ^4 L " ]$ x4 z; z" @% |; r
// Note we update the heatspace in two phases: first run Q' p1 a; D; ` {
// diffusion, then run "updateWorld" to actually enact the
4 J) l& l! l% \; F( w% l // changes the heatbugs have made. The ordering here is
( E* B' K, \9 ?9 T7 z8 p // significant!5 T- m7 @7 W) X! i( j" W
+ A* A0 ~. U# }4 y# @ h% ? // Note also, that with the additional0 Y* `4 V" [2 v, Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% t7 f6 I' Y$ j2 e. V) c& y2 ? // randomize the order in which the bugs actually run- P- @9 I4 O1 G0 C% t4 r
// their step rule. This has the effect of removing any- p- v: y, F- G7 A! V
// systematic bias in the iteration throught the heatbug
* Z. r& X; Y7 H1 |% ^ l4 ]+ @ // list from timestep to timestep* {6 j8 f( n$ q% q, T' h3 \& [
0 ^ Z+ _- g( l+ g
// By default, all `createActionForEach' modelActions have
/ o) N' |: L! Q // a default order of `Sequential', which means that the/ V2 Y/ b/ m2 g: H- d: Y
// order of iteration through the `heatbugList' will be
" Q1 K, V2 J7 ~ // identical (assuming the list order is not changed) m- R0 t& ?$ n" g$ A
// indirectly by some other process).
* }2 A( H7 ^) k% F) H) J7 e 8 ^9 S* N! Z0 s; d- |
modelActions = new ActionGroupImpl (getZone ());
# Z, y3 d. B m l& d% c# m
1 K! g6 x4 J S3 L* W try {+ |! N! s2 q7 Y! v
modelActions.createActionTo$message4 O6 |- s& U8 j) D
(heat, new Selector (heat.getClass (), "stepRule", false));
4 v8 g( c/ X! [' d) t, U6 Q } catch (Exception e) {" I+ H# N5 I H. F& `6 w
System.err.println ("Exception stepRule: " + e.getMessage ()); k; j7 \6 H- I$ P: Y# W
}8 l. a2 {. w8 k
- g& n$ N7 |7 A* Q' n try {- U2 }+ c' u9 a9 }* a
Heatbug proto = (Heatbug) heatbugList.get (0);/ l# c' H) V5 |$ V9 l
Selector sel =
9 ^0 F4 \% m7 G. W! u new Selector (proto.getClass (), "heatbugStep", false);
" f% g) S7 R+ J/ t" g$ J: _6 v: Q actionForEach =
2 e+ _1 n& g. l- n* w( U modelActions.createFActionForEachHomogeneous$call
! }3 |+ [. U- Q' o0 T. Z# t (heatbugList," T' J3 [, t# O: M8 j& v. a4 ^
new FCallImpl (this, proto, sel,/ N$ E7 K. f% F- x6 k4 ]
new FArgumentsImpl (this, sel)));
' J( g m" e. Z7 l5 _* Y0 K } catch (Exception e) {
4 g& b4 t5 O- r9 ^ e.printStackTrace (System.err);
' D- @) s" b; U }& w( v0 I- ]1 H
V r {3 X/ `$ L syncUpdateOrder ();
6 n) ^5 r2 h1 l# J& L
: _+ `1 T8 B5 N/ H& j5 L try {
, z* ?' V- B2 P modelActions.createActionTo$message 5 |7 D: k/ N1 ]3 b. l
(heat, new Selector (heat.getClass (), "updateLattice", false));% j8 k9 h* t- F
} catch (Exception e) {3 E9 f B4 a( P1 b j% s# p: s
System.err.println("Exception updateLattice: " + e.getMessage ());6 d+ \2 w- f7 q- m. H$ k
}, m- W; X: e: N" c6 Y3 i7 h
) D" @8 e. ?+ i3 x. ~- m
// Then we create a schedule that executes the# ?$ {' m4 f% G6 t/ O% d
// modelActions. modelActions is an ActionGroup, by itself it
$ I4 B: f( k% \) N: a8 L8 P% v' K% E5 [6 r // has no notion of time. In order to have it executed in
* U& F0 {5 B0 M1 |7 ~ // time, we create a Schedule that says to use the! C2 J# |' Y* x3 D/ A
// modelActions ActionGroup at particular times. This2 z+ a! \) b1 y7 ~; `
// schedule has a repeat interval of 1, it will loop every8 ^% v5 T$ `0 G; b# e5 G3 @
// time step. The action is executed at time 0 relative to
; a3 |2 [( |/ D( T! ^6 \3 O // the beginning of the loop.- R% k$ ~0 m. O: G7 E
- s( _4 J* z2 \+ O( ]
// This is a simple schedule, with only one action that is, C' ^) q9 n8 j# |
// just repeated every time. See jmousetrap for more
- J* z+ H! `0 Y1 n // complicated schedules.
: n& w% j2 C" {" X2 Q . J$ _7 U P4 F8 v: z9 L J- H
modelSchedule = new ScheduleImpl (getZone (), 1);
" B; ~- K) v# u- }( S/ Y& B modelSchedule.at$createAction (0, modelActions);* L( @' O! J" t
/ d2 s6 p, j0 I1 O" ]# X
return this;' a2 W( W$ y0 [( W5 {
} |