HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) A( J, O, W( x+ J
z- @# G; @8 J6 ~. p$ W) X2 G
public Object buildActions () {9 f3 x9 |% _) g7 d( t& p- U
super.buildActions();# U4 B. n" L! @3 ]1 C% C
8 L0 e, d' z$ f1 U // Create the list of simulation actions. We put these in
- {/ U( M" Z# @) L: W0 K+ v // an action group, because we want these actions to be
: S1 V# m6 E3 ~1 {5 Z; T1 v, a" W // executed in a specific order, but these steps should# G! M4 a1 S& y+ W v
// take no (simulated) time. The M(foo) means "The message
9 b9 W1 e' }) F# g // called <foo>". You can send a message To a particular2 O; e9 d, K: Q! \) h
// object, or ForEach object in a collection.
& l. J( y+ u. c2 w( g* I 8 V- U3 }4 z( ` `
// Note we update the heatspace in two phases: first run
, [) `% [" J$ F N) W k+ I$ C // diffusion, then run "updateWorld" to actually enact the
8 s; | c% Z6 S5 ?! ? // changes the heatbugs have made. The ordering here is
) W {& m1 F2 _2 \( ^* Y' f N6 f // significant!
" Q* U5 G+ a2 t( A, s% Z# O
* ]* m; e* v) n8 G: j: D* ]7 ?7 O // Note also, that with the additional0 ]7 X1 r8 y% K5 X% X: Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% ]+ S7 j( i- t& B, K7 v3 d- L: _ v // randomize the order in which the bugs actually run$ n" q+ r4 ]6 h3 L
// their step rule. This has the effect of removing any
, x8 x3 [$ {1 J$ V: `* a$ X // systematic bias in the iteration throught the heatbug8 d! {2 `. U5 z6 K
// list from timestep to timestep. r- P' l Q4 D) m! w' ~: O0 E' z
; A8 v' I' a$ M! B+ P9 x2 O4 f
// By default, all `createActionForEach' modelActions have7 D1 V4 L2 R5 \% s; p8 Y, T# J4 M. \
// a default order of `Sequential', which means that the
9 M! ?7 \: z) M; I8 a" f; B! K // order of iteration through the `heatbugList' will be6 t5 K# x2 u$ N% W5 G
// identical (assuming the list order is not changed
* {4 O. u6 g9 m- k" J, S // indirectly by some other process).
3 g& T6 L: R9 A6 f" D$ t7 m
3 f% B+ N) U/ j! V$ \) e7 v" ]# p! m3 T modelActions = new ActionGroupImpl (getZone ());2 }2 @" ]. t* Z
+ ^1 ?7 J2 R. y/ Q+ O/ g9 x try {* Q5 I- U4 z% O8 D. ]$ W
modelActions.createActionTo$message
q! c% S% n( Y! w& s5 w4 s (heat, new Selector (heat.getClass (), "stepRule", false));: b9 c% n% B2 F" ?# Z N: D" t" K/ R
} catch (Exception e) {
+ `' A6 t) O0 X System.err.println ("Exception stepRule: " + e.getMessage ());% g& m: n) U! e% q+ x/ j
}
4 K, B4 e( C' ?. c+ J, c* D, [
3 e' C( h' a& F2 @- [ try {8 \* a; A7 ~- I* p/ V* L8 c0 R
Heatbug proto = (Heatbug) heatbugList.get (0);; m+ t* m9 l" ~% j) y
Selector sel = & m+ v7 o1 m, E% E+ ?4 G: [" a
new Selector (proto.getClass (), "heatbugStep", false);
9 i) a+ p. O \; W( L actionForEach =$ X7 I9 c" E" c5 Y7 X6 }. y
modelActions.createFActionForEachHomogeneous$call
4 ]7 i; d! ^+ Q* `+ I (heatbugList,' Z: j# D6 u2 @1 `( U% G# b
new FCallImpl (this, proto, sel,, }9 p0 Z/ d( M; ~1 F# C$ D
new FArgumentsImpl (this, sel)));
' r+ h& Y. E v5 s } catch (Exception e) {4 z, l# `# P* R$ V
e.printStackTrace (System.err);
: Z8 n+ B) i0 t1 m9 w% b: n$ E }
5 F2 \" a3 n, `8 o) ]" d! T+ C
. \& M! D# a$ B8 I4 v syncUpdateOrder ();0 ^- o2 D# n. T1 I+ X$ c$ W D# V
) w4 N4 T6 V3 {0 K1 t. j try {8 R: d, V$ N2 t0 d0 J3 ?2 F
modelActions.createActionTo$message A+ H2 g& X! b4 n7 T' s" Y
(heat, new Selector (heat.getClass (), "updateLattice", false));5 a/ M a' T! W) L$ k6 S
} catch (Exception e) {+ o* G- `* w2 f7 t, F: M- A
System.err.println("Exception updateLattice: " + e.getMessage ());6 y& ]9 B- f# L3 D# A' w* m
}7 Q/ O# Z" x; q! s% `
4 r$ O& i, _, ?1 ` // Then we create a schedule that executes the" ^5 h8 p0 n z+ `) \" G
// modelActions. modelActions is an ActionGroup, by itself it6 L8 i5 p4 N2 b! a# U0 E
// has no notion of time. In order to have it executed in
/ k; @& D' ^: [' P- h // time, we create a Schedule that says to use the% h, x3 `3 q+ k+ l, d
// modelActions ActionGroup at particular times. This
+ U! P2 o7 ^, q3 I* ` // schedule has a repeat interval of 1, it will loop every+ B$ A% y8 N" e s
// time step. The action is executed at time 0 relative to* g9 \2 T2 ]$ i8 }. T- D8 ~
// the beginning of the loop.
) f) S% u- _+ G" S4 ]! X: W X+ y3 r" n
// This is a simple schedule, with only one action that is6 v9 K; f- t" K+ u" C: d% L+ r
// just repeated every time. See jmousetrap for more
; C) T& E, w, `, v4 b7 A3 A0 d // complicated schedules.5 |/ W$ d& k% \4 b" i- B
! V# e1 {! t& v0 \3 P0 c& C9 L1 g/ i
modelSchedule = new ScheduleImpl (getZone (), 1);5 I" F+ h2 H) Z3 q+ S- u
modelSchedule.at$createAction (0, modelActions);4 F% K6 k/ o9 ]* t& S
/ I$ t$ f5 e6 h3 y3 f return this;2 h% q: j$ [8 _ v& T. d
} |