HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ w) {8 g+ o2 u7 l' B: V4 W7 n/ U# m7 d# }. k7 Z9 c' v
public Object buildActions () {3 k# Z# D9 R$ t* N. W
super.buildActions();0 {" V/ d7 @: h" z& C0 X# g
, V- C8 ~5 n/ D3 k+ f$ Z // Create the list of simulation actions. We put these in( o) k) A+ [3 ]8 i" {
// an action group, because we want these actions to be) s- {6 }0 V4 }6 ]6 n( n6 e
// executed in a specific order, but these steps should
/ Y/ @7 O6 b! L* | // take no (simulated) time. The M(foo) means "The message9 Y* s! T! ~" i" g4 B
// called <foo>". You can send a message To a particular" S; H. M+ @8 F. B9 A) }- I9 M
// object, or ForEach object in a collection.
7 W) P2 y c# C* K
7 z6 t: a9 e: i; ?3 ? // Note we update the heatspace in two phases: first run
3 O v4 e. D/ {$ z) x // diffusion, then run "updateWorld" to actually enact the9 a# \, f4 F' Y1 L! M
// changes the heatbugs have made. The ordering here is
/ j1 x/ P2 j. L) d: D" ] // significant!
! Q! w" B& T" P# | X+ G
( }2 N1 z6 W; x5 f3 T* Q // Note also, that with the additional
0 J' B$ \( F& j$ C) G! E // `randomizeHeatbugUpdateOrder' Boolean flag we can U8 Q- d. x$ E- S4 o/ l
// randomize the order in which the bugs actually run
7 S4 | C) `1 p; g( [7 g; Q9 ? // their step rule. This has the effect of removing any. I y7 P/ b& \& p6 d
// systematic bias in the iteration throught the heatbug
; |& K* ?# o9 |7 N g% ]) @ // list from timestep to timestep
$ a: n$ F6 h" D
4 G, V6 {& _# K: `+ ` // By default, all `createActionForEach' modelActions have
8 J) ^& S+ \$ {( b2 r% z // a default order of `Sequential', which means that the
9 y2 t' K8 T/ \9 i5 L1 ] // order of iteration through the `heatbugList' will be
3 W: e3 L6 ?9 R" x. G5 T // identical (assuming the list order is not changed8 x) Z- U% X2 ^! m; |( W6 N7 ~
// indirectly by some other process).' H* W3 m2 s( L# R* l E
( m7 g$ ^1 z3 e) c# U modelActions = new ActionGroupImpl (getZone ());
# K* b- j! `3 e0 }! ?! G0 H T% H% i3 p! i( {$ Z
try {
3 t& y/ ]* P1 g8 C8 X- o modelActions.createActionTo$message" _1 H1 L! ~; b: ?. S$ | o! x
(heat, new Selector (heat.getClass (), "stepRule", false));
+ M/ i; x; L0 B) g: N: h; \ } catch (Exception e) {
4 }- t' s0 L+ r" r: G6 T System.err.println ("Exception stepRule: " + e.getMessage ());
" f; X+ L5 g1 P8 ~' t4 z } L$ R. i6 }+ l& N6 h/ ?3 c
" h% |+ `. p% o2 o try {0 j- U- b- n' ? N9 W) Y2 j6 G
Heatbug proto = (Heatbug) heatbugList.get (0);
) Z [( m+ t: y- R- r Selector sel = ; R& n# _8 s- S: A' ^
new Selector (proto.getClass (), "heatbugStep", false);; e/ {" L; |2 B- w- S" w
actionForEach =2 y, s3 |! W8 a: R) n. B
modelActions.createFActionForEachHomogeneous$call
. [9 ?9 K7 m; s" ]3 ] (heatbugList, J1 J: T, K5 ?( P! Y o, n8 R
new FCallImpl (this, proto, sel,
& v# l: A! N( j new FArgumentsImpl (this, sel)));/ i9 |4 x' {7 O( i
} catch (Exception e) {/ d |1 l3 U% }: F4 V. V$ R* S
e.printStackTrace (System.err);
0 F% Q3 Q5 E; S9 J! E6 S }* f" i$ e( q1 |! i, w q0 {
% _. r$ t% b8 h7 N+ I7 |' [
syncUpdateOrder ();
: F9 c# s, H: a$ i
$ s2 ~# M- S1 _ try {
9 {% T) S/ o$ v modelActions.createActionTo$message / ~$ s+ @' R! g7 e
(heat, new Selector (heat.getClass (), "updateLattice", false));( _$ m% ?. n) ?, A
} catch (Exception e) {
- f+ i, C8 O. ?+ V( S System.err.println("Exception updateLattice: " + e.getMessage ());
4 w5 I E) v7 P' H; C+ [ }
) X1 i2 ~" W& T. F: R$ G1 t
3 z7 |0 W0 R5 i+ ?1 Q; c7 y1 x // Then we create a schedule that executes the! C" y- t8 r1 c- y0 a* y+ c; y
// modelActions. modelActions is an ActionGroup, by itself it# I; x, e0 P( U6 A5 l7 T: l( Z
// has no notion of time. In order to have it executed in3 U! i& Y8 G# }) e* _8 d' q- ^
// time, we create a Schedule that says to use the
5 D" R# Q# Y( p" C& d$ x2 x3 `% { // modelActions ActionGroup at particular times. This
9 n) x B' z4 L // schedule has a repeat interval of 1, it will loop every
1 S& t1 o; }4 l( S% [# K2 K' i // time step. The action is executed at time 0 relative to
; Z/ H% [, h* w" [) e) [3 U9 T" H n // the beginning of the loop.
- Z/ Z! I7 o3 x0 c9 u* D
3 e8 m6 T# W: ~+ z // This is a simple schedule, with only one action that is
6 l& M' u4 r! | d% {7 f- h // just repeated every time. See jmousetrap for more" w' I( R5 _/ c z- f+ c: k
// complicated schedules.# Y7 r$ G" ]/ J0 f9 }/ d5 v) N
: }+ X, |( |/ ^$ J. E modelSchedule = new ScheduleImpl (getZone (), 1);7 M$ U2 c" {' ~. D
modelSchedule.at$createAction (0, modelActions);2 F0 j" g/ x; I6 L- n
6 U+ {4 k- x: S+ E& X4 b) v3 `3 g return this;6 V! H$ O# I* \0 `7 ^( b! f3 u
} |