HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& U6 |% q6 ~1 b
0 M& k$ x# I. Y* b2 n public Object buildActions () {: e6 o' |' _2 s6 v
super.buildActions();6 o! G, l, Z+ } l7 {+ Z
; ^ V! b% P2 y' ~/ d- l% t6 d9 W
// Create the list of simulation actions. We put these in
2 T# {4 P) l& L S |7 J* Q // an action group, because we want these actions to be7 K% \( R; M& A I) A
// executed in a specific order, but these steps should
) N$ i5 ^2 J9 l // take no (simulated) time. The M(foo) means "The message7 w( D- l, W; ^4 h( u9 N! T
// called <foo>". You can send a message To a particular3 ~9 S9 ]2 R# O9 l! J: q2 v
// object, or ForEach object in a collection./ X [+ U7 Z. N! W
* Z- A: [: ^ i! Y // Note we update the heatspace in two phases: first run* w$ K; b5 [& Q; w6 ?) @
// diffusion, then run "updateWorld" to actually enact the
E2 I& n- v3 A: a: G( r // changes the heatbugs have made. The ordering here is
- \' V) N9 q/ N- s8 _+ c# A // significant!6 I R+ Y$ N) Z- N# M
! J( V6 q) v; N& ~0 O' m // Note also, that with the additional9 H& I. J0 ]3 }$ k/ |( a
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# J+ g. o' T ]. q% y+ x* O; x // randomize the order in which the bugs actually run$ \) d5 S( q1 S; w
// their step rule. This has the effect of removing any
' Y/ D) E p/ m5 z // systematic bias in the iteration throught the heatbug% D4 a6 j* Q0 g! q7 k5 L k2 T
// list from timestep to timestep
5 N! H6 K2 L' _ ( j* V& `5 K, m i
// By default, all `createActionForEach' modelActions have. s5 N- Z/ t- f; {' B
// a default order of `Sequential', which means that the* {3 a: H6 }2 b% n8 q
// order of iteration through the `heatbugList' will be0 m0 {5 F. Q9 B& l2 F
// identical (assuming the list order is not changed
|. B5 P' g& X( t4 ], j! f: M, v // indirectly by some other process).
5 _3 Y) w5 ^ z' u) i0 X0 q ' C& o' x/ |& X8 f! f
modelActions = new ActionGroupImpl (getZone ());
, ^3 |' q$ L" k3 i* U. P, r/ k" F8 Z0 ]( \) I* a, C4 r& v
try {
?1 d; j( p5 K modelActions.createActionTo$message
; `8 j/ [. J6 M (heat, new Selector (heat.getClass (), "stepRule", false));, q+ B; w% @ x% R* L
} catch (Exception e) {1 b" D9 H8 [" y- H$ o5 d
System.err.println ("Exception stepRule: " + e.getMessage ());# R! l; Z2 O7 I. @8 _9 v9 S3 A n6 C
}
) O" P7 ?: G% b. b4 Q
# [* |0 U" {! i try {
% w8 v' C4 H7 Q) B% `0 Z+ ]& T% | Heatbug proto = (Heatbug) heatbugList.get (0);
+ s& O7 @+ G7 v: g! A Selector sel = 6 U8 O& b- j5 L! K6 T% ^! W
new Selector (proto.getClass (), "heatbugStep", false);
# z" K& `- R4 i4 I( x. A: s7 Y actionForEach =! _1 D5 s+ B! O7 U) f$ w. J B
modelActions.createFActionForEachHomogeneous$call
1 r% m/ n3 a$ w' D& E9 B (heatbugList,
$ f, V' ?- s/ y2 L2 [ new FCallImpl (this, proto, sel,: q9 [8 s! T% z& f s9 j) X
new FArgumentsImpl (this, sel)));
3 G3 z/ I- l- V: W$ i8 l8 X } catch (Exception e) {
# x; P" P% S- ^) h5 O3 h* N/ }( N e.printStackTrace (System.err);
. [, {* R. ] J0 ` V }
! q* e0 M" i+ {. p9 @/ }
; y0 {8 k4 v: H: F syncUpdateOrder ();
. k6 K5 b7 @7 Q0 f( Q, P' W% T
& z x( y6 Z5 a9 K, x try {
4 z! m2 ^! H, t modelActions.createActionTo$message * w1 Y- n5 J. H$ O1 C. D- |! b
(heat, new Selector (heat.getClass (), "updateLattice", false));
& n0 I* T/ w# Z: [8 F" ^ } catch (Exception e) {
8 `& A( j6 y2 f5 a' r System.err.println("Exception updateLattice: " + e.getMessage ());) v( ~' y" t* y! W# n3 o
}
0 b% R: ^3 ^: X/ e& {2 W # B3 y, c8 U+ \$ M! N8 R
// Then we create a schedule that executes the
% y) }+ c: R% ^0 x) V // modelActions. modelActions is an ActionGroup, by itself it+ r0 Y' X% e& [1 |: k
// has no notion of time. In order to have it executed in+ l5 G/ K: u2 w- ?, H7 Q+ @' ~7 z; ]
// time, we create a Schedule that says to use the" ?: h5 B+ m* ~* i
// modelActions ActionGroup at particular times. This" }2 @3 O# Q+ @. T2 {8 \- f
// schedule has a repeat interval of 1, it will loop every
5 ?: A0 v, [' @ G; m$ f$ N7 N4 k // time step. The action is executed at time 0 relative to3 u* B- X+ n* R: m9 D y! Z- h
// the beginning of the loop.! d" P. C' z: N8 J: C$ x
6 A$ d6 f% f- L3 ^. y& K" ]0 m // This is a simple schedule, with only one action that is$ }4 k! ~2 I7 D6 p6 i3 e
// just repeated every time. See jmousetrap for more# \! P; ?; R$ M/ N+ B; L7 M B- y
// complicated schedules. v7 M T V1 e9 i
+ C' z2 {' S: D0 L1 Z1 ] u+ j' d modelSchedule = new ScheduleImpl (getZone (), 1);; p* a. W# l* g$ T! u
modelSchedule.at$createAction (0, modelActions);
- [* ?, h* s2 |& x( R8 u 5 X$ O$ {; h1 K: f1 ~7 F
return this;' @( l' J2 ~5 c+ G2 n5 U( B# I
} |