HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. n3 p, ]/ Z5 x: C7 m+ m* k: T& o) f/ X A0 K9 }. @
public Object buildActions () {% F( d$ e6 f0 M4 w/ N" ?7 E
super.buildActions();
1 d* U: @! D. s" e0 j7 Q
+ M' o+ [! C+ z' g8 M8 }, P // Create the list of simulation actions. We put these in
$ v# Y* O( M. R) v$ A // an action group, because we want these actions to be- N; e0 r% m, e* i
// executed in a specific order, but these steps should
3 O, E) v& v5 ^4 u // take no (simulated) time. The M(foo) means "The message4 P5 E9 L7 s, Z( d3 x
// called <foo>". You can send a message To a particular
- [/ `- W( ~- z/ r* m // object, or ForEach object in a collection.
; ?7 j! }! ]& z. `
& f% g3 Z& V2 f4 ]" e( O4 P+ ] // Note we update the heatspace in two phases: first run
' ?- ?2 Z/ `; Z \4 r \6 n // diffusion, then run "updateWorld" to actually enact the7 J% l F9 y9 p; P" |9 {4 [
// changes the heatbugs have made. The ordering here is
3 R; {" E. | f G, E // significant!
& V1 k7 c* T8 h( C
# \5 y; [0 b8 W: @. H5 J0 o4 _ // Note also, that with the additional8 o) e1 r$ f( {! Z; Z. I
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 J% h( l2 Q/ x0 z- Z8 w
// randomize the order in which the bugs actually run7 S0 s1 i% m7 ~, {+ I& w8 w0 b
// their step rule. This has the effect of removing any
" C; s% h9 m5 F" { // systematic bias in the iteration throught the heatbug
+ M; r7 D4 @+ M2 \* ^ // list from timestep to timestep
9 S* S3 g2 u6 S8 y , r# _" l( w( k! z x3 W
// By default, all `createActionForEach' modelActions have7 p6 @4 q- o0 N0 w
// a default order of `Sequential', which means that the
; W- y$ p8 f6 V+ y# D* j5 P // order of iteration through the `heatbugList' will be
0 ?1 J; C" E+ ~- j+ p- S: ]% p // identical (assuming the list order is not changed
, U& L, h3 v" ^. ~3 { S8 Q* s3 p // indirectly by some other process).7 ^# ^' X+ U# R) n9 K) ?
4 K! x- C6 O4 o$ r modelActions = new ActionGroupImpl (getZone ());
* A9 p) { _3 S* c: M( F
! o# s9 T: A: Q. P* \ try {0 s( Z5 Z) G/ c
modelActions.createActionTo$message1 A0 q% h6 z3 g; C2 d5 k. J
(heat, new Selector (heat.getClass (), "stepRule", false));( t4 g, T- }, Z8 J' ]
} catch (Exception e) {' u4 `$ k9 |6 D
System.err.println ("Exception stepRule: " + e.getMessage ());/ B% q' V* A4 s0 ?( z ^: v
}
- q' A$ E: C* {4 y0 ]
2 }+ S: [8 \4 m) B. T5 a0 I try {/ B5 e4 h) k m S
Heatbug proto = (Heatbug) heatbugList.get (0);9 z2 U% X5 G( @ i/ q" z, q$ d
Selector sel =
3 C1 q' D$ W0 q) q* p: Y O new Selector (proto.getClass (), "heatbugStep", false);7 g* w7 Q6 q' @+ |( K% K" L' ^
actionForEach =
- J4 x" J k F1 h. t! R# b modelActions.createFActionForEachHomogeneous$call( L" t. r a$ k
(heatbugList,, P- \0 a' i. c+ t! @$ k
new FCallImpl (this, proto, sel,
9 s# W& l8 O9 y8 K$ X" U9 t' e new FArgumentsImpl (this, sel)));
" u. r8 C X* O0 E3 r" J } catch (Exception e) {
8 _+ M* d4 @9 F e.printStackTrace (System.err);( h6 E8 R- V( D; |" o; I ^2 k
}$ `: m$ O9 e$ m9 L4 [, n
0 A0 V7 \ w6 O, `4 N" E# r! }+ ? syncUpdateOrder ();: V4 h \* y7 \
8 A N+ y4 J; t) \" L( c. ^+ ?
try {
. I% y& v8 H3 j8 T; q modelActions.createActionTo$message + s1 r! a) ~& P% p$ k7 Q: F2 U, I5 p2 z
(heat, new Selector (heat.getClass (), "updateLattice", false));1 \' K! I; | {5 \" _2 f! s
} catch (Exception e) {
- T' S2 ?" j t6 x; d System.err.println("Exception updateLattice: " + e.getMessage ());/ Y3 m$ K3 x# ~- Q$ @4 q( p: _/ d3 \
}
8 i$ ?& ? g5 x , H+ v. E p7 ^) w2 H% w/ E D
// Then we create a schedule that executes the
K% ~3 E) N% s% l // modelActions. modelActions is an ActionGroup, by itself it
9 M! }0 w0 _* O% {5 J* [2 `( _ // has no notion of time. In order to have it executed in
5 l: E* K0 \3 U: ` // time, we create a Schedule that says to use the
+ c( I- v0 b% \3 S) o0 W$ x* Z // modelActions ActionGroup at particular times. This
) N- r" R2 U' b$ b! @; I$ ? // schedule has a repeat interval of 1, it will loop every
! B2 d$ ?6 t% A; o5 P; L- i // time step. The action is executed at time 0 relative to& G7 o# @* W; A! \- k/ s
// the beginning of the loop.
, R: f9 k9 X3 ~
6 W5 |1 Z, @: M+ \% d // This is a simple schedule, with only one action that is r+ z( }3 g' c E# V+ P2 e
// just repeated every time. See jmousetrap for more
4 J' E2 a4 o/ I" Z // complicated schedules.5 y: i( j. ?9 }# C2 @
/ d3 S* M( H( t; ^
modelSchedule = new ScheduleImpl (getZone (), 1);% T; T6 q, i' u8 p
modelSchedule.at$createAction (0, modelActions);
8 D% u3 M1 }- P ) e, G @8 ]% u0 {+ K" D
return this;! ~7 u+ h# ?5 b1 h3 Z
} |