HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ g+ F' p- J! C: `. y
2 f% F+ l; N0 _( e8 L$ p
public Object buildActions () {& ]: ^/ e0 S8 R4 `% w
super.buildActions();: v. A! p! @* q6 m: ^
3 C7 C2 B- R: U" `/ P" M) M3 ?
// Create the list of simulation actions. We put these in
7 q8 Q, K% h4 \8 s0 W: D // an action group, because we want these actions to be
/ l- T+ U6 K' K" H- J // executed in a specific order, but these steps should
, x/ r% K* G% v! e6 a // take no (simulated) time. The M(foo) means "The message, P w, t ^! F( U/ C
// called <foo>". You can send a message To a particular
3 w+ @( Q9 P* _9 X) X- s // object, or ForEach object in a collection.! L9 g# R1 J* m, r t# X7 {
. A* J0 {4 z U // Note we update the heatspace in two phases: first run# j; M/ x6 W- Z( P
// diffusion, then run "updateWorld" to actually enact the
# d5 e' ~: l0 E, o6 f // changes the heatbugs have made. The ordering here is
; W5 I3 ]# S% c8 w# ~9 e- U8 k // significant!& [/ z( X! a/ j/ O J
: S6 {2 ^/ O/ n. [+ s- w
// Note also, that with the additional
; N# l( j; k5 L // `randomizeHeatbugUpdateOrder' Boolean flag we can
# t. ?& h$ j/ W // randomize the order in which the bugs actually run/ O4 t6 S" N" z) O
// their step rule. This has the effect of removing any
& u6 z$ b0 E( y" E ?( W // systematic bias in the iteration throught the heatbug
& x D \5 {( g- q // list from timestep to timestep
( T1 ~' A( A$ y5 h( O/ Z 9 A8 |, B3 t" t
// By default, all `createActionForEach' modelActions have% z1 @$ l. ]) w3 n" V" A, y! s
// a default order of `Sequential', which means that the
* z% s$ J$ k# j // order of iteration through the `heatbugList' will be
! Z$ A$ x* }4 l# Q. K# ^/ W // identical (assuming the list order is not changed
+ J( F9 f1 I2 H$ E6 h6 O/ ^3 H // indirectly by some other process).5 C- P! }; i) g% {& |; ]0 e
4 H7 q/ D, E7 t
modelActions = new ActionGroupImpl (getZone ());0 H6 ]- @- m5 X+ G6 \( \" h0 D: q
( [8 C9 h9 L9 z' }
try {+ m9 W9 E2 s( G7 X" {1 ^5 P6 a
modelActions.createActionTo$message
3 S+ f. `! E z! _$ S$ c m (heat, new Selector (heat.getClass (), "stepRule", false));) f ~/ z# d, ?7 L
} catch (Exception e) {3 l6 b6 z/ J* e3 i
System.err.println ("Exception stepRule: " + e.getMessage ());+ s7 C/ V4 E. j- v
}
& k8 r" T. k9 V9 |0 D- y
1 n& B' r6 A R6 ?6 C' R try {8 c4 \# ^5 u- t( n9 ?* H
Heatbug proto = (Heatbug) heatbugList.get (0);
& Z# q+ |; j& t* A1 v Selector sel = % g/ X+ j. ~! {5 H$ ]' Y% e1 C- y F
new Selector (proto.getClass (), "heatbugStep", false);3 F+ U$ c% ?2 @ k* q% Y
actionForEach =
. s( N! P$ \; R' A7 I! W; c7 q+ E2 |6 n modelActions.createFActionForEachHomogeneous$call, K/ M. }6 x4 _7 |: d+ B9 \
(heatbugList,: S( L& A Q! K/ {# x6 m5 H$ x( z
new FCallImpl (this, proto, sel,
# j2 ]3 U8 i' O) H, }6 B( E new FArgumentsImpl (this, sel)));
4 a% a& ~& H1 P+ }. z+ E% m } catch (Exception e) {
- T* A% w4 Z; B& |5 `6 ^ e.printStackTrace (System.err);5 `& f- J+ t" A( K4 q" N) w
}
) u$ X* H7 i$ T8 e3 c' m & ?/ B: V7 ~" Z
syncUpdateOrder ();
( Q" R( L0 _' L: ]3 k; Y
0 P* [ M& K* \! `1 F try {3 X+ Q' }: E& C/ L1 ^4 _: }$ h
modelActions.createActionTo$message % e5 U* V9 S0 ~9 w3 _( D3 S
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 V- m, Z' z" D$ d+ p } catch (Exception e) {7 I9 Z q* f4 l$ T* g
System.err.println("Exception updateLattice: " + e.getMessage ());
; L% x0 w' `3 i. T }2 i; {' {7 } p4 L
5 K3 p" F/ X( Z! x B- E // Then we create a schedule that executes the/ M- j$ o3 N4 f: K- C2 Q
// modelActions. modelActions is an ActionGroup, by itself it) }9 ?7 L. h" y. H5 G: ?
// has no notion of time. In order to have it executed in
8 _6 B8 L& O K+ M1 h. @/ g2 F9 O( W9 C // time, we create a Schedule that says to use the5 F* d4 S; x0 h# e, ]( h* U3 }' c
// modelActions ActionGroup at particular times. This$ m" y3 F; |; q w' n
// schedule has a repeat interval of 1, it will loop every
% c$ ^) M: h f6 @1 ?( ?4 r9 X1 M t // time step. The action is executed at time 0 relative to& _% c% v0 Z( [9 f5 A
// the beginning of the loop.
) y/ R$ H# F) l, S _; H% E2 r# {& ?2 z+ Z" c
// This is a simple schedule, with only one action that is7 R/ }3 Q, u: L+ U9 P$ Q9 y$ \
// just repeated every time. See jmousetrap for more0 L' r) e+ E% g! ~9 s
// complicated schedules.# Q$ o* \$ D. f: D
+ y3 s$ L6 f' h
modelSchedule = new ScheduleImpl (getZone (), 1);
- s0 Q5 }. X8 H modelSchedule.at$createAction (0, modelActions);. U5 C- ^8 ~. J$ z z. k/ I
/ h7 z% S2 s, H. T( d" ? return this;
- W9 |" v8 ~" f } |