HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) q. h4 ]/ y) B& c& {3 V* z& P! l
( a- @4 ?+ H- \
public Object buildActions () {
; Q% ?# l# d# n3 u- G p# w0 T super.buildActions();0 d o/ s5 y8 P, x# Y+ {
& `- e T& T8 D' i0 X
// Create the list of simulation actions. We put these in
1 e) M! p7 ~& s( ?2 M2 R+ Q c // an action group, because we want these actions to be8 a" n# X7 ^8 g* T
// executed in a specific order, but these steps should) R2 {1 m/ \ {0 n q
// take no (simulated) time. The M(foo) means "The message
! j+ g, a5 k; q' b' e$ u$ e4 c. [ // called <foo>". You can send a message To a particular, O! T+ K% N5 t. m/ y
// object, or ForEach object in a collection.
% d4 r, t+ \3 O1 ]; b, v, \; x1 Z2 O: e$ h
* n7 d* \ u: \& L8 I2 R( b& o1 Z9 t // Note we update the heatspace in two phases: first run( D& \( H, [7 T7 G' x
// diffusion, then run "updateWorld" to actually enact the
4 n; m! y( Q8 Q7 ~! b" e // changes the heatbugs have made. The ordering here is
0 o! V. s5 |" ~4 d2 z // significant!% o, y! D% e8 X
; v. Y8 z1 p% X
// Note also, that with the additional) L- G; ?4 m6 B
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) Y4 K) U3 _9 p/ [3 F! E // randomize the order in which the bugs actually run; O/ v* f# l4 D% w8 @! `! Z
// their step rule. This has the effect of removing any+ o) v5 i4 b& `* U
// systematic bias in the iteration throught the heatbug
" Y' L% G5 E. z D: k; b4 @& r // list from timestep to timestep! r; a, \* r( p1 ]1 [
3 i3 j5 C3 Y' r: @) ?! H+ e // By default, all `createActionForEach' modelActions have2 `) v# \9 ~: ^1 r7 B* Q9 S
// a default order of `Sequential', which means that the# L$ b' H0 L4 `) y ^
// order of iteration through the `heatbugList' will be& V$ U; @. A/ j+ k1 Y% w
// identical (assuming the list order is not changed
; `( Y; v1 `9 T/ G h // indirectly by some other process).
5 ?; t) b* W. m; S ^' v
: d- @. I( @+ b @ y( Q5 @ modelActions = new ActionGroupImpl (getZone ());3 O# e: Q8 t; x8 O1 |- C
# j: |0 k: y' w) B& [7 O, t9 J8 f try {4 I- f( Y9 ~9 G H0 t. g+ f7 c
modelActions.createActionTo$message: v: ^ b- U; e* [6 x
(heat, new Selector (heat.getClass (), "stepRule", false));
7 L/ C' p/ k5 C; e } catch (Exception e) {* I, p* B8 b8 u; X
System.err.println ("Exception stepRule: " + e.getMessage ());
+ V( D& L4 j0 v; f* m% w- V! v' Y }6 v5 o& N: n$ h9 i+ M1 U
1 e% k- E( P4 U5 S% a6 k
try {
( |* P+ I( m- E Heatbug proto = (Heatbug) heatbugList.get (0);3 E" d9 x4 Q$ S+ x9 E! D
Selector sel =
: ?/ J& E+ n8 B- _+ A) q new Selector (proto.getClass (), "heatbugStep", false);
* `, G# |2 d: j8 [, C0 K9 o1 w actionForEach =. z+ _% \7 k2 J z7 O! u: S, m* G
modelActions.createFActionForEachHomogeneous$call5 w# t9 W$ }: ]) l/ A, H2 p
(heatbugList,
9 h7 L$ R, l0 u, a( [ new FCallImpl (this, proto, sel,7 \2 T% b9 Z7 ?/ `
new FArgumentsImpl (this, sel)));) n6 Q2 f/ h/ }: t( i
} catch (Exception e) {" O& K# J" [+ Z: q" k+ Q& E
e.printStackTrace (System.err);
' E8 l! F3 u& X } w" b$ f% X" ~ ~1 e0 Z
# [) ~; l( O6 l6 Z: G1 K syncUpdateOrder ();' P4 J5 ^2 p/ l6 E, Q
( I& N, T# ]. L
try {* }! k. C2 r i
modelActions.createActionTo$message ' j) M" w% J% ~# @- w5 Z: {7 B" T0 S
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 j2 _. ^# ^; F, A9 y } catch (Exception e) {
2 ], j' \; d7 o& _3 K4 s3 u$ k System.err.println("Exception updateLattice: " + e.getMessage ());. R% X* v& G2 O% S
}6 v ^. A+ \/ z' A) A3 X
- s( n' ~# [1 L7 @9 T' G // Then we create a schedule that executes the
. Z+ O( z" n+ [ // modelActions. modelActions is an ActionGroup, by itself it
; h9 M" c% b6 R6 F( X8 l // has no notion of time. In order to have it executed in( v+ p9 r$ n( t+ {" \
// time, we create a Schedule that says to use the
2 H$ U4 r) ^% L // modelActions ActionGroup at particular times. This
4 }' \" U% V5 h" @% F/ G, f // schedule has a repeat interval of 1, it will loop every/ u5 t* n3 Y4 S! i) A8 b
// time step. The action is executed at time 0 relative to2 y, k2 j/ `5 W2 l) @7 U n t# ]
// the beginning of the loop.( o3 h7 N( D1 m2 n2 P3 W7 Q
. G; d" l7 }+ b! n, c; g // This is a simple schedule, with only one action that is4 ^( t: C+ n: V& W: q5 L
// just repeated every time. See jmousetrap for more, o* B. U; X6 G0 [# T3 S
// complicated schedules.0 t2 Y5 h' C* }/ c% a$ ?* O
2 m# _* r( m& t5 X* T
modelSchedule = new ScheduleImpl (getZone (), 1);" G% g5 D- r& w
modelSchedule.at$createAction (0, modelActions);
/ W4 x7 l2 l/ J9 L6 G
1 \/ d) M" P0 s return this;4 O( N: r) x7 F( J% J0 X
} |