HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 i. b7 E5 v# X- I" x5 F! z
# O$ V+ u# k" ~6 |' K2 ~ public Object buildActions () {5 @# Z N+ |( S; O
super.buildActions();4 S1 l5 K/ ~, g/ ~2 Y
; R2 O, G8 H1 r // Create the list of simulation actions. We put these in
+ H7 M, \* B; y t4 S" w% D // an action group, because we want these actions to be
- B5 t2 N2 O7 C2 f // executed in a specific order, but these steps should
& ]/ M$ A! [# J8 u // take no (simulated) time. The M(foo) means "The message
7 \: y" h p+ T' _9 \, q: C0 q( Y // called <foo>". You can send a message To a particular
; i% l5 x, |" z( j, t // object, or ForEach object in a collection.
8 u& N/ T* E" a. R5 ]
1 [, a8 M5 k# R: }# `7 a z' g, C // Note we update the heatspace in two phases: first run# _4 A/ x! H$ }- Q1 N' D3 U
// diffusion, then run "updateWorld" to actually enact the4 R- \2 [/ n% K* R* y+ d% B
// changes the heatbugs have made. The ordering here is( ]* p- N: a% u; s+ h: v. i
// significant!, i% S( b- Q1 S: U; t
( q q) { x! N/ o& r
// Note also, that with the additional
. u5 {: x, L- I2 f* m) Z // `randomizeHeatbugUpdateOrder' Boolean flag we can) a5 _( y5 p; @/ w
// randomize the order in which the bugs actually run8 n% l1 Y* R+ `6 l j
// their step rule. This has the effect of removing any/ ^+ m5 P2 L2 e, L D
// systematic bias in the iteration throught the heatbug3 U3 r* u! ^% p6 |$ |! s
// list from timestep to timestep5 Y$ W% Q3 ^+ K& v |7 m8 E. d% x" d
% }0 q6 A6 s, x+ X // By default, all `createActionForEach' modelActions have
" N+ b3 H( i' j* K6 e. T // a default order of `Sequential', which means that the1 a0 j: X2 ~( Z% s6 O
// order of iteration through the `heatbugList' will be9 ?8 W! R9 W h
// identical (assuming the list order is not changed
5 Q2 i. a% U' v2 H: E7 ^ // indirectly by some other process).
( b7 S6 W3 K5 A- f Y7 C1 `- l - {& B4 R0 T" l
modelActions = new ActionGroupImpl (getZone ());+ C6 _ Q- W+ w: R" n/ y9 f
; {+ V7 A" X! Y( ]- W. d! \ try {2 q% z& A5 I' a% O' D5 ~
modelActions.createActionTo$message7 c3 m' O% J/ ~6 l# E: A
(heat, new Selector (heat.getClass (), "stepRule", false));
) O3 M; m# r, o; ]; N } catch (Exception e) {
* V) ^, N6 p# N System.err.println ("Exception stepRule: " + e.getMessage ());( \% B7 u7 x% j' d: c4 K5 S+ @, v
}, ~6 K2 K/ R9 j& A
@. i3 `; f7 N& R8 u
try {9 E2 O" p1 c$ w( O2 S9 i2 {$ Y
Heatbug proto = (Heatbug) heatbugList.get (0);
4 [ B m3 l$ d Selector sel = ! b: B/ {) ^3 H
new Selector (proto.getClass (), "heatbugStep", false);
. I: ^8 X) i5 K9 ?& U& e9 l actionForEach =
! L W5 s$ o6 V& t modelActions.createFActionForEachHomogeneous$call
& c2 F0 s% S" U# l# [* e7 T (heatbugList,: b( G2 p5 T) a9 l6 H; i2 g
new FCallImpl (this, proto, sel,
) u7 d; j$ y$ \ new FArgumentsImpl (this, sel)));6 B- [; |' c6 P/ `, S3 Z1 ^
} catch (Exception e) {" I6 w/ D6 w1 l0 }: r# s
e.printStackTrace (System.err);+ M7 ]( \7 Q, C+ h# m1 a
}* t- P& E$ L% [8 ]8 R& E' {
5 A! p8 m. t/ \1 t9 Q syncUpdateOrder ();) U1 x6 R2 U: N& Z
2 V; ? A) k, i
try {
" C; w: K; Q: t7 P4 Z- [ modelActions.createActionTo$message
' @9 O7 `3 j" s% N# c3 S! k. [$ T (heat, new Selector (heat.getClass (), "updateLattice", false));
1 w" g9 Z' C' R } catch (Exception e) {5 h" u' g9 ]) t8 y4 _8 J
System.err.println("Exception updateLattice: " + e.getMessage ());
5 f( ]; k2 |, H, c+ r }. n1 X2 _* B' m1 @# `! D2 z C9 ?
3 n/ _- e( H8 ~. i3 W6 P5 h
// Then we create a schedule that executes the
# I7 X& v( ?/ U; L5 |1 T% k // modelActions. modelActions is an ActionGroup, by itself it' O5 q$ K0 @, R# v
// has no notion of time. In order to have it executed in2 F7 ~- H& Q/ ? _8 H2 {
// time, we create a Schedule that says to use the
# H8 p1 o& w _! y/ E5 s; j // modelActions ActionGroup at particular times. This( w3 |. f. p0 }& m* I. o
// schedule has a repeat interval of 1, it will loop every% M3 R$ Y2 [/ P2 P2 T
// time step. The action is executed at time 0 relative to
/ ]4 N+ {) I$ d9 U // the beginning of the loop.* S. \/ h9 s# [: w! ^
) C' B( W( i: Z7 _
// This is a simple schedule, with only one action that is
# y: Q: O, ?1 z! i8 z // just repeated every time. See jmousetrap for more; n# d. L6 f# i; l+ w) t
// complicated schedules.
+ p5 f- ~& R8 m! @4 b0 ?
; K+ }+ G1 Z5 k8 M4 _ modelSchedule = new ScheduleImpl (getZone (), 1);4 w3 k. T* Y) y. F9 v, ^" _
modelSchedule.at$createAction (0, modelActions);% `) F# z3 X/ R( Q
; j2 s U% M4 C2 M return this;4 T6 b# u- O% e3 v9 D0 b- |9 k; i
} |