HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# N3 p. j! S( T2 E7 J( i5 y% R) I) }
public Object buildActions () {
9 o) z- W, r/ K8 F4 z% r% {; Q8 s; l super.buildActions();
, K" p# B$ a" l1 U 1 s5 g, ~! _ r# F8 m& M3 {
// Create the list of simulation actions. We put these in( I4 }4 Q/ P- A/ K/ x- Z
// an action group, because we want these actions to be- O, L- j" H/ _! W( @. |& C
// executed in a specific order, but these steps should4 t4 q0 G$ q; V& C
// take no (simulated) time. The M(foo) means "The message
" N; `4 v) ^& C( e5 j7 }* Z // called <foo>". You can send a message To a particular
0 [" K/ q( f$ W5 ~, b/ ` // object, or ForEach object in a collection.
2 f6 H k. l. k
/ J2 y/ p9 m0 j1 i8 H* _) l" C( S // Note we update the heatspace in two phases: first run$ u' \, j8 m. ~) w0 B9 V
// diffusion, then run "updateWorld" to actually enact the
# e! Y9 P: F. K // changes the heatbugs have made. The ordering here is
; P* u- P2 y. l5 |0 k // significant!
) Y x/ _1 [. {9 p5 i2 P1 [, [5 d8 X
2 M9 U3 j: c8 i2 B // Note also, that with the additional* _4 n5 [. o+ h* {( b
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 }: \, U2 o/ L
// randomize the order in which the bugs actually run; q8 X5 i' u8 O, Z$ [
// their step rule. This has the effect of removing any
; X! U3 I( c3 ? // systematic bias in the iteration throught the heatbug
; Q4 I# n: w- S9 l0 { // list from timestep to timestep
1 A3 ` R, w" `: _% Y' P ) ]' f: P2 |+ L2 x, \6 [
// By default, all `createActionForEach' modelActions have! J. t% S7 X- X6 @6 x
// a default order of `Sequential', which means that the
% E2 o1 b2 z5 S5 f) M // order of iteration through the `heatbugList' will be
+ B2 a! w$ n' v/ |1 A! W3 M // identical (assuming the list order is not changed
3 }3 j# h+ w7 ~4 d% t/ Z // indirectly by some other process).$ G% M7 ?. w8 V
, L% W o' I: e) N/ A6 P. z modelActions = new ActionGroupImpl (getZone ());. e* Q, p( I. }
C8 z: X n7 C3 K" O6 G try {
2 s, n: f+ ]* t8 r7 o5 m modelActions.createActionTo$message. h0 C9 ~% {1 @: b3 a8 X
(heat, new Selector (heat.getClass (), "stepRule", false));8 ~" @6 E, x4 a' @% n; ^$ a
} catch (Exception e) {: J9 t' r" E/ M9 i) N& D5 M
System.err.println ("Exception stepRule: " + e.getMessage ());' o9 d' u# I5 F3 f. c
}: h8 c) k" W2 J8 e
" {& P8 `8 u) h$ y
try {. _; I. q) R6 l1 a7 l- S
Heatbug proto = (Heatbug) heatbugList.get (0);
# N! a" J0 X# l4 _; \. F3 n& y9 l6 J Selector sel = 2 Y" f7 ]' ]% e! Y* t* w
new Selector (proto.getClass (), "heatbugStep", false);
0 H0 t# }, V/ A! H# v+ K& c actionForEach =
# T3 }) Z9 U, t% c+ s# E modelActions.createFActionForEachHomogeneous$call2 _' D5 y& S2 x- B. S8 ?% z) U6 j
(heatbugList,
8 J9 r/ d7 H& R+ E9 R8 Q* _8 F new FCallImpl (this, proto, sel,
1 Q4 P$ [$ E4 y new FArgumentsImpl (this, sel)));( r& @$ m2 P$ F7 k
} catch (Exception e) {
( E2 W; r/ a" x3 g8 o e.printStackTrace (System.err);% y5 _( ^9 C h7 @* Z
}
/ M+ s& ]& H* W ?7 k
6 s* A8 f+ M; t$ Y0 { e syncUpdateOrder ();
7 \1 j7 ?# s/ p& i- h c: D8 [
5 b% }: L0 M- }: U5 a try {
" a: h+ b& |7 O5 P9 h modelActions.createActionTo$message " M, Q2 G6 C5 p8 P
(heat, new Selector (heat.getClass (), "updateLattice", false));3 D4 @0 V1 ~) F8 u+ E* M
} catch (Exception e) {
& J1 G6 z, @3 }' ^8 _) p System.err.println("Exception updateLattice: " + e.getMessage ());4 J& J) C6 {& }& O
}
- H u [& P1 [: R0 B+ n n
2 z+ p; ~$ Q9 \, [0 U) r+ E7 n8 o" M# } // Then we create a schedule that executes the6 k& z% {' z3 I( n/ J( J9 B" s
// modelActions. modelActions is an ActionGroup, by itself it# K$ _' N9 ^6 X1 R- s
// has no notion of time. In order to have it executed in
8 ^% q9 p# H# Q // time, we create a Schedule that says to use the, T3 j0 t- F( |: ^, j! n
// modelActions ActionGroup at particular times. This
; r) y* |( v( U% b8 Z# f# E // schedule has a repeat interval of 1, it will loop every- W: T% E, P6 M
// time step. The action is executed at time 0 relative to
" S3 I1 O6 D/ W1 h0 `9 S: R4 s // the beginning of the loop.
+ o9 T, A/ g+ ^" U! u
' W# n% e. k& T% r! F k& O9 U // This is a simple schedule, with only one action that is
- c4 w1 q o* q5 ?0 | // just repeated every time. See jmousetrap for more
6 a, ?) I% }% [4 o @ // complicated schedules.3 E# U k* q$ o! ` ~% S
- \: f+ v3 j. ~, t1 P
modelSchedule = new ScheduleImpl (getZone (), 1);1 u5 j3 y8 n, M( J" s
modelSchedule.at$createAction (0, modelActions);. H# Z4 Y3 T3 h. S
3 ]8 T* g c+ E% A9 N8 Y
return this;( F( W! a j) ]/ w+ l3 P. A3 `$ S
} |