HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ c( m; X5 h! ?( J3 u. i+ B: d
1 D7 h' P0 z7 y$ h public Object buildActions () {0 G7 L$ `! t' N8 h' x5 j, L& g7 z9 i
super.buildActions();
6 ]. f2 D) o! u& }. I# D
) O! |3 L1 K1 T4 E( J! [ // Create the list of simulation actions. We put these in
- I+ ?4 S6 t8 V, g O // an action group, because we want these actions to be
5 R7 C5 P+ k! T1 r0 D // executed in a specific order, but these steps should# b6 n- Z* z' Q$ o1 D2 X+ s
// take no (simulated) time. The M(foo) means "The message
5 V; q7 q0 F/ `2 ]. a( m, p // called <foo>". You can send a message To a particular4 L+ c) C, z, R" Q! `) Q2 C# C
// object, or ForEach object in a collection.
3 ]: y9 W# d l* F% c+ g
* y; k7 I& e: o7 Q // Note we update the heatspace in two phases: first run1 f# G# i4 [: Z3 o# v% |
// diffusion, then run "updateWorld" to actually enact the$ [; M' \& o8 V9 I+ ^
// changes the heatbugs have made. The ordering here is
3 `9 {: D- Z. u. G( C$ P // significant!
$ W3 s8 M5 V! X+ Q
: T$ B8 q4 A9 m6 W // Note also, that with the additional
6 F$ }9 f( f( N0 W // `randomizeHeatbugUpdateOrder' Boolean flag we can
Y) ~8 o6 n: D" [; @2 @ // randomize the order in which the bugs actually run
7 k" ]/ A+ x8 a8 ? // their step rule. This has the effect of removing any4 v1 a; m6 \, s) O
// systematic bias in the iteration throught the heatbug4 g3 X4 X3 |/ L/ {. A0 ^/ J
// list from timestep to timestep
( }8 {% e! J& S& \$ d& z; h 1 @8 H8 V ?% d; P: [" n3 Y' Z1 X
// By default, all `createActionForEach' modelActions have
D; w% v) d9 B* ?+ q% }" h // a default order of `Sequential', which means that the
( D& O0 v$ b. \ // order of iteration through the `heatbugList' will be
9 I$ q8 G) ^8 ^8 f# C // identical (assuming the list order is not changed9 C2 `" f# ^' v3 |3 C4 c
// indirectly by some other process).
% \* y' T/ H' R* M# O
# |; l q# C5 F! U( Y. C modelActions = new ActionGroupImpl (getZone ());7 \1 j, _1 c. X/ y6 d3 o7 b" U
& j( ?% G) w; y3 G
try {& I8 G% O* N; ^8 G3 a
modelActions.createActionTo$message- p6 D0 B I6 }" F" b
(heat, new Selector (heat.getClass (), "stepRule", false));0 ^2 a& i' u4 u
} catch (Exception e) {
u0 j, ?8 U1 M* h System.err.println ("Exception stepRule: " + e.getMessage ());, M q3 s c T
}
* z7 o: g2 ]4 e
9 O4 L. l+ ]3 | try {3 g6 {. L1 s/ e( F; f; w
Heatbug proto = (Heatbug) heatbugList.get (0);7 ]3 L6 M" {/ z( E
Selector sel = 6 t( V( l: w) k* Y9 ?1 e! X! a
new Selector (proto.getClass (), "heatbugStep", false);1 L8 M$ G5 ^3 d9 G2 o& {
actionForEach =
' i5 a. _- ]: K6 E x' s modelActions.createFActionForEachHomogeneous$call
' i1 |5 o1 I. k5 p) y% a# S (heatbugList,
2 e: J" x! X' W" d new FCallImpl (this, proto, sel,
% \+ \. d- c" H6 Z new FArgumentsImpl (this, sel)));0 i* y+ H( m" H8 p" x
} catch (Exception e) {
1 X# I. C# s/ b2 o e.printStackTrace (System.err);* L* G" N: x: g2 e* p
}2 C7 ?, y6 E- j
5 O1 a& U' C; x
syncUpdateOrder ();6 Y6 N' h, u1 f
0 K# C" J2 e0 A3 t
try {$ N6 H* @! ]& R* c2 u1 i' Z
modelActions.createActionTo$message / L6 T: \8 v3 {1 I
(heat, new Selector (heat.getClass (), "updateLattice", false));
: N9 J- @9 z. c w$ Y. I; w$ x } catch (Exception e) {6 T. u2 p4 h; S& _, ], y
System.err.println("Exception updateLattice: " + e.getMessage ());
3 F) f/ b9 W# h1 L }6 K0 Y4 i7 U( T/ w9 i7 f$ y4 W
5 u ?+ }2 Z6 y" ?. z4 @6 M // Then we create a schedule that executes the4 G) {- ~% T0 b) h |3 G
// modelActions. modelActions is an ActionGroup, by itself it2 A3 d, n- P9 k1 o3 @. V( P0 v, v
// has no notion of time. In order to have it executed in, U+ P" t* P9 Q) k4 v& n
// time, we create a Schedule that says to use the% Y H3 _( _. U% x* w, @( H, y
// modelActions ActionGroup at particular times. This
0 O4 e1 J' l# O( }, G3 m; j // schedule has a repeat interval of 1, it will loop every# `" e$ @3 ?& X
// time step. The action is executed at time 0 relative to ]- _9 a; K0 B0 c
// the beginning of the loop.& H' h4 D3 m2 k) w
9 a1 @2 O' ~. H // This is a simple schedule, with only one action that is. k" Y' H, U4 N( \; z' J
// just repeated every time. See jmousetrap for more
2 U0 J8 a4 l9 m3 M) R: I* Z // complicated schedules.1 N2 Y1 h0 g) n/ |0 k
4 C7 n d4 }0 z$ m. @- y
modelSchedule = new ScheduleImpl (getZone (), 1);9 I) _& a. J' I* I; E
modelSchedule.at$createAction (0, modelActions);
# ~7 d) v) D- U; n: ~6 a5 p
5 w0 f# O; L$ d- N# ~ return this;
4 {- m ~4 F+ P P) G# f) ` } |