HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ Q) a2 Y# @ n4 d n7 k( k1 x2 q
0 m8 W7 h h* @2 w/ N- Q1 K public Object buildActions () {0 h" a& b+ M7 E3 V. T r9 w3 e' v
super.buildActions();
1 `1 Y3 v. E2 ?) R7 G/ M6 G " x. i+ z; H& y7 u, o! A
// Create the list of simulation actions. We put these in& ~& b' W6 a1 Q1 ~+ r3 F9 G: Q
// an action group, because we want these actions to be6 q( y; O2 c4 N$ a; ], p% b9 j( s
// executed in a specific order, but these steps should) X+ H6 _+ X! r* ^; p
// take no (simulated) time. The M(foo) means "The message6 l6 r4 {- S9 p; B9 o' C. G6 R
// called <foo>". You can send a message To a particular
# A5 ?/ t- }/ E, F8 ^ // object, or ForEach object in a collection.
+ h! E2 d- ] H& v8 P
& O) {' v/ X/ s9 n8 A& r // Note we update the heatspace in two phases: first run1 _- M& o% G) o/ T k0 n6 v; ?. n
// diffusion, then run "updateWorld" to actually enact the6 P+ a( ^6 R7 I5 T' {7 f; d
// changes the heatbugs have made. The ordering here is. b. u( S G: t8 O* M& W" p
// significant!9 M: J7 C1 E2 A- \
U( n+ Z! n0 X
// Note also, that with the additional, I6 c" k9 {/ a
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 e5 }* ?) m6 _2 E8 k% v$ G1 Y8 z
// randomize the order in which the bugs actually run2 r$ q) a$ w* L( s, K
// their step rule. This has the effect of removing any
# i/ S5 t/ G- G* [ c; \( \ // systematic bias in the iteration throught the heatbug
0 v! x2 a( k4 S- o+ R% k" ]6 G7 ~) ~ // list from timestep to timestep& f+ {' m( d& W- r, J e6 r, I
7 l* v# p% O% k& b0 o( b$ I! W! N // By default, all `createActionForEach' modelActions have
& P' Q4 ~4 q+ M4 N" i! i // a default order of `Sequential', which means that the2 W: ~" Y$ z( U0 B8 K4 H, \
// order of iteration through the `heatbugList' will be* U) r3 s! u4 m- C* P* C
// identical (assuming the list order is not changed: |6 g1 z# L" y0 ~
// indirectly by some other process).! M% ?+ p6 E9 C# R8 C8 Q
* g! ?8 }- A. V2 `
modelActions = new ActionGroupImpl (getZone ());) g8 k/ Y) p& m: E$ S
T& y+ x4 E# ^6 ^8 Y, x9 B try {
( Z$ f. v5 b7 \ modelActions.createActionTo$message% a& ~; j( A- K+ R8 P& @
(heat, new Selector (heat.getClass (), "stepRule", false));
1 O$ e8 i+ @* f; Q9 A7 } } catch (Exception e) {
3 S6 [ i9 U+ g6 e+ {# B4 q System.err.println ("Exception stepRule: " + e.getMessage ());' c4 i) z6 P* q" q- v* A
}
& L! S b# ^/ H, @- ^% o. o- N9 C+ z& C& G9 O+ E1 E8 d/ N
try {
- u( `) [) w B8 c" h( { Heatbug proto = (Heatbug) heatbugList.get (0);
/ [; [/ q. v+ v" `1 @$ D Selector sel = * p- g* L5 a- o7 r' a3 @9 i
new Selector (proto.getClass (), "heatbugStep", false);1 J, H" g5 I0 g: l4 A
actionForEach =$ \% U- T5 D, F& Z+ G
modelActions.createFActionForEachHomogeneous$call+ _/ d5 `3 `3 F% V( C
(heatbugList,
: P$ m7 s- `9 ]/ N new FCallImpl (this, proto, sel,2 h' E0 C8 b8 b: u) a" Y
new FArgumentsImpl (this, sel)));2 q8 v+ O6 g9 T F, j
} catch (Exception e) {& J, N8 W( a7 H6 O/ B/ j
e.printStackTrace (System.err);. c% n |0 M% v5 [
}
( k0 X/ C) d4 E $ Q$ q9 h6 U. T& M' k+ i% G9 Z
syncUpdateOrder (); z6 J! g7 Q! n: z( @
" I B7 Y% D7 U0 Q try {
0 [' g$ u3 {: D9 ^ modelActions.createActionTo$message
4 [9 z% K" O: }" Y (heat, new Selector (heat.getClass (), "updateLattice", false));9 k$ h1 X3 ?8 [! H: G) \
} catch (Exception e) {
6 [! k, X$ v* z& j) A System.err.println("Exception updateLattice: " + e.getMessage ());
& g c, `9 I% K: h! A }9 ?% \9 E* p7 T; \' S
) ~; M$ x1 y& V- [; ~. G // Then we create a schedule that executes the
! I0 ~ \( d- l. X7 g( x // modelActions. modelActions is an ActionGroup, by itself it
1 @( ]3 T( \2 E! U% [ // has no notion of time. In order to have it executed in
X1 H) y) E3 I& ]; V# V // time, we create a Schedule that says to use the6 V# `& A2 @* ^. e( n: n( A
// modelActions ActionGroup at particular times. This
6 e7 _* G0 j6 U5 V // schedule has a repeat interval of 1, it will loop every7 H$ O }( q) ?
// time step. The action is executed at time 0 relative to
; H0 l# W7 w- d" q // the beginning of the loop.
1 m2 K9 O T6 N) q5 x, q, U- n/ ^6 u" I9 \* E
// This is a simple schedule, with only one action that is
6 G) ]( Z. ~$ Q) T // just repeated every time. See jmousetrap for more& V8 N1 K9 h/ s: z$ N W
// complicated schedules.
$ |3 h4 c) \( H- |( }, O! r ; Q. ~0 M# [* D& k* O- m* O R! q
modelSchedule = new ScheduleImpl (getZone (), 1);) _1 |# C9 t8 x$ }. t- H# K8 _
modelSchedule.at$createAction (0, modelActions);- }# f1 }+ b7 u( w# [0 v* s
7 E- i* V: ]9 u) a- p3 n& r return this;- n1 v0 v+ a" k8 j2 b
} |