HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 c# _, d `# e4 S
( M3 p0 Y0 r- e. B0 G9 K0 G+ H public Object buildActions () {
$ K7 }0 [7 {* D) S5 @( B5 | super.buildActions();6 t1 K' b0 W8 W, U0 r. m: v
" |" c& y; K% t* f // Create the list of simulation actions. We put these in( M0 M* N+ x* T' F) [9 W! x" d8 ?
// an action group, because we want these actions to be, Q3 S3 x% ?4 c1 i: Y3 l
// executed in a specific order, but these steps should, F1 F. ^) b* X* u& g3 w- N
// take no (simulated) time. The M(foo) means "The message
! g4 F9 ?$ F$ ^$ c+ L7 e! _# ]7 N0 V // called <foo>". You can send a message To a particular
% f4 b3 s S1 Z1 c+ M j // object, or ForEach object in a collection.$ ]. W$ j0 t) A2 E! S5 D& ]
0 A; g# t$ B4 y- n1 o) B
// Note we update the heatspace in two phases: first run
5 g+ a* s) Z) K" ?* p // diffusion, then run "updateWorld" to actually enact the
1 o4 ? F3 g" C' Y9 D! a // changes the heatbugs have made. The ordering here is3 V0 B* Q) u/ b& A
// significant!
/ R3 @ [$ q6 E: A7 u6 z 1 H9 s6 B) J0 }& x' I
// Note also, that with the additional6 R5 ?* S- V8 ]* E
// `randomizeHeatbugUpdateOrder' Boolean flag we can9 p# I) a: R2 M
// randomize the order in which the bugs actually run
) a: w+ x& Z, c# {" J* b5 \* n" Z // their step rule. This has the effect of removing any
/ Z# a: q7 m1 Q7 e // systematic bias in the iteration throught the heatbug& M W4 ~1 i' \* s/ P5 S
// list from timestep to timestep
i- W; Z& P- s) P: U+ | 4 I5 w" {& J( P- @* [* W0 C
// By default, all `createActionForEach' modelActions have
. }8 X% V6 N1 j2 |& n$ ` // a default order of `Sequential', which means that the' i2 I1 |0 t- b) n6 M1 @9 [- {
// order of iteration through the `heatbugList' will be& h. q$ v) z: n* q# T. x8 W
// identical (assuming the list order is not changed L2 v7 ^. n' }9 `; H$ t/ z
// indirectly by some other process).3 t' S; x# a. P+ E, c+ r/ e
" K3 }" M% R1 |7 C7 C' M, H modelActions = new ActionGroupImpl (getZone ());' F0 ?9 `6 P/ `. j# h+ w6 w
: N1 A+ {& E3 S- L try {! f. j& s) x" r1 C* G- l0 g# Z
modelActions.createActionTo$message
1 S0 r/ }$ o v$ i- I9 p( [ (heat, new Selector (heat.getClass (), "stepRule", false));7 p3 A, a) \. |# k' H
} catch (Exception e) {9 Y( o, R3 J& M
System.err.println ("Exception stepRule: " + e.getMessage ());# L6 r* d, b/ R( D9 \# x' d- o
}
. [% D K, E- |; I) A
* N: V7 G# Q, W3 x, K try {
C0 B$ n, F* z4 T l0 E, u7 K Heatbug proto = (Heatbug) heatbugList.get (0);6 O# X3 f" ]6 j; c9 j
Selector sel =
% S+ [* @8 l+ c. \$ @9 k0 b new Selector (proto.getClass (), "heatbugStep", false);* V8 b+ E2 `; Y) I3 V
actionForEach = h0 V0 q9 g9 I: N3 J0 w
modelActions.createFActionForEachHomogeneous$call6 \1 ~" r* [7 q. C3 S
(heatbugList,
3 r# H! T+ B9 h% x3 x, s( q new FCallImpl (this, proto, sel,
( T H: z( d" `2 d new FArgumentsImpl (this, sel)));7 G5 n% Z3 }* a% n8 {9 A
} catch (Exception e) {
$ b) G* Q1 D1 E! A6 c+ k4 @" E1 r e.printStackTrace (System.err);* l" m" `7 q$ x( L( e% g
}, K S9 b* c5 {
! K8 F+ n- D" W% }1 B, Y syncUpdateOrder ();
. j+ v) f7 @5 @* t* X& m4 p* W. H. e# Y! k# u
try {/ F" J7 R, i6 x* c( K
modelActions.createActionTo$message
& ^& h1 d8 \# c- U (heat, new Selector (heat.getClass (), "updateLattice", false));
; N/ c: W7 s) p } catch (Exception e) {
& z2 A- q( r- F% q4 I System.err.println("Exception updateLattice: " + e.getMessage ());
4 o3 k I# t0 _( u C% u }% A, t% j) k3 r% i4 V0 ]
: i4 n( H5 F1 L: C8 _2 x
// Then we create a schedule that executes the8 g- K# D3 A$ Y& d$ O' ?2 }
// modelActions. modelActions is an ActionGroup, by itself it
6 L5 i! W; J: q* L- R // has no notion of time. In order to have it executed in2 D3 h5 T. t7 w# B# V7 ?
// time, we create a Schedule that says to use the0 M& V& s' M7 y& o
// modelActions ActionGroup at particular times. This0 F3 \5 L8 h, W+ C
// schedule has a repeat interval of 1, it will loop every
8 h& {! E$ I$ ?5 X* f( Y' e // time step. The action is executed at time 0 relative to% Q2 A% H) o) b0 L: z* Q. ]
// the beginning of the loop.
- M: j' z' M( n& I8 l( N8 Z; \* x5 L* ?3 N/ n1 o
// This is a simple schedule, with only one action that is
6 ~9 o. S5 v( Z' A0 H( Y: X // just repeated every time. See jmousetrap for more& M: _6 D8 Z" F" k$ r2 \
// complicated schedules.0 d' G, S8 f+ H5 P. ]- c; |
( G) s; R S& a# w4 ~1 |
modelSchedule = new ScheduleImpl (getZone (), 1);0 e3 o V, E; M; T: X% m9 t
modelSchedule.at$createAction (0, modelActions);
, o0 l6 G! K; J 9 | ~. G; l7 C
return this;
- k* y/ }/ f. O$ p7 H) `9 j } |