HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! T+ ?9 B3 w& r. t$ B, D# c$ Q( ~
+ C- P& D) J' i9 a6 O4 o2 v; T
public Object buildActions () {
4 r; H, o9 U# v$ [% h! M$ Q super.buildActions();$ a: H8 [; _' ?! ?( N/ o. U
5 O1 V" v0 r4 E F" J2 z: B // Create the list of simulation actions. We put these in; v* o. o! F) X6 m% [
// an action group, because we want these actions to be
$ I/ A+ K, \" e0 e // executed in a specific order, but these steps should
2 ]' c1 b( V6 o // take no (simulated) time. The M(foo) means "The message( j# ^* [( u1 `0 u
// called <foo>". You can send a message To a particular
/ s# O6 c& l; }) i9 U8 |) @ // object, or ForEach object in a collection.
0 M% j. E o9 J( o6 V
, v" y3 k2 J- a0 u" I/ O // Note we update the heatspace in two phases: first run( _; Q% \: f: x" K& f0 \" M) w8 w
// diffusion, then run "updateWorld" to actually enact the, `( S- d% I% a0 }+ `5 b' O5 T
// changes the heatbugs have made. The ordering here is p6 t- F* {4 N- U: o& B- i
// significant!
7 e6 {3 R# \. ]3 n+ E4 Y9 L
% f* Y* C2 g* ^4 `3 {" {$ K; ? // Note also, that with the additional/ B! W2 W. Z( d/ [
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 Q+ J, y- T0 o/ i* ]: x' s
// randomize the order in which the bugs actually run
+ m3 z( p/ H! \. v* d2 m // their step rule. This has the effect of removing any2 z5 i5 \. W' `7 p/ ^
// systematic bias in the iteration throught the heatbug
5 P9 ^1 U, v! b- {2 \7 E // list from timestep to timestep. x3 n) `1 E0 _
1 F7 n" Q& z* V/ { // By default, all `createActionForEach' modelActions have
9 ]1 o' Q! a- |, w0 l // a default order of `Sequential', which means that the
7 }7 ?9 w, F: j( v* x+ V // order of iteration through the `heatbugList' will be
* V$ W( V, e2 y8 ? q) ] // identical (assuming the list order is not changed
4 [) D$ i j. Y! f$ v; R // indirectly by some other process).4 S$ w& Y8 [& L. c2 n" F8 s' b
5 q ^, U, A9 {: { m) t modelActions = new ActionGroupImpl (getZone ());5 r- U7 @& i7 o
- n/ ^# t) o6 Z/ ?5 G8 H4 X try {( o0 _9 n# l3 b# F9 w2 t! H! F
modelActions.createActionTo$message
8 E' [. N- E9 w (heat, new Selector (heat.getClass (), "stepRule", false));
! N& q- L$ N0 ^; e; i" p } catch (Exception e) {% H- p0 w7 M# Y2 j
System.err.println ("Exception stepRule: " + e.getMessage ());
2 q* c; _9 J/ C }
, J; `7 d& _: n4 O2 ~/ r( ]; ]/ H! j% T; s \+ F! k
try {
1 V3 L1 |" X/ k/ C6 C+ ~3 n4 O Heatbug proto = (Heatbug) heatbugList.get (0);
+ X+ H) O7 v9 f1 T Selector sel = ; q6 g! E/ K; `1 l# |
new Selector (proto.getClass (), "heatbugStep", false);1 d2 s9 p# t7 e. P8 M
actionForEach = z4 o; e$ q5 K' a
modelActions.createFActionForEachHomogeneous$call9 ^3 |2 Z" _% W# V5 P( ~6 o
(heatbugList,
G2 ^3 @$ q2 H0 X* @$ I new FCallImpl (this, proto, sel,& x6 X1 ~5 o& H0 J" Y
new FArgumentsImpl (this, sel)));2 z! M0 I7 u7 k
} catch (Exception e) {- r: a6 w; B& W/ m& ?) ~
e.printStackTrace (System.err);, s$ ~* M- Z, z8 r
}6 _5 `: F/ O* z; r# e* F0 \/ A
0 H. f# B3 t8 K; e$ k4 { syncUpdateOrder ();
2 F8 i4 Z& W& K' G! F3 B
" P+ Y' E+ s2 g' i! N e try {
% I0 ^! G3 H2 m( |, @ modelActions.createActionTo$message / }2 r- |( W$ p4 {, u/ N
(heat, new Selector (heat.getClass (), "updateLattice", false));
- [. X& Z X1 P) i! p } catch (Exception e) {
5 R& ~+ M3 P+ i# r# L System.err.println("Exception updateLattice: " + e.getMessage ());
, e5 v7 O& L" U- k9 `- w }
/ j' C- c4 U2 W8 w: x/ Q& P , j4 p2 V: D9 ~
// Then we create a schedule that executes the
& e% _/ S" a- G( b // modelActions. modelActions is an ActionGroup, by itself it
# A1 Z) n( W; i) v5 F, N6 [ // has no notion of time. In order to have it executed in
* S! D7 Q9 ?' A; y0 E; h' D: s" p // time, we create a Schedule that says to use the
3 z" C: q; h: F& N7 @3 }% o // modelActions ActionGroup at particular times. This
9 s% ]& C) L. X6 {" \* \9 H // schedule has a repeat interval of 1, it will loop every9 _8 ?1 h2 b2 [* I; H
// time step. The action is executed at time 0 relative to
! P) `# o! k! }- F a9 X // the beginning of the loop./ g0 s- I! @# H% }0 s
6 M9 @/ E% k+ ?- ] // This is a simple schedule, with only one action that is
; b3 J5 ~# t, |3 W9 P+ H // just repeated every time. See jmousetrap for more) U4 @, W$ S3 u; s' w' \
// complicated schedules.
2 P( t0 V$ B" h1 a 3 b0 }0 e& r8 [2 f8 j8 X. g
modelSchedule = new ScheduleImpl (getZone (), 1);9 i" x7 t( R+ M# M
modelSchedule.at$createAction (0, modelActions);
7 f; I8 y) Q) b4 ~. J 0 p3 K5 a& e$ d5 ^4 D- b
return this;
7 E( f+ ?8 t% R- P" N: G } |