HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* N# n5 C! Z% S6 `# M) n% R4 {. k. q# y
public Object buildActions () {
% B' f2 r+ `* t Q4 Z+ t super.buildActions();
7 j6 W: h: \5 H1 j, W0 w
7 P% d! o! T1 R; |( F8 ?% u // Create the list of simulation actions. We put these in) c+ b( D9 ]) o% n! I1 d
// an action group, because we want these actions to be' J$ B' Y+ b' _# X2 j) d* q
// executed in a specific order, but these steps should
8 H; z- j# ~/ i* ^0 ^ // take no (simulated) time. The M(foo) means "The message( s$ w5 N* o- q" r: a; H
// called <foo>". You can send a message To a particular
8 L6 |# w2 c) b% q // object, or ForEach object in a collection.4 {- o v3 P7 U& }$ e0 R
) e0 e( b {7 \0 a% C- R$ V7 E r
// Note we update the heatspace in two phases: first run: V. N$ d: ?# Y2 M
// diffusion, then run "updateWorld" to actually enact the
: q4 \( N: t. |# ~! \ // changes the heatbugs have made. The ordering here is4 p8 p& ^% m* |% R$ K" R
// significant!2 N. P) X3 K' e& q7 M9 d
" t* E' C' x1 j1 `8 ?% s' a4 K% E // Note also, that with the additional+ h5 U* F8 ^% y0 h# b
// `randomizeHeatbugUpdateOrder' Boolean flag we can( o w5 F" t: F& B% R/ Q9 J
// randomize the order in which the bugs actually run8 X1 b4 _7 `8 {5 a9 ^0 [; }
// their step rule. This has the effect of removing any
. {& s) x$ e# i) j5 b // systematic bias in the iteration throught the heatbug
5 n+ \7 x; `/ `% e/ h9 d1 g' D // list from timestep to timestep
5 O- }2 Z/ K) n: ^2 C
$ N1 M1 y- a9 X6 C6 h // By default, all `createActionForEach' modelActions have
! r* z2 p4 M9 k' l4 X // a default order of `Sequential', which means that the
7 a' \" {. g' m$ }( S" D // order of iteration through the `heatbugList' will be
: e$ {/ t2 X* C* p* u) y5 \ // identical (assuming the list order is not changed" U- n* q4 _5 X1 C7 `
// indirectly by some other process).
& }2 B1 ` c; s1 v) F: X, T 9 l: f: n1 S3 f# M! n- Y/ C
modelActions = new ActionGroupImpl (getZone ());
1 E n& r) S; n( L! ~4 w$ R! l+ r5 O% \4 T4 z) N
try {
6 ?' m/ |+ |2 _! j( X+ [/ Y4 p modelActions.createActionTo$message
2 ?$ J) _# t r! k. i& X (heat, new Selector (heat.getClass (), "stepRule", false));- K. x" H4 o4 E$ B1 X; r0 n$ U
} catch (Exception e) {
. w" w$ h& W' N- p3 p7 p+ k System.err.println ("Exception stepRule: " + e.getMessage ());- K+ S. M. a# k& F- j: ?) u
}
$ i7 Y% M' {1 X* W9 X
D# o/ R; v; F% O) X: p0 ]- O# z try {
, m8 C8 C }; E) y Heatbug proto = (Heatbug) heatbugList.get (0);
& n0 y: F& E! ?- o' S5 |% P& l Selector sel = `# Q6 n6 a, F# R4 F0 i
new Selector (proto.getClass (), "heatbugStep", false);
# A, Q2 Q3 Y% ~( x actionForEach =
, ?& y; R: W9 S) D9 P6 f/ x9 f, Y @ modelActions.createFActionForEachHomogeneous$call
2 D T- O8 i6 A& T' U# b% x/ P (heatbugList,5 X9 V e- U9 [" R
new FCallImpl (this, proto, sel,
0 _& ]1 F) q2 {, H" f* C6 @ new FArgumentsImpl (this, sel)));
! G% ~$ N# W$ a2 s; m7 p; @3 p } catch (Exception e) {
- C p( v2 z) K e.printStackTrace (System.err);6 J$ ?8 {; k5 J8 h, b' n8 K0 L& V
}
: r, d: K% u" I. O2 q t* s: }8 ]
. d7 D2 j% @, ~( S syncUpdateOrder ();7 ]+ F/ d. B5 T& e* c8 o
. G+ @3 l: j8 E V. O2 l) D6 p
try {; |# L+ A; v$ V% b# M, H
modelActions.createActionTo$message : ?2 M/ z/ P! I+ I/ ^" R
(heat, new Selector (heat.getClass (), "updateLattice", false));
+ @% T$ e% x D J1 j* e } catch (Exception e) {
( w7 E7 Y B) F3 Q System.err.println("Exception updateLattice: " + e.getMessage ());" B2 i' G! U3 p* I0 `- ]1 f7 Q+ d
}
2 Z: ?3 o' S* O( n2 R & r- K; u6 Y4 S/ p% d
// Then we create a schedule that executes the% L* F/ T% Q. m! k/ l
// modelActions. modelActions is an ActionGroup, by itself it2 D4 ?- X) x1 Q+ S1 y
// has no notion of time. In order to have it executed in. N0 ?$ |( o" I
// time, we create a Schedule that says to use the. }8 q. X# f; j6 l6 i( }
// modelActions ActionGroup at particular times. This
. Q9 G* Y- [7 _* o0 z% ^ // schedule has a repeat interval of 1, it will loop every1 i. W2 T, P# {4 |1 g8 e2 y
// time step. The action is executed at time 0 relative to: K) w- b7 L, @! S$ Z% U( T+ U
// the beginning of the loop.
2 i! H) u* l! R) J2 q% [! L0 J, L4 l
// This is a simple schedule, with only one action that is
+ K. o4 A4 Y1 F$ \9 K3 ~& v% f // just repeated every time. See jmousetrap for more
, t, I* C8 x7 @* C$ ~; U7 W // complicated schedules.1 u6 F& F- L: Z" a! r; e
6 o( v+ j- |" a& D- h) J; W5 C3 z modelSchedule = new ScheduleImpl (getZone (), 1);; i) e# v6 w& b
modelSchedule.at$createAction (0, modelActions);/ g; b" R5 S; R# x9 k3 L8 h
7 D$ h1 F3 _% |# O' m% b return this;
" @2 }$ R$ M8 |1 z8 n } |