HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# I; }0 h2 E; l n: q2 L& i1 Q1 B; |3 V9 p/ M1 `
public Object buildActions () {
8 c& w, l: K8 E- ^/ m5 q super.buildActions();; f g/ x; M8 S" O6 Y- l
( H. A% U7 S! X) c) Y/ t- d // Create the list of simulation actions. We put these in
Y; M8 H! m4 h& V% i // an action group, because we want these actions to be% y( q0 `6 p) h' I* [
// executed in a specific order, but these steps should
% C, o' ?4 }1 X) `4 q // take no (simulated) time. The M(foo) means "The message+ K( a1 H# t3 U8 _
// called <foo>". You can send a message To a particular
' {7 C9 A+ g/ z. x& c // object, or ForEach object in a collection.+ O9 z1 |( n) o8 v
7 k( o* p, V- s. r7 j* S // Note we update the heatspace in two phases: first run1 f, T7 F r' D3 Y
// diffusion, then run "updateWorld" to actually enact the
0 m, t9 B, A5 c2 m% E4 z8 V" E9 }8 J // changes the heatbugs have made. The ordering here is4 @! Q! w U/ V5 B4 h3 s
// significant!; K, ?6 @+ B' `5 X, h. [5 v+ R( H
5 p" f0 a# A1 f$ H7 Y s // Note also, that with the additional5 f5 e$ [7 x) c8 {+ C# T0 M7 T! e
// `randomizeHeatbugUpdateOrder' Boolean flag we can: L9 C3 r h- ^7 c
// randomize the order in which the bugs actually run9 f3 m0 R h) y; o. o: I/ \, R
// their step rule. This has the effect of removing any& J1 _" [5 [6 l& ^6 ~
// systematic bias in the iteration throught the heatbug1 H2 I, u+ B, J5 }7 l3 Z: H- c
// list from timestep to timestep5 r6 ~! O( Q0 @) t/ e) f) d1 A
7 N( ?" V0 l- Q; l3 B
// By default, all `createActionForEach' modelActions have6 B6 z) Z- y y$ W6 G; p* f' `( o; ?
// a default order of `Sequential', which means that the# e* D0 n u& q
// order of iteration through the `heatbugList' will be
7 x% m# {8 b. {! ^' b" \9 e c4 @ // identical (assuming the list order is not changed& |5 S' ~ Z6 W, u, J* f8 J
// indirectly by some other process).
7 H: `+ p6 G1 g. a
. r& z% E3 i/ {1 ?, E modelActions = new ActionGroupImpl (getZone ());
+ @& e2 I- }2 K. G g% ^7 d0 o" j q/ g' I: ^" u' Z
try {, y8 {; l0 F8 ~# d
modelActions.createActionTo$message
. O$ \7 L% d3 A9 u$ | (heat, new Selector (heat.getClass (), "stepRule", false));/ z p# j0 B- H& [1 b- H! A
} catch (Exception e) {
7 j4 J8 R9 S4 ?6 s$ a! W( H7 z System.err.println ("Exception stepRule: " + e.getMessage ());3 `2 X6 [: r# B# t' d
}
5 ]* @% w3 l B1 y$ z8 X( I" I$ o. }4 I S
try {6 A* G& P# z! k
Heatbug proto = (Heatbug) heatbugList.get (0);. T' m& V5 P \. N4 u0 y
Selector sel = + c$ r _+ c* ^; p% b$ v6 t
new Selector (proto.getClass (), "heatbugStep", false); F- }. j9 z6 e* _: ?# D
actionForEach =( A( u: { h5 J2 A
modelActions.createFActionForEachHomogeneous$call9 X7 }( l2 b! V4 t
(heatbugList,
' ]* X4 @4 y9 f* C v! N' a new FCallImpl (this, proto, sel,6 `7 I$ k% z/ R7 S5 }5 f5 D
new FArgumentsImpl (this, sel)));3 B( P2 T9 c( \ E% N
} catch (Exception e) {! H$ L$ E. a& d; N2 o8 f7 \
e.printStackTrace (System.err);
- Y5 A7 d7 x0 `* i+ n4 D% I \ }
1 W9 L2 p% c3 J ; E- ^- b+ p! |0 D
syncUpdateOrder ();; j2 t" ~# \% J4 v) G/ ?+ U, R
& H2 ]3 O$ O, D1 ^) N$ e0 x) o) I7 m try {' T I I. r2 I9 f- H; m
modelActions.createActionTo$message
9 `; n* e$ Z- w# i; T* ?. j/ G (heat, new Selector (heat.getClass (), "updateLattice", false));
1 [/ Y, N2 o: x W+ q$ U } catch (Exception e) {# D, S4 j! X4 A2 |. w1 k9 S. C
System.err.println("Exception updateLattice: " + e.getMessage ());
9 s4 k; A8 Y: f$ d8 E }1 V! S& i" o S: Z3 R* I
" ]) W$ \' D& L, H // Then we create a schedule that executes the
+ i0 T' q+ H/ S( y, K- E // modelActions. modelActions is an ActionGroup, by itself it
- G( c+ x$ i9 ? // has no notion of time. In order to have it executed in
/ |7 M2 B4 G% J) K4 u6 J8 K1 b // time, we create a Schedule that says to use the
|# a% g* O8 L9 V9 Q) W# ?7 v9 @& W // modelActions ActionGroup at particular times. This. u3 C; C& |/ O* L, _1 b
// schedule has a repeat interval of 1, it will loop every
+ l2 S( R( \6 {" y% J. [! u // time step. The action is executed at time 0 relative to
+ x9 l0 v8 e' Z( _7 O# \: Z" m // the beginning of the loop. E. H& W8 P% J7 P# |
5 u; \+ E' c* l0 @8 {1 O
// This is a simple schedule, with only one action that is6 [: y8 {. i4 s
// just repeated every time. See jmousetrap for more3 O: A1 n" S3 v2 y' G6 }# ~5 k$ e
// complicated schedules.
- ?: N7 q# _3 n/ Q* e3 m' ]3 v : I6 k+ P: i; j9 `( b& T) `8 \ [
modelSchedule = new ScheduleImpl (getZone (), 1);# |4 T# T* Y# h( O
modelSchedule.at$createAction (0, modelActions);
" m8 V, B, x& r5 b# ` D6 _9 K4 q9 g! N4 _" q1 ]
return this;
! T* } b: _0 y% \9 Q8 b( p } |