HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 r9 x2 j* y' z9 R" B- A+ N% g" q
N+ W8 W. W. J- h; ~
public Object buildActions () {
$ L+ E3 m& y, |$ _0 I& \- z } super.buildActions();
7 l* b" h* U) I1 ?$ M * a$ [! b7 ^/ W0 T
// Create the list of simulation actions. We put these in( J: v. s' O( h' p$ w" U
// an action group, because we want these actions to be
2 p9 j; o# C7 j7 s9 Y1 f8 G // executed in a specific order, but these steps should) k+ P% y a C6 j
// take no (simulated) time. The M(foo) means "The message
9 Y* |1 h* q( I( D3 c+ S$ Z // called <foo>". You can send a message To a particular4 [8 Z, M; V6 f6 s
// object, or ForEach object in a collection.
5 d, i& t$ }% p; N/ ? 8 i* v' _' D: n) m( {2 |
// Note we update the heatspace in two phases: first run, W6 T3 T" \+ U s3 v5 r
// diffusion, then run "updateWorld" to actually enact the. m) H) ~. Q) N0 \
// changes the heatbugs have made. The ordering here is
* N' G# j4 R" W0 u3 a7 L // significant!0 Y0 x/ s: {* x6 ^$ W3 q
. W' p% n/ Z! H0 q9 c/ f // Note also, that with the additional
7 Y9 r, a( t$ a- u7 ?- I. X // `randomizeHeatbugUpdateOrder' Boolean flag we can; G0 X' Q; c1 `1 @
// randomize the order in which the bugs actually run# W9 K8 H: b0 l7 H
// their step rule. This has the effect of removing any
7 b6 H+ b% v2 i5 V! \6 Z // systematic bias in the iteration throught the heatbug
' U `. Z/ c9 u( N$ P( ` // list from timestep to timestep
+ [9 t1 c$ x, \/ n: r $ y" ], R. B( @
// By default, all `createActionForEach' modelActions have- N: { Q7 _7 g% M0 l' o% |
// a default order of `Sequential', which means that the
; v' d- f( S: F: C // order of iteration through the `heatbugList' will be, e$ n* z) s% z
// identical (assuming the list order is not changed0 `, N9 y/ { {# H4 ?$ ^9 ~ t
// indirectly by some other process).
; @" k/ R. i T9 _8 ?
! k6 {: X o- p s/ O4 W modelActions = new ActionGroupImpl (getZone ());* j" ]/ S8 F- B* I, B! x( R
9 N* \8 c5 _7 W% r) @
try {2 @' H) S4 h. B( j! d e3 v
modelActions.createActionTo$message6 ], X: Z* I# n5 x% ~9 K
(heat, new Selector (heat.getClass (), "stepRule", false));
% m+ `8 t6 {: N; n8 d } catch (Exception e) {
, ~' w% |0 M* k3 v9 n, j System.err.println ("Exception stepRule: " + e.getMessage ());) C! i N# i9 W1 z( B; [& b! o
}
/ i, Z/ I3 g; i5 _5 d; O5 Z% _! |+ b, ], k+ r. G) `
try {
7 k# R0 B9 H0 c8 f2 I Heatbug proto = (Heatbug) heatbugList.get (0);" E. f m2 w& |) x
Selector sel = ; U1 c+ u. K C/ F3 r( t1 _
new Selector (proto.getClass (), "heatbugStep", false);
- {' `: \* Q/ P* f6 I actionForEach =& d/ k+ ?( m1 d9 D' q$ {' U
modelActions.createFActionForEachHomogeneous$call [0 S+ k# ?& A
(heatbugList,
' p. K) B2 c3 H) j) ` new FCallImpl (this, proto, sel,
) I. o; x& ?, {8 d/ t; I new FArgumentsImpl (this, sel)));
4 @3 @0 A& v6 @/ ~9 }! ?+ |. F+ a/ o% S } catch (Exception e) {
x6 Y" }1 b' ?% p e.printStackTrace (System.err);
+ q! ?) I. c, Z! U- S }! Y. r; [2 ]- o# K( a# H% @
$ g6 O3 P7 D+ }3 \
syncUpdateOrder ();) j: K. L7 c9 e) `' O# `
+ O8 S+ |; C I7 n
try {
% D# M& V" [% @ modelActions.createActionTo$message 4 j2 T3 p* R7 U! B: X0 ]
(heat, new Selector (heat.getClass (), "updateLattice", false));% l4 w( G9 ]' F+ k- ]5 s2 z6 \
} catch (Exception e) {4 @& f" s/ l! T( Q( R
System.err.println("Exception updateLattice: " + e.getMessage ());1 Z) ]9 B0 H" [ @' b
}
1 t1 L- h. A2 ~% j, Y0 |" n# W8 F ! [# C8 [6 ?: w$ `% H
// Then we create a schedule that executes the! o7 n2 v6 \' W7 j* L) Y) j
// modelActions. modelActions is an ActionGroup, by itself it
5 M/ ]) }/ I( O5 ?$ J // has no notion of time. In order to have it executed in
' [$ h: e& M1 I, O3 d // time, we create a Schedule that says to use the
) z6 p) K9 g- m$ Q1 H F/ a // modelActions ActionGroup at particular times. This
- o1 a b. b. ]! t% y, v // schedule has a repeat interval of 1, it will loop every
& X8 ?3 x2 W( B8 g# H // time step. The action is executed at time 0 relative to
% l0 N: a3 M" l0 }7 G // the beginning of the loop.
" T. S' }, Q' g; b M$ ~$ |- r3 ]3 Z, k' c# k
// This is a simple schedule, with only one action that is! M0 @' v; ?) O, Y# }; }8 w: F
// just repeated every time. See jmousetrap for more w0 T8 ^) c& P3 T0 q
// complicated schedules.) R5 l! o; R" C6 V, w
5 ^4 V1 N5 r" H$ c$ E) ^. F modelSchedule = new ScheduleImpl (getZone (), 1);- ?, ~# \' d/ i; w3 ~% M7 }
modelSchedule.at$createAction (0, modelActions);
2 E7 x% r: Y" [ 1 j# f: M/ Q7 `
return this;8 V2 J1 C, i7 k0 n4 w
} |