HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( r/ \ m# Y3 Z* J! |6 x0 } a6 n {! {8 a: A0 D Y
public Object buildActions () {) a+ Z' B6 e( ^" v' n l
super.buildActions();
( J: u0 \; k# e. R& s 6 p* J% c5 u$ A2 }: i
// Create the list of simulation actions. We put these in
1 A' Y' \2 M1 A$ V // an action group, because we want these actions to be
) E4 X9 P- I4 c5 _' m m# Z // executed in a specific order, but these steps should" {& j3 j+ c+ h' V( A
// take no (simulated) time. The M(foo) means "The message
/ z( F4 k% S) ]. H8 R // called <foo>". You can send a message To a particular
9 k7 B' J9 C s. i2 k1 W z: q4 ~8 K // object, or ForEach object in a collection.2 y: U5 G! d4 B d1 Q
3 M) D+ h W W4 T8 B
// Note we update the heatspace in two phases: first run' E3 ~) j/ y! j+ q6 T2 E, t3 o
// diffusion, then run "updateWorld" to actually enact the2 k4 u) `2 c ~ A$ N" e
// changes the heatbugs have made. The ordering here is- j: T7 U, a% X- ^2 D S2 P" r
// significant!( y) B- Q3 K# T/ o# G+ v
1 j/ J! m7 B- W // Note also, that with the additional
8 |% ^6 ]+ e% M! o9 C* P$ J // `randomizeHeatbugUpdateOrder' Boolean flag we can
, B) d- [7 I) W* e. @+ k- I4 H- o9 A/ [ // randomize the order in which the bugs actually run* J: U" a6 y6 S0 S2 w" S0 c
// their step rule. This has the effect of removing any% T j2 z! K7 a) I; M
// systematic bias in the iteration throught the heatbug
9 a7 v; p5 k: A // list from timestep to timestep/ C8 M' `' t7 \" r" O
; ?: L2 R+ T3 x2 O6 O) i! V& ?+ \ // By default, all `createActionForEach' modelActions have# j# M4 \5 L3 p% F6 I. u
// a default order of `Sequential', which means that the
2 F3 g5 E, F$ o! A1 ~ e // order of iteration through the `heatbugList' will be, h! ?4 d# A& n! r6 \9 S
// identical (assuming the list order is not changed* ]5 m: A( E# j$ G0 U2 k' }
// indirectly by some other process).$ m% H* ~+ B i, o a- C; y- e, p) P Q
3 _. \- [! T A+ E/ @ modelActions = new ActionGroupImpl (getZone ());( [- n( q9 H! o0 N9 ~
: I, p% O3 o: w. _3 S0 y& O try {( X( ?" L7 M0 E5 X1 O# L
modelActions.createActionTo$message) [+ l- g" O& b6 j$ x; K
(heat, new Selector (heat.getClass (), "stepRule", false));* v: m$ v/ P- h
} catch (Exception e) { [, e; M7 B. s0 R) x7 e8 Y: c# h
System.err.println ("Exception stepRule: " + e.getMessage ());
. \7 N+ V" K- h( } }
) v, {$ m! [( i2 ]) y) j- M8 @0 C2 t) u/ X6 H2 w6 i1 O
try {
1 O* D+ i) m0 d9 r9 d Heatbug proto = (Heatbug) heatbugList.get (0);
+ }# F0 a4 [7 x9 j7 x8 M, O Selector sel =
6 u. X* y; T$ t! c. }# Y new Selector (proto.getClass (), "heatbugStep", false);
7 U5 [ V3 F7 r# K$ }% x3 I X3 J actionForEach =) c X8 [) s" }; W
modelActions.createFActionForEachHomogeneous$call" R! }, Z% b) t) h2 l
(heatbugList,
M) X: p6 c& P5 ]5 ] v new FCallImpl (this, proto, sel,
, Z) X, e7 z) f+ [ new FArgumentsImpl (this, sel)));0 y# O& }* a4 K& D: u) I y
} catch (Exception e) {4 Q# e Y8 O3 E
e.printStackTrace (System.err);$ H' W. U( z7 H+ t: R+ u' h
}
~: T- }) s% S4 o' a ) f3 j; |0 |, N L
syncUpdateOrder ();6 Q; D* x- h) P, Z4 ]6 Y
; o$ y, [- v: B# [/ b; n
try {
" a4 H+ Y- h% d, a. a4 ] modelActions.createActionTo$message 1 y& k3 |3 D& q+ e" w P
(heat, new Selector (heat.getClass (), "updateLattice", false));
, h' R. \! P3 t, p8 ^" `3 V( B! k } catch (Exception e) {& x5 @# ]7 b, L
System.err.println("Exception updateLattice: " + e.getMessage ());3 g8 H$ y( W7 o* q; [, s
}
, z5 C8 I. Z& d2 Z" H# y2 h- \6 r
& \$ g4 J& f- I8 N, q! A0 K // Then we create a schedule that executes the: A. M" b- n: v' n7 o8 g; v h3 ^
// modelActions. modelActions is an ActionGroup, by itself it
4 D# ^ j# L9 `6 m // has no notion of time. In order to have it executed in. ]" u+ Z4 e/ ?9 N" _& Z4 u
// time, we create a Schedule that says to use the
, G9 Z! Z; K# r& u- R0 O. ] // modelActions ActionGroup at particular times. This- l% Q# n& `& N! [/ U
// schedule has a repeat interval of 1, it will loop every$ }2 s7 E. T3 H# P$ n6 G% H
// time step. The action is executed at time 0 relative to8 ~/ o. t7 t5 V, w# J
// the beginning of the loop. b: R5 l+ s; w L" u0 C: d1 b+ b
! q0 F9 f) q' j* h0 n. K: L // This is a simple schedule, with only one action that is3 H# r" E: r" q6 b2 \
// just repeated every time. See jmousetrap for more5 Q! y, L" P1 O$ `! p6 Z
// complicated schedules.
+ u4 z0 _: g/ J- F4 E9 c7 }5 i ) G# }" o' s$ s# [/ d
modelSchedule = new ScheduleImpl (getZone (), 1);
% T( w1 s4 a/ L- W- C2 e, f8 R- { modelSchedule.at$createAction (0, modelActions);
5 x _: a# @- J/ L+ m. ~( N
8 Z- D; h! b1 {( r' N" K return this;
$ H9 q6 J* Y, t0 A9 o } |