HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 F. |0 I5 p+ T
+ r& g' }0 s0 r! _. ^ public Object buildActions () {) W% | `& J1 T! g+ k
super.buildActions();3 n+ B. V% I0 W# T! _
: s& c4 w3 @0 K( I. [ // Create the list of simulation actions. We put these in7 o! \2 w- {: s: e6 M; l
// an action group, because we want these actions to be
1 i, O3 X5 |. { // executed in a specific order, but these steps should# s1 S( z% u6 i b. f' T
// take no (simulated) time. The M(foo) means "The message* {( a. g6 {& O* D3 g8 E6 C0 ~
// called <foo>". You can send a message To a particular- t" V* V9 q4 b9 g' X
// object, or ForEach object in a collection.
# n1 ?- W* w1 J y6 F3 y1 y 5 e$ S$ `; x9 C. Z0 U6 |! N, ?
// Note we update the heatspace in two phases: first run2 b+ s2 E; A6 B( V
// diffusion, then run "updateWorld" to actually enact the: S; W% A: |( K: e! Z5 v$ E0 s7 M9 b
// changes the heatbugs have made. The ordering here is1 {5 d1 p6 P$ |* A' [
// significant!6 r# K# F& V9 }4 }5 {5 |
* W9 l# x3 B- X, b6 S8 K9 c8 d // Note also, that with the additional
/ [0 f+ n# E; O) g+ k5 ] // `randomizeHeatbugUpdateOrder' Boolean flag we can
' l1 M& T0 a0 F9 f: f t // randomize the order in which the bugs actually run" L0 a6 [, y7 \( P* a( J a
// their step rule. This has the effect of removing any
! s3 u. k$ M8 p' n) V. t: x // systematic bias in the iteration throught the heatbug
0 c$ h9 v4 e3 K; f9 Q // list from timestep to timestep
6 q$ J# ~" N( I+ ? ^5 d 0 W" F5 ]1 ~! m a6 q% ^
// By default, all `createActionForEach' modelActions have* |: y* H' Y* S) W, \& g! S* W' w
// a default order of `Sequential', which means that the
3 }/ O4 k* d5 O) B) t3 f6 I* Q5 K" p: \ // order of iteration through the `heatbugList' will be
" j" X# h* K6 q& D; g5 v& o& h4 l1 u+ a // identical (assuming the list order is not changed
5 f" H) d( r, U' i- g V+ K // indirectly by some other process).
- Q" ^: V+ x0 I4 q- `
% Q+ a, e) S4 B S modelActions = new ActionGroupImpl (getZone ());
9 r! V: G5 F6 f0 o! J( A- V
* E5 T( J/ @5 Q0 o! S: l try {
1 Y$ a1 s* s' h4 O$ }; J& F0 i modelActions.createActionTo$message5 {8 n* J3 v s: @% D) `9 \
(heat, new Selector (heat.getClass (), "stepRule", false));7 t1 K" P& | I
} catch (Exception e) {
+ F9 K+ S% J& ~) J. k System.err.println ("Exception stepRule: " + e.getMessage ());! _( r1 j2 l$ K/ n$ j
}( T* {+ o: y& j
9 ~" O* n/ x8 l0 N+ V
try {/ p2 C# x$ R3 t, L+ o! ?
Heatbug proto = (Heatbug) heatbugList.get (0);
) ]; F. l: a# J9 D) ~3 t; ^ Selector sel = ' f' z8 H+ ]0 V* N9 E9 V' x
new Selector (proto.getClass (), "heatbugStep", false);; f/ O: _7 ]/ F) w
actionForEach =6 D% J* Z3 V- o. P) Q
modelActions.createFActionForEachHomogeneous$call! H' i& [6 k/ h- |9 {
(heatbugList,
* F# z) h3 h6 j) E new FCallImpl (this, proto, sel,, l- L9 V5 j7 T& j! q! ]: H
new FArgumentsImpl (this, sel)));
7 p- P Y& |+ f: x4 u) g. _ } catch (Exception e) {
+ |+ A5 h( K; Z6 l7 F& i e.printStackTrace (System.err);
; j" Q! a9 M9 T( M; `$ A. s1 h }/ F! z- P. q3 m% V! Y
0 M) o- D7 F) `# H5 V0 w2 v
syncUpdateOrder ();
5 x3 Q! w# u* M' M( B
4 @6 M, j, G, _ try {) P1 f, m- P+ X; N+ I
modelActions.createActionTo$message
$ C" y( a. j- i0 g (heat, new Selector (heat.getClass (), "updateLattice", false));% Y$ |. V$ z5 q+ J4 B2 s' Z
} catch (Exception e) {
! |" v' U& k+ z0 `9 Z% q System.err.println("Exception updateLattice: " + e.getMessage ());
: @' z+ E9 u `7 I* |+ ? }0 t P+ E! r# _) \
9 Z" D$ Y8 _# B2 E- G9 ^ // Then we create a schedule that executes the; K4 p# _! d) N: M
// modelActions. modelActions is an ActionGroup, by itself it
# d) [9 P' I6 T7 W9 j. O // has no notion of time. In order to have it executed in; I, Z$ a1 f- U# q: I/ g
// time, we create a Schedule that says to use the
" C/ P7 S- g8 K6 {! g. z7 r // modelActions ActionGroup at particular times. This
) z( x1 q3 G o( t // schedule has a repeat interval of 1, it will loop every/ r5 L$ D, |. T6 A# N
// time step. The action is executed at time 0 relative to
8 S$ H' P1 l; R! M! @% {' Q // the beginning of the loop.- {4 P) q' {: j6 u c# ~2 Z
* r# d- }, r2 K2 P; t- D
// This is a simple schedule, with only one action that is" T8 ~% C, I2 x- z( |
// just repeated every time. See jmousetrap for more+ H9 w8 [7 U& A
// complicated schedules., R8 `6 L- q# u- x) F0 K
; }) C5 U3 J# m" y modelSchedule = new ScheduleImpl (getZone (), 1);
+ M9 U, x, U- I1 M g7 e modelSchedule.at$createAction (0, modelActions);4 j0 h, z- e3 R, v
. @+ o. Y i, i
return this;2 E3 g! G8 h. }) v3 T
} |