HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& A& V9 G: Z. Y- s1 O
- u4 k3 l+ e4 N% a5 k4 f' x) X# X, ^ public Object buildActions () { z9 h# `; v5 W: W
super.buildActions(); B# d9 C2 B( C
4 i z4 @3 n: w6 {6 \
// Create the list of simulation actions. We put these in
1 W; \$ p+ V5 _3 ?+ y // an action group, because we want these actions to be
) _( P2 g$ z0 I$ U- q1 N // executed in a specific order, but these steps should! y; \3 q& J5 L/ l
// take no (simulated) time. The M(foo) means "The message
4 x1 G) Q# }' w, r // called <foo>". You can send a message To a particular
, P$ r: _% P) f9 u // object, or ForEach object in a collection.& G" _+ A0 x! r& C" a
' ?" L- m2 ?4 N
// Note we update the heatspace in two phases: first run
. w$ I( j0 a( K% V // diffusion, then run "updateWorld" to actually enact the
3 L% Q" P& m/ j* V" l4 I* w% p: f // changes the heatbugs have made. The ordering here is
3 C# W& c0 Y/ K# [& x5 | // significant!/ t. q& |6 ^6 a( m; s# Z) {
N( \0 [7 k/ L+ q3 e* l; ?
// Note also, that with the additional
% M( g( {# x7 s- d! S // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 }4 J( M3 @# t // randomize the order in which the bugs actually run
- P! N. x7 G/ } // their step rule. This has the effect of removing any$ c' r; u0 Y9 B) Z& o
// systematic bias in the iteration throught the heatbug$ G+ a! W) C- e; l% }
// list from timestep to timestep
- \( o& q2 ~2 B' o1 q
; C. Q! E5 I7 ]* J // By default, all `createActionForEach' modelActions have
/ G. v; g$ J+ B3 _/ \ // a default order of `Sequential', which means that the/ B. \! G' @- d7 C# ]1 Q
// order of iteration through the `heatbugList' will be& m9 I" `7 p/ j& s. O4 ~! n$ k4 A
// identical (assuming the list order is not changed
3 Q2 [( q* t C // indirectly by some other process).. H0 z2 e! |" F' a+ U3 D" {
% C. e2 k6 {1 _5 z* f: E modelActions = new ActionGroupImpl (getZone ());) Q3 \" C( K6 K- g
, D8 g' S0 Y" X* }3 Z: z try {4 A0 C5 U) Q# C( q4 F6 _
modelActions.createActionTo$message
" N/ F: e4 `+ r2 y" q (heat, new Selector (heat.getClass (), "stepRule", false));1 F `- K9 _3 R7 i R
} catch (Exception e) {
! e. W/ v& f' ]7 X% ^ System.err.println ("Exception stepRule: " + e.getMessage ());
2 o8 R, Q `9 B# `. a }
1 O1 ] R7 t9 | c9 U0 l) F( C2 [0 M1 {$ V2 L
try {- p. D! z0 ?) }6 d) { P
Heatbug proto = (Heatbug) heatbugList.get (0);0 p! R: o- I1 Q) i/ w* d) M& _
Selector sel =
# H* d4 C& M7 f new Selector (proto.getClass (), "heatbugStep", false);
+ g7 o+ ?+ p- \! L actionForEach =9 l2 c# I( e. C2 Z
modelActions.createFActionForEachHomogeneous$call
# D7 i8 T3 [" L5 Z, P/ O (heatbugList,
8 n3 ^. J+ e2 ? new FCallImpl (this, proto, sel,. l; ?& L, }5 o- a3 u3 @# e
new FArgumentsImpl (this, sel)));; j. E- F L( R, N$ N' l( W
} catch (Exception e) {+ g% b$ x" i) Y: w# o
e.printStackTrace (System.err);
2 h2 `+ @ y' |2 E4 V1 a }$ ~3 J9 _4 v, H9 r- C
2 h' r0 _! Y4 E& o syncUpdateOrder ();
8 R: e* U' _' Y+ `6 p/ w# |- [0 g* B
try {, H3 w1 m7 `/ [( p, v* K: x
modelActions.createActionTo$message ; A2 R& y, c0 w" ^2 J
(heat, new Selector (heat.getClass (), "updateLattice", false));
" E5 T6 C2 v* S4 @ } catch (Exception e) {
; r5 e! S) z: r- }2 Z. L System.err.println("Exception updateLattice: " + e.getMessage ());5 Y( B, Q. y4 a! d. ?
}. T/ `- H3 F& x5 d( D3 U2 e
" l& \& T2 B4 g J
// Then we create a schedule that executes the
6 K- H- Y$ {) L/ p" [( N // modelActions. modelActions is an ActionGroup, by itself it- N2 }* _1 m% y/ r( {
// has no notion of time. In order to have it executed in; g3 i& `1 @5 r
// time, we create a Schedule that says to use the
$ C( g4 c/ H& h // modelActions ActionGroup at particular times. This/ x& n4 g. l6 \& n9 K
// schedule has a repeat interval of 1, it will loop every/ q( \ Y* N9 K, r0 a$ ^# ^6 B# ~4 G
// time step. The action is executed at time 0 relative to
9 X: j2 J2 ?+ }3 B0 w( j5 V // the beginning of the loop.( {( B5 q% S4 q, { }8 ~$ }9 s6 a% {
: P. i: ], i2 U6 ?! o- }
// This is a simple schedule, with only one action that is
7 |3 G# r7 C9 A4 Q" l% p* X // just repeated every time. See jmousetrap for more+ _! N. f/ k% o( Z8 W( G
// complicated schedules.; w ]0 q' N# c8 h2 H( G( W/ _: D
D* V! _1 b! d4 @2 _ modelSchedule = new ScheduleImpl (getZone (), 1);
; f$ w& M S! S+ C" P1 ]: h* g modelSchedule.at$createAction (0, modelActions);
! S8 p7 z6 q. n5 F; j6 W( [ - s5 T' ~' Z: z" s! n- H1 {4 @
return this;* b- E: [. _) Y8 L
} |