HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& o) {9 z" h1 |8 n8 ]
( `' Z% Y3 |; m' q+ ?" R8 }- C public Object buildActions () {
2 s4 `9 J' k) m [4 W1 g6 s super.buildActions();
% {% [0 S8 n- M 4 I$ _ f+ d! w) t4 _+ k
// Create the list of simulation actions. We put these in$ q* j [+ r2 m7 [# c
// an action group, because we want these actions to be' j, g; U: G# I# _7 f& `
// executed in a specific order, but these steps should
6 {+ M) {: Q4 j7 q' E // take no (simulated) time. The M(foo) means "The message
/ z: z/ y9 J' `; }3 _ // called <foo>". You can send a message To a particular
) j2 }7 a3 W* K3 d6 W. W" | // object, or ForEach object in a collection.- y. e, K \% ^' s9 p
1 E, p6 l5 ^- `/ _
// Note we update the heatspace in two phases: first run
( S" ]6 _+ J7 J/ h8 `& q% t+ e# ~ // diffusion, then run "updateWorld" to actually enact the
0 B, m+ F( u' C* s( J, j // changes the heatbugs have made. The ordering here is
; {5 I4 L4 \% q0 i( l2 Z // significant!
5 M9 p* J2 u' D5 u8 O2 l: g
# d# [0 l/ s) y2 Q- y) Q // Note also, that with the additional
( [) h2 L4 w- n6 D8 O // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 a& k A" j+ _& [% \% b) v // randomize the order in which the bugs actually run2 M7 m% m$ T M& a; }1 m8 M
// their step rule. This has the effect of removing any
- i, l7 r& s: s5 I9 \- g // systematic bias in the iteration throught the heatbug0 s! n( z+ y0 V# i( j! U) E9 y" [
// list from timestep to timestep* q5 h( ]0 I% J+ @7 {1 e9 Z" [
. j( G& n1 o8 ?9 ]; G: C: C // By default, all `createActionForEach' modelActions have
" {; R5 k, ?4 B" q // a default order of `Sequential', which means that the
! k! ]8 m, R0 n2 ^' V& [ // order of iteration through the `heatbugList' will be3 `$ Q$ W" n+ u8 q5 l
// identical (assuming the list order is not changed& q& {, C' R# P3 B9 ]
// indirectly by some other process).- g/ B8 o+ _1 F! y* }% D: X
, ~6 F& x4 K/ r8 K0 p modelActions = new ActionGroupImpl (getZone ());
( w0 p- r- F( I; `2 v3 y* z# b( o' R7 w3 V) z
try {. g! r( `. K) ~6 l5 p8 D
modelActions.createActionTo$message' ~ Z" @" s/ Q
(heat, new Selector (heat.getClass (), "stepRule", false));: e: X1 o$ Z9 V1 t: ?
} catch (Exception e) {
7 }/ V" m0 g+ i* y5 o8 Z: A System.err.println ("Exception stepRule: " + e.getMessage ());
1 A. z: Z0 E8 M- W }
; i+ i4 B6 ^, `3 y$ a! k* C7 ~& k- G6 n2 ]- f7 ~* X! E
try {0 ^, |! q1 s% Y
Heatbug proto = (Heatbug) heatbugList.get (0);$ A A" J0 v. H1 S" L
Selector sel = 4 u8 p$ x" n: p5 T |3 H* O$ `
new Selector (proto.getClass (), "heatbugStep", false);
$ E/ W+ T% [5 z* Z# i+ | actionForEach =4 B# `" f+ F& Z: s z0 R
modelActions.createFActionForEachHomogeneous$call& W: m7 X& W3 M, } @7 k, L
(heatbugList,
( g9 F3 P1 d2 h' U" U/ R& j new FCallImpl (this, proto, sel,+ ?* H1 U) `: b. L7 w
new FArgumentsImpl (this, sel)));# Q W! `. t# m" _3 b6 p, j' ^: S
} catch (Exception e) {! L+ m) _7 D0 E* G
e.printStackTrace (System.err);% O- I9 C: p+ P7 E' u- R) t" I
}
$ Y1 d/ L' q7 L% Q# N5 T2 X ; d" [3 V$ z6 d
syncUpdateOrder ();
" L- @7 p% l8 L7 c
) K( W/ v- S$ F% b9 [1 o2 ~2 D: ^ try {
% k" S7 j/ D' I4 @+ m- ?: \ | modelActions.createActionTo$message
9 ~- ^* V# m" h (heat, new Selector (heat.getClass (), "updateLattice", false));
5 p* \1 m5 m1 L2 s# g( \6 z } catch (Exception e) {
: V4 Q+ F% b# Y. M; { System.err.println("Exception updateLattice: " + e.getMessage ());
+ F+ K4 A. z9 @ }# o7 ^ v1 K' A
4 _3 a# z) @3 U2 Z* g+ @ // Then we create a schedule that executes the
# j, M" o% Q. }8 n0 ~$ S( n4 Q% | // modelActions. modelActions is an ActionGroup, by itself it
: y8 D5 O7 I2 ^' O // has no notion of time. In order to have it executed in- [$ p! j" X9 {% V) ^9 O
// time, we create a Schedule that says to use the1 {8 n$ x& N5 p& |5 `* q2 B
// modelActions ActionGroup at particular times. This; A% [. C2 [& Z$ e
// schedule has a repeat interval of 1, it will loop every X4 d e1 E/ Z) ?( O
// time step. The action is executed at time 0 relative to
: s. I7 r# P9 z( W) J // the beginning of the loop.
3 \" E0 V" R$ i: ?1 p9 Z2 i l
2 f5 p B( t% \ // This is a simple schedule, with only one action that is" d" {/ p8 Z) U( A9 X' I' f
// just repeated every time. See jmousetrap for more( m3 J: o* P5 \8 x# v
// complicated schedules.
1 f5 k) X$ }/ x, `) s. n 9 `4 s4 s6 |0 f, P
modelSchedule = new ScheduleImpl (getZone (), 1);
+ y; R) L" b5 I- O modelSchedule.at$createAction (0, modelActions);3 {: ~$ @* Q/ h: ?% C
/ o3 v# K* g) x w1 s
return this;+ o. I9 v1 r: |9 N" c8 ]8 d+ N! d
} |