HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: i* i4 g ^) ~; y4 t/ r
( _' D* d: |# M: q public Object buildActions () { u+ `# E+ Y6 M' u
super.buildActions();3 Z* e4 p6 }* g5 z
2 T- e* B @# @- A2 ~+ L // Create the list of simulation actions. We put these in
" I. Z7 k0 Q d; N // an action group, because we want these actions to be( i$ S/ Q7 U' {9 N: o! W
// executed in a specific order, but these steps should
" k3 g6 t* p" z0 {9 @" B, N4 z // take no (simulated) time. The M(foo) means "The message
; b3 M, e9 M% w ~+ X- V3 H. u // called <foo>". You can send a message To a particular: L0 n5 e0 ~& f0 Z, z0 _% T7 b/ C) [
// object, or ForEach object in a collection.3 R3 H. a2 y# K) B( ?
, p- w* b/ t2 I2 O
// Note we update the heatspace in two phases: first run
7 J* A$ t' ^7 y8 }. e // diffusion, then run "updateWorld" to actually enact the
9 Y Z( F: f2 x // changes the heatbugs have made. The ordering here is
3 i z% C. [$ g5 T! C. t // significant!4 u1 u$ s' c/ W0 B/ f3 x% z
2 y9 e) G! d' k9 E* w+ ~1 s0 ^/ M // Note also, that with the additional A' t* V( G3 I( u
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ c! l. K! K5 J // randomize the order in which the bugs actually run
: o( x; [/ p5 g8 j+ G) h // their step rule. This has the effect of removing any
3 X7 O1 m# E1 z7 o" L0 n // systematic bias in the iteration throught the heatbug: P$ v5 U7 N; B* f& D
// list from timestep to timestep6 i* h7 ^9 c) f, p( j
' |9 T! N* D5 T' \0 A // By default, all `createActionForEach' modelActions have
' T" b. L# ^7 |% X // a default order of `Sequential', which means that the% K; j0 G J S+ j
// order of iteration through the `heatbugList' will be4 i! U8 @6 g& [( t0 c$ E C5 C& L
// identical (assuming the list order is not changed; p0 e5 P9 j! Q" ^
// indirectly by some other process).
/ L% q! i/ R( c7 K; e$ { 6 A0 K: O1 J" ^8 i" m2 F
modelActions = new ActionGroupImpl (getZone ());
: p* p/ B+ r: ?7 x0 b8 X; Z) v' Y. } w: J$ E8 U! @
try {
% ?9 e* l# u; }& d: S1 o3 o modelActions.createActionTo$message
, P1 A9 L2 Q8 l9 _ (heat, new Selector (heat.getClass (), "stepRule", false));
; X. i' ?& w8 O# K6 Q2 w } catch (Exception e) {
; {# E3 g' F6 ? System.err.println ("Exception stepRule: " + e.getMessage ());
2 O7 d# Z- L3 k& @5 Q }6 p: B6 g8 e0 ?- v
9 X3 S R5 S4 ]. d# V# h try {
$ T" F. t; |9 J5 v4 [ Heatbug proto = (Heatbug) heatbugList.get (0);3 y5 G, C7 N8 p" [0 Q( p1 ~
Selector sel =
& X+ u1 L$ B' K/ j. B new Selector (proto.getClass (), "heatbugStep", false);) b/ ?) [; o! m" M1 K. O6 N. P0 ?
actionForEach =9 t0 \8 ^7 s7 O$ h
modelActions.createFActionForEachHomogeneous$call! z6 o, L! x% Y! u, K
(heatbugList,1 d5 N( s; |% D% f# B: U) j, y
new FCallImpl (this, proto, sel,8 Z9 o' v- [" g( a
new FArgumentsImpl (this, sel)));
" R4 \/ `6 d4 G2 |' h } catch (Exception e) {
! ?# @! a! y5 V- }$ w e.printStackTrace (System.err);. P! t0 I) M% Y1 c6 b# W3 q+ b$ l( [
}
J( k4 s7 W8 \ ; j, B) j/ |# `5 K' j
syncUpdateOrder ();
! j8 N0 O8 Q: [ R
5 C6 S- G: G2 |/ l4 |, z, @4 O try {
, `' u! o& v# c3 t modelActions.createActionTo$message
) t5 }; `; W3 T (heat, new Selector (heat.getClass (), "updateLattice", false));3 n1 z7 t u! x
} catch (Exception e) {
! n8 e2 ^9 I4 `. Y* m3 r System.err.println("Exception updateLattice: " + e.getMessage ());
! P, i5 E2 T; \3 @5 p }
9 t, i" F! U8 ~& h4 @4 L
* b: {5 @" d# f; B7 Y* A // Then we create a schedule that executes the
* |* e$ n* b" Z8 q: v H: Z // modelActions. modelActions is an ActionGroup, by itself it
9 G+ ^6 S9 t1 F+ w# i( p5 ]% ]8 J // has no notion of time. In order to have it executed in8 x- b% r. L: l% f$ |
// time, we create a Schedule that says to use the/ P1 L& q1 ?5 F5 _0 [+ M
// modelActions ActionGroup at particular times. This5 b; k9 ?. q2 q: v
// schedule has a repeat interval of 1, it will loop every6 q. L4 P& U5 c, u# {
// time step. The action is executed at time 0 relative to* s# X) e$ G; K9 E/ S
// the beginning of the loop.8 O/ l- S! W& A! E, ?
, H0 U8 l4 N" T% r) C% {
// This is a simple schedule, with only one action that is
) T9 h; x0 e+ d+ Q. r# j' O // just repeated every time. See jmousetrap for more* F% ~: S& H' Y
// complicated schedules.
1 s; s9 W% ?+ N! v/ E0 z7 t 0 i: K& g# a: l5 N
modelSchedule = new ScheduleImpl (getZone (), 1);
! K f0 E& Q# {( p8 a# ?$ ^ modelSchedule.at$createAction (0, modelActions);' D0 f- p2 Z$ i1 I' @; X% G
( ?& K+ t1 C2 U5 Q- }9 z$ n4 a
return this;# T# a& z- m4 W7 y' H
} |