HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 k3 e3 M7 m) N) Q. A* [
0 Q; _* t2 e. _6 h6 L public Object buildActions () {
u4 `1 P2 {+ U4 U* I- m super.buildActions();
3 y9 e/ B; s! E. K3 n4 U7 z P- }- G" E3 h- s' S. _) B
// Create the list of simulation actions. We put these in
+ s( s' ]! \! @1 s& h // an action group, because we want these actions to be/ T- y, w: F3 J- m+ Y/ R
// executed in a specific order, but these steps should
2 b/ ~2 D, o. O9 `4 s // take no (simulated) time. The M(foo) means "The message6 i2 s; O' M' w _. K
// called <foo>". You can send a message To a particular) Q( F' n! [4 P" C# Y
// object, or ForEach object in a collection.
! {9 r" ~$ q8 ]! Z
- B4 V |: H& [+ b0 y // Note we update the heatspace in two phases: first run! _- l& U( `+ k/ H- S
// diffusion, then run "updateWorld" to actually enact the
8 |$ ^8 t1 k D% } // changes the heatbugs have made. The ordering here is8 P6 |0 c4 h- J
// significant!
; v' s6 ^* ?7 Z" d5 O- e' ^' M 1 M- [7 r. p4 S) E; T
// Note also, that with the additional @ w* u5 x; H* C1 \4 C% o) J
// `randomizeHeatbugUpdateOrder' Boolean flag we can8 J( d7 t: K5 o9 b7 B
// randomize the order in which the bugs actually run% T; n& F1 ?! \2 E
// their step rule. This has the effect of removing any
6 |# {$ p5 G$ G* q u( T // systematic bias in the iteration throught the heatbug
! P/ R5 @) C9 e, v7 B' } // list from timestep to timestep
/ v* e! A9 B/ I7 a j4 S! X. ?6 o" m) h( U4 o8 \
// By default, all `createActionForEach' modelActions have
6 X2 [' Z8 \4 g: T) f // a default order of `Sequential', which means that the. V9 M' N. k1 a1 d9 i
// order of iteration through the `heatbugList' will be
2 k% t4 @! R! j3 l0 G: }$ }: ~ // identical (assuming the list order is not changed' t- ?4 k4 n, e) h0 B
// indirectly by some other process).
- C$ ]# O9 f: i 9 L$ }9 H' C1 m! ]
modelActions = new ActionGroupImpl (getZone ());9 _% ?6 K6 S0 m7 g) c
1 x% K$ u1 T# ^6 C" B6 ~ try {
( v/ H* @0 X( _ modelActions.createActionTo$message4 p/ M* j3 U3 B( l( @, @, r
(heat, new Selector (heat.getClass (), "stepRule", false));
3 }% P* Z' q) s) X8 c } catch (Exception e) {* k' x1 k' @3 i/ Y( e
System.err.println ("Exception stepRule: " + e.getMessage ());
2 x( l; c8 k' `2 y4 K& g3 t }
$ m/ ]3 t3 {2 k; b0 t/ u) @( j( s: h$ w
try {9 r0 h* `4 l& x/ u- E; ]5 k
Heatbug proto = (Heatbug) heatbugList.get (0);' ^- M0 r9 f4 k/ m" \7 E
Selector sel = . I6 @" j3 |% ~+ Z
new Selector (proto.getClass (), "heatbugStep", false);: x! n8 @1 D( t$ W) S! C
actionForEach =
7 | n- c+ p3 a) f4 U modelActions.createFActionForEachHomogeneous$call
# R9 s9 a( o/ o3 s& l( o (heatbugList,
: ?9 p* K2 e6 ^& } x2 p new FCallImpl (this, proto, sel,
+ Q! N- t2 B* L2 U9 ] new FArgumentsImpl (this, sel)));
% E) J+ W8 l# T$ a4 L } catch (Exception e) {* [+ a( p6 [; w& x2 y+ ?
e.printStackTrace (System.err);
+ Q- ~, B; x" I% A! A' K S }$ p& G7 k; n: ^8 j
, Q; a0 v7 B3 R syncUpdateOrder ();" R4 U- _4 U/ b# j4 A
& i7 Y7 W! w8 R M* y- N try {5 Z, c# [- ~- j- l( G* Z% E0 [: Y- p S
modelActions.createActionTo$message : P% m0 o) a( f: P3 c1 _& Z/ t6 }9 q$ t
(heat, new Selector (heat.getClass (), "updateLattice", false));8 M$ P0 e, Y. i4 p; I0 i6 @3 T; ?, T
} catch (Exception e) {$ {" c) [$ H7 C0 L
System.err.println("Exception updateLattice: " + e.getMessage ());0 u0 q |9 [ ?, m
}
4 m, H5 C3 D, l
2 y. Q* l7 n9 B // Then we create a schedule that executes the
1 [9 k7 v7 @ |1 D* q // modelActions. modelActions is an ActionGroup, by itself it
% f* c- f6 w% p7 | C // has no notion of time. In order to have it executed in; Z9 x% l) V0 c% T
// time, we create a Schedule that says to use the
/ J( j1 k% C& h& h* g6 T% x- P // modelActions ActionGroup at particular times. This
* T( l& @3 ]3 _1 u // schedule has a repeat interval of 1, it will loop every
9 K! c! F5 Q- r9 e, {+ j# g- Q // time step. The action is executed at time 0 relative to
: o5 g- k( G; M // the beginning of the loop.& ]( Q" }+ G6 M! A: r, D) y0 ~" Z
u# X) q! S- \/ c2 j" V% q5 @
// This is a simple schedule, with only one action that is
# ` N( I+ \$ M' Y% K5 G // just repeated every time. See jmousetrap for more
! T3 V* x, T4 G* V // complicated schedules./ }, n7 Y8 Q8 V( j4 z7 e# v6 q
; a5 k6 f* z* y4 r$ v3 E modelSchedule = new ScheduleImpl (getZone (), 1);+ c J3 f/ F: K
modelSchedule.at$createAction (0, modelActions);; W1 s, F* e3 y, u$ V6 s9 \0 Z
6 I9 S4 G4 w$ i: | w
return this;
! z5 S+ g0 s5 H2 g( F" f( c- y } |