HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' X* h/ a/ y& } {! k, M: X+ E7 `" x' ]. R5 F) @
public Object buildActions () {
5 P5 J$ O. ~+ x/ l super.buildActions();2 q' M1 i: y. S; L9 P
' k/ \# |6 L2 v: M' D
// Create the list of simulation actions. We put these in
9 T% j! t/ D+ k1 m$ r& c // an action group, because we want these actions to be
i O0 [+ T: M9 o K // executed in a specific order, but these steps should
; V9 p+ r, ^7 _- J* ` // take no (simulated) time. The M(foo) means "The message# k% K8 f a) `
// called <foo>". You can send a message To a particular
* p) j: }5 a" Y1 l // object, or ForEach object in a collection.
) \0 R8 t0 d) E1 x8 u! I5 z9 }8 z4 y ; d1 ~8 r; ^2 o; M8 } D1 P; j" b
// Note we update the heatspace in two phases: first run) `" T! z5 [) ?- y5 l; Q
// diffusion, then run "updateWorld" to actually enact the
* l0 `( }, k/ H // changes the heatbugs have made. The ordering here is
[$ {! n: z, s6 N7 { // significant!
+ A! o$ i% b2 n0 p3 e$ M4 Y " S3 n$ A" V# D' f7 U6 L1 ^
// Note also, that with the additional- G( T& f; J( f- s( F6 k
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ B0 z/ d: `7 x$ ^9 n // randomize the order in which the bugs actually run
0 N& p$ w$ h& N3 r9 b. ~3 G# M- [3 Z // their step rule. This has the effect of removing any
8 t8 Y" {" A, N( g // systematic bias in the iteration throught the heatbug0 R. x! j* k, F* c) U. y3 G
// list from timestep to timestep
d9 t, D, a7 t5 I% W3 x" c b' k
: m1 z$ K: m$ r7 r; l, P6 C0 h // By default, all `createActionForEach' modelActions have
% h9 o5 H5 e2 ^6 M/ d // a default order of `Sequential', which means that the
1 D1 K { y+ M0 \4 ^9 ~+ | // order of iteration through the `heatbugList' will be
$ m6 d7 I5 R& |' I* ^3 P // identical (assuming the list order is not changed
5 b4 W' o# ^; t1 m4 K // indirectly by some other process).
l( z/ S8 D2 M# L
* b. }% E: M) h, _2 c modelActions = new ActionGroupImpl (getZone ());
; t* X- G. M1 G+ n2 e i2 ~9 h& l
try {; `& j; T- M$ g: B$ k
modelActions.createActionTo$message- Z: K$ l: r8 I5 }
(heat, new Selector (heat.getClass (), "stepRule", false));
' ~1 O/ t$ Q% V% Q- B% b } catch (Exception e) {/ T/ C: M$ H* \( ^: [
System.err.println ("Exception stepRule: " + e.getMessage ());2 v$ K" }9 C6 R1 `% D
}
" u: i/ `3 A; V4 L0 R g1 Z: }8 Y. L3 ^5 w+ N I4 K
try {
' I6 ]- e8 B9 _" Z( x% o. n+ s( ` Heatbug proto = (Heatbug) heatbugList.get (0);: n- a9 Q y' {% K4 I8 L# y
Selector sel = ) z$ E1 l; U D1 h! H! @
new Selector (proto.getClass (), "heatbugStep", false);3 D0 S1 T2 R) R
actionForEach =
! @' j/ |! t/ S modelActions.createFActionForEachHomogeneous$call0 O0 ]% {& \- X! Q0 m+ `& ~
(heatbugList,
# h7 w/ K+ Y# }- Y" X new FCallImpl (this, proto, sel,
7 K* B1 e/ y. k9 P. j new FArgumentsImpl (this, sel)));9 b( [5 H' B. S; O1 v
} catch (Exception e) {7 R! o8 G1 {& A6 E) ?) R6 |
e.printStackTrace (System.err);
3 ~4 [6 z' i' d! ?! y1 u3 z$ X1 y# Q+ ` }% F# T: _7 I5 v
1 i) c8 j7 b7 l y1 [
syncUpdateOrder ();
8 Y, O( u. W+ P5 {4 d, U* O( {" B& B9 N
try {
3 H. d( G+ F( u9 e modelActions.createActionTo$message
5 ]# \1 P9 j; G$ D: u (heat, new Selector (heat.getClass (), "updateLattice", false));
M# ~4 E' I# a. I5 v } catch (Exception e) {$ x1 }; h7 g" z' u) A
System.err.println("Exception updateLattice: " + e.getMessage ());1 v% i+ j6 x, [* j* r/ w
}5 W R8 |6 q5 L* H/ A8 h
. h7 @# _4 c; J; c- l
// Then we create a schedule that executes the- h3 a. p S- T% A
// modelActions. modelActions is an ActionGroup, by itself it( E# H2 A% u" f+ ~+ N
// has no notion of time. In order to have it executed in
X8 P3 ?. L. G2 W // time, we create a Schedule that says to use the
9 @. F, \6 b( H! ] // modelActions ActionGroup at particular times. This* z2 I' U2 ?4 T. {/ U. y+ E
// schedule has a repeat interval of 1, it will loop every8 s& K+ C+ P8 x; O" Y
// time step. The action is executed at time 0 relative to
7 r# i2 L9 D( A. s! W, X% j8 Z+ ^# W // the beginning of the loop.; n( D! J$ V4 _* v P
* ~% r9 Q, N1 z
// This is a simple schedule, with only one action that is
# ^# I- f9 Q/ ~+ T4 ^+ e // just repeated every time. See jmousetrap for more
$ z. }" G. D2 ]0 k6 N1 d4 [ // complicated schedules.) A) V. V( c% u" Q9 }2 l
" s5 O0 I' b6 z: W7 ^! S9 j
modelSchedule = new ScheduleImpl (getZone (), 1);; E1 F# l e2 Q) }3 l
modelSchedule.at$createAction (0, modelActions);# _6 S, g2 J# [8 z' F1 m" x' @
( M( y: Z' ~# S3 W( k) ^8 P return this;9 E4 |$ A2 L6 h# w+ j2 r3 s) Z
} |