HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( D( M/ s' Z0 G. B. _4 k
; s) Y6 V$ r" {6 k public Object buildActions () {
' A$ X6 `' h o! m" W super.buildActions();
b( A3 o d- ^# i @* @6 r9 Q. ` 6 t( s+ @4 q& g1 C9 L& }$ G
// Create the list of simulation actions. We put these in
: J' b/ v, ^2 F- W" m7 I$ [8 ] // an action group, because we want these actions to be
6 n- _1 h, V/ N+ a7 x6 x // executed in a specific order, but these steps should
) E. T: J1 x$ H0 [7 i. q7 L // take no (simulated) time. The M(foo) means "The message3 l) d6 ?+ Y. Z) a, ^+ S; r
// called <foo>". You can send a message To a particular9 c0 b1 \3 e9 e9 y+ w
// object, or ForEach object in a collection.5 i+ A5 a! t+ ^% G9 z# b8 B9 `
4 ]2 y+ \8 Z7 u# E) O1 ~9 m$ C
// Note we update the heatspace in two phases: first run
4 k0 {3 g; _ Z) J/ v1 N // diffusion, then run "updateWorld" to actually enact the1 c$ W# B* Z1 k% [/ X8 M; C0 ^
// changes the heatbugs have made. The ordering here is0 V- c- f) j; q. B
// significant!# l$ [6 U' ^: j* v. g+ g8 h0 `
/ C9 `6 u) z G6 d$ s // Note also, that with the additional4 G# q# k2 m0 e$ h; J# B
// `randomizeHeatbugUpdateOrder' Boolean flag we can' h: o' l K% V
// randomize the order in which the bugs actually run
; Z' U/ a- r/ r7 x! R: }" \3 _ // their step rule. This has the effect of removing any7 Q/ [7 m7 y% k: O5 I
// systematic bias in the iteration throught the heatbug j; X% [1 d( \3 F
// list from timestep to timestep. d9 P4 U2 {: ?' I1 ]7 E
4 n2 ^5 b+ j" {. w
// By default, all `createActionForEach' modelActions have
) ]4 ^0 s( c5 C4 P // a default order of `Sequential', which means that the8 C8 X, l r. J0 j+ y( p) l
// order of iteration through the `heatbugList' will be- g4 X1 ]( e, n1 L5 x0 @4 J2 y8 a
// identical (assuming the list order is not changed
# `% _& I5 Y8 {0 b) G // indirectly by some other process).; K- g4 q3 p( ]/ |; d& B2 v2 r
N* t2 P6 {3 b: B3 ~: ^/ f4 g
modelActions = new ActionGroupImpl (getZone ());
O/ a2 x4 J6 V% o5 a# n- _9 R0 N6 d( l0 B: S+ o2 l8 x# J
try {. m$ l. X9 F( l! \/ R# K3 G
modelActions.createActionTo$message% Z7 U: b; s6 T4 l7 T
(heat, new Selector (heat.getClass (), "stepRule", false));( D# R- ]: l! F- y! o
} catch (Exception e) {
/ E' {0 o! ?7 l7 A- _4 I System.err.println ("Exception stepRule: " + e.getMessage ());& ` e/ E3 p5 G; w/ r# J+ c
}; \' c7 z; H. b: | _& `: X6 Z D8 p4 e
; j3 x% x/ F/ k* f X try {/ T* K o2 ? ^8 j* ]
Heatbug proto = (Heatbug) heatbugList.get (0);& g5 C! z$ U S+ d2 V
Selector sel =
+ m) i/ r) G7 U' Y4 R2 c. T4 v# u new Selector (proto.getClass (), "heatbugStep", false);4 J' R6 r! f7 Z
actionForEach =5 x& L# c- G& K
modelActions.createFActionForEachHomogeneous$call5 S @% o/ a9 Y$ ~+ H- Y2 [
(heatbugList,6 t8 S: I* e" E! m! @# z
new FCallImpl (this, proto, sel,
, M. \( o+ s6 n" m3 V- V' U new FArgumentsImpl (this, sel)));, \6 q8 A- p8 V, T
} catch (Exception e) {
" g: P6 ]7 Y+ S- N' E" o e.printStackTrace (System.err);2 ]' e5 X& R; [& G7 b
}
5 I# A( J! R% ~& w
) M" _+ j i/ k6 M5 L/ L! W syncUpdateOrder ();
1 L# _5 {9 P+ J D$ k7 C
# Y- N. `9 z- J; U9 d try {+ y- C0 N$ t( T6 l' g, b
modelActions.createActionTo$message 9 J8 }! R/ u2 H5 j2 H0 p
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 e, e9 L+ c d& N& | } catch (Exception e) {! V4 X2 z1 |; P" F% k7 C9 D2 S
System.err.println("Exception updateLattice: " + e.getMessage ());5 x- O3 l) Z6 U- Q% N
}% K. q6 Q, s' B8 Y9 Y
[$ U q9 G" v; f5 u2 O$ i( G9 _5 s- q // Then we create a schedule that executes the
9 m9 l& ]) v! e$ } // modelActions. modelActions is an ActionGroup, by itself it
/ O0 @! g6 v- Q/ Z // has no notion of time. In order to have it executed in9 X& p# H/ |" R5 B) m: n
// time, we create a Schedule that says to use the
" Q8 x: P9 m, F2 z( A; `) {3 L // modelActions ActionGroup at particular times. This3 x6 f: I. ]; f" d
// schedule has a repeat interval of 1, it will loop every/ e: N' w: i/ U+ X) w" I& L5 G$ Z
// time step. The action is executed at time 0 relative to
6 V6 W; `# n$ Z/ e // the beginning of the loop.: U/ r1 T1 \) L
0 V0 X7 ~6 x8 e" g* @ // This is a simple schedule, with only one action that is' v. {8 m* l) N" e1 M- F6 s! e
// just repeated every time. See jmousetrap for more ^% U( i7 Y: J3 D7 D8 Z* p
// complicated schedules.2 U" I. H' M* e L; _9 e! D! X/ Q# r1 J+ \
. K( d7 R/ y, G( W modelSchedule = new ScheduleImpl (getZone (), 1);7 b- G0 M0 ?. Q% p$ _+ Y
modelSchedule.at$createAction (0, modelActions);
T8 x8 Q8 G' M' _" B2 p 6 J$ O8 i T. z6 J# M. h J/ k
return this;
; j" G; w3 e( J: n# [ } |