HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. m; F- I2 n+ r' Y) ?% `
* v3 W; M9 g w; L/ H$ z$ j J public Object buildActions () {' X. O( Q- u3 \% C: t! J T
super.buildActions();
+ y! b! f; ?+ w! u; z 1 c1 K& R% U; ]4 l
// Create the list of simulation actions. We put these in
! `# M, R) K, |; w! s% a: W // an action group, because we want these actions to be$ ~0 L& v6 m, A, u) m z. q* H
// executed in a specific order, but these steps should
9 E9 M0 f8 f! | X# ^5 z/ B. _ // take no (simulated) time. The M(foo) means "The message8 s- S% S' U" ~/ t& x u0 w/ t
// called <foo>". You can send a message To a particular
0 x, J% K, u$ Y; a9 K // object, or ForEach object in a collection.
7 o. J1 `! G% i( N, v
) Y3 \( T5 [, o5 G // Note we update the heatspace in two phases: first run
3 ^: Q6 }0 z- n( a7 G7 f; W! j$ x // diffusion, then run "updateWorld" to actually enact the
2 o2 L$ F' S5 y9 `* H // changes the heatbugs have made. The ordering here is
% U4 t/ K. L; y4 s, X! o* c& O // significant!- ~, f* S* {4 U- j# f4 X
9 Q5 m2 W" M& U% @! W // Note also, that with the additional
* H# g6 f8 z; t; Q8 W6 B& H. n // `randomizeHeatbugUpdateOrder' Boolean flag we can" w2 v4 Z2 m( o$ O# X
// randomize the order in which the bugs actually run5 X* A# U' e8 W2 _" e0 e0 V
// their step rule. This has the effect of removing any3 v- D) D+ K, U5 P( Q; {% S( G
// systematic bias in the iteration throught the heatbug
0 z# t5 A0 c% t( ~- e // list from timestep to timestep; b, L6 z0 T3 j' G3 z& _
- A0 z7 B8 w. |0 q T# }% B; I& n
// By default, all `createActionForEach' modelActions have
9 F) ]0 o/ j" d& L& ] // a default order of `Sequential', which means that the6 t4 K5 Z9 u& h) e
// order of iteration through the `heatbugList' will be
/ L1 n6 p: h8 a3 F" C5 g7 J // identical (assuming the list order is not changed9 U: L n% ]0 h: z; t' ?" n3 h
// indirectly by some other process).
? x) {+ y c: C1 T8 I3 k; p
4 e; s) t+ j* w7 T$ W7 ? modelActions = new ActionGroupImpl (getZone ());
, l8 Y; J8 S2 f8 c. u- [9 l0 y$ G# w, `" k( Z1 L: L! _
try {
6 ]4 i/ c: C6 [* k modelActions.createActionTo$message
' f( J6 U6 ]% r1 k9 Y" H& d (heat, new Selector (heat.getClass (), "stepRule", false));
9 `8 o O5 Q& H8 L } catch (Exception e) {
2 m4 N& b* \+ m' K) v% S. M# f& ` System.err.println ("Exception stepRule: " + e.getMessage ());) {) H2 o% F% z" V
}
7 V+ T( E" p; j: E2 P# F7 c* T3 F' n( Q% e# V3 s, F
try {4 p: l' N) S& i3 l2 d+ c/ h, o
Heatbug proto = (Heatbug) heatbugList.get (0);
& u- ^1 F7 x, j& L o Selector sel =
6 U9 [6 N* g5 Q) I- D, Y ` new Selector (proto.getClass (), "heatbugStep", false);
" v7 w! l* ]& f! Z actionForEach =3 A- `. o; V6 b$ q9 F
modelActions.createFActionForEachHomogeneous$call' Q$ C& ^5 n6 q; _
(heatbugList,
9 a& R2 k: O; P, s$ s$ S2 K new FCallImpl (this, proto, sel,4 x& f& ?+ `* ?1 b5 }4 e' o
new FArgumentsImpl (this, sel)));
0 ?7 F0 _9 u7 K9 g) [ } catch (Exception e) {0 u9 r0 u0 d7 j' J6 p
e.printStackTrace (System.err);# h0 k& A% q; W' D( d+ D! a
}! z- S5 c( e% z n* W
, i3 r0 F; {6 }. h% Y
syncUpdateOrder ();
" \- i* G% D$ V5 C; [% Q. c; c9 g0 Q1 X" j, v+ G
try {
; Y; q0 |. }* C b: Y modelActions.createActionTo$message
9 _1 t: d- c, a (heat, new Selector (heat.getClass (), "updateLattice", false));
8 k9 l; i+ T5 m6 \ } catch (Exception e) {" [1 T! |; S+ h4 Q" {, x% L
System.err.println("Exception updateLattice: " + e.getMessage ());0 c0 G2 Y5 ?( s9 }: F) P( _# u: z
}" k O8 q1 q5 F' a
. i7 |4 U3 t* d% f) _+ K1 A% D+ q // Then we create a schedule that executes the, k1 }8 R: H, r' ?$ \) k
// modelActions. modelActions is an ActionGroup, by itself it
) l( L! p! e) K+ c5 E- U // has no notion of time. In order to have it executed in# }* i& `1 Z! o+ d
// time, we create a Schedule that says to use the, N% X) w( _& y# ~5 K+ v( p
// modelActions ActionGroup at particular times. This
. @5 j/ N6 r7 o' Y. s- l // schedule has a repeat interval of 1, it will loop every
9 E0 L3 w: A. a/ J) z // time step. The action is executed at time 0 relative to. v) ~1 k& j% N& r/ d3 p( S3 m
// the beginning of the loop.' Z. J0 Y, _ r9 t5 j( N+ N6 A
& c/ r, j: y) S3 B+ i+ ^
// This is a simple schedule, with only one action that is1 i; J: N8 a* i& ^. G
// just repeated every time. See jmousetrap for more. }& N4 s! L9 h1 V* E% e
// complicated schedules./ o: _6 b2 G5 d7 \( c1 f
3 |0 d k* O; T( H) X3 \
modelSchedule = new ScheduleImpl (getZone (), 1); j+ T+ T$ r8 A& _7 O
modelSchedule.at$createAction (0, modelActions);1 h" a2 ~ @+ X1 k& F# q
/ I$ b8 K( h7 z& R
return this;
6 x8 u8 ?5 w; F$ H2 T7 e } |