HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 d) C+ w j) L
6 J- h+ E7 Y, t4 v/ m# a& b
public Object buildActions () {( c8 j5 l) ?5 J% X% F$ f. T
super.buildActions(); F/ W, j3 y% \1 c. W) y( ?& Q
2 X6 _, u; y- o9 W0 j+ C // Create the list of simulation actions. We put these in0 E% L. @: X( T/ T- i
// an action group, because we want these actions to be5 Q4 N. M0 Y4 h8 u- ~6 G3 @
// executed in a specific order, but these steps should3 J+ p' X! D7 ^# k9 w
// take no (simulated) time. The M(foo) means "The message
. ?( i( _0 K* _ // called <foo>". You can send a message To a particular' Q' M7 Q$ H7 H. I% [- n) h4 i A" {
// object, or ForEach object in a collection.! i+ B& ?0 h' F* X9 V
$ F5 q- l6 m3 p3 d2 J
// Note we update the heatspace in two phases: first run2 n8 Z N+ B3 h8 h5 v
// diffusion, then run "updateWorld" to actually enact the
) |3 M) [% R+ {* r // changes the heatbugs have made. The ordering here is5 h; ~; l# O+ {8 T6 m: m3 ~3 R
// significant!" n) Z Z9 x5 D3 {' X9 x
% }: Q$ E" h2 o s7 e. J // Note also, that with the additional v) a# g: r R# W9 Z# Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% P% ~" v$ G& |. ^2 D( d6 @ // randomize the order in which the bugs actually run
2 H+ Z* B* t+ K, o3 _2 u' [ // their step rule. This has the effect of removing any
e' H( G G* C5 a" B // systematic bias in the iteration throught the heatbug0 b! G, r1 Z! d: N1 _
// list from timestep to timestep
4 {8 p. a, v0 ~
9 C8 b, o7 _$ ~3 c2 o; V7 W0 Y // By default, all `createActionForEach' modelActions have
, G2 G+ O6 ]* T; j // a default order of `Sequential', which means that the% t J5 m. Z7 w6 r, B
// order of iteration through the `heatbugList' will be
0 h' I& C) b: L" c // identical (assuming the list order is not changed
6 `- ~. M, V, j- }- F // indirectly by some other process).
6 Y& ? x8 @0 X* A 9 O) G4 W: Q3 f6 ^5 Y5 |
modelActions = new ActionGroupImpl (getZone ());$ i9 F3 c' b- w0 _: Z6 n
" S' ]2 n. }/ @. k/ o) b
try {
5 Y% U8 e; a/ H/ ~2 a! O# k modelActions.createActionTo$message+ {8 F J+ A6 ~3 ?
(heat, new Selector (heat.getClass (), "stepRule", false));
' O/ L! @9 E! x+ |" t0 m } catch (Exception e) {
) n; q3 @: ^5 Y System.err.println ("Exception stepRule: " + e.getMessage ());
# n7 a# w8 k3 w3 F- W m% K" M9 v }! F1 f$ K# c5 ^/ l, p
, k% o+ J/ y' N6 X: r9 J3 F( E. a
try {
O" X8 F- u. Z/ X( i9 y( a. e3 u0 i Heatbug proto = (Heatbug) heatbugList.get (0); I% A% }6 N! b+ ~2 g. x
Selector sel = % I2 ^! E# O5 u* a+ l' A* G8 r
new Selector (proto.getClass (), "heatbugStep", false);
3 {; X7 {& E% `7 E actionForEach =6 z0 ^- X4 U6 N& G
modelActions.createFActionForEachHomogeneous$call/ N4 E1 A0 D6 [8 ]5 k2 @0 }0 f. d
(heatbugList,
5 } I$ `% r" f, `( l new FCallImpl (this, proto, sel,& V8 Z+ B1 m0 c, U
new FArgumentsImpl (this, sel)));; u2 k# m$ y- Y4 S, ~4 i8 e
} catch (Exception e) {
% M3 @8 X7 X! h7 @) X9 z e.printStackTrace (System.err);: Z/ w) w8 s% w) X* W
}
: u. f7 c8 Y- \ 7 ^, |' p1 l; O3 F9 w
syncUpdateOrder ();: R) I2 p8 R' o
7 z" a; q- {+ Z6 v
try {# I- h9 n( m2 h, U
modelActions.createActionTo$message 1 X( V; ^4 m3 b
(heat, new Selector (heat.getClass (), "updateLattice", false));
* x j& c) x o; U6 o: X" F2 W- U } catch (Exception e) {
5 M) T8 `& ~: [ System.err.println("Exception updateLattice: " + e.getMessage ());! q( ~% H3 E4 R6 X
}# C6 X6 Q" ?" _1 S' W
) M' L" T7 ^: U7 s, `# K" \& i // Then we create a schedule that executes the8 @9 ?( K( [# x
// modelActions. modelActions is an ActionGroup, by itself it; H; @9 t" y6 S2 {
// has no notion of time. In order to have it executed in% D- i3 v" U* q9 m, Y7 J
// time, we create a Schedule that says to use the
7 q* ?1 q J: h S2 K6 _7 d0 \, Q // modelActions ActionGroup at particular times. This
% I$ b$ O( E: o: D) ?: k, J // schedule has a repeat interval of 1, it will loop every
% C' ~' l7 Q8 N7 |# Q: Z, Q // time step. The action is executed at time 0 relative to
- e$ H3 E1 X! }9 M // the beginning of the loop.
: x' {* F- Z4 N3 O" G+ X
+ C! k. o& i6 ~9 J9 V: M7 y- y // This is a simple schedule, with only one action that is8 w, u7 b& {5 z, k* v
// just repeated every time. See jmousetrap for more( Y4 f2 `8 [. G# u- \
// complicated schedules.
3 q0 V. ^+ G" d7 Q/ r" n
% J) S- \7 z% \3 n9 R" m0 e1 f7 K0 a2 r modelSchedule = new ScheduleImpl (getZone (), 1);; W* E, w( [# }( `
modelSchedule.at$createAction (0, modelActions);
{" p( W. V& A/ V9 l
% f1 v: u1 Q) D8 f- Q return this;( x& r: R9 J4 ?( f; S8 b' @
} |