HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- m% F J% L6 X: s1 i; d: n+ [# i- q! Y. A! L6 H
public Object buildActions () {7 a3 u. m: s# \ `
super.buildActions();' i" p. B$ F' X: z; w
. t! W) f+ D- a" ^" W0 B
// Create the list of simulation actions. We put these in& c7 u: @" X) D2 i6 i- g
// an action group, because we want these actions to be& c% _8 S; `) N
// executed in a specific order, but these steps should. b# z; X% t& z# P9 e. N1 p
// take no (simulated) time. The M(foo) means "The message
1 F% U% |" I8 B) P* b: ` // called <foo>". You can send a message To a particular
. z7 O# _9 y( J: m // object, or ForEach object in a collection.
( P7 z, L: _) X$ f/ r' s % l U( d$ t+ v, k9 ~1 W
// Note we update the heatspace in two phases: first run/ {1 x7 N3 u, c4 q$ o! z& \& p8 }
// diffusion, then run "updateWorld" to actually enact the
8 B. _6 h) r" ?4 F+ x) X // changes the heatbugs have made. The ordering here is3 l! s$ q8 f4 q- d) |
// significant!. h! i+ A6 t: r
9 O- j, r$ G, V. p // Note also, that with the additional" b) n9 [6 [5 u, j
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) u1 ^; x& p7 J // randomize the order in which the bugs actually run& O/ C0 L" n" {) a1 ?$ ^- {( c- \
// their step rule. This has the effect of removing any
/ b. {4 C/ x5 _- P! m" E& ]& B' w7 H // systematic bias in the iteration throught the heatbug3 d+ c9 f* G2 f) h/ A1 U
// list from timestep to timestep
! A: a. k+ v: O2 k* F2 l
, z! U# J4 s# g7 p! {3 g8 v // By default, all `createActionForEach' modelActions have
7 }: L- E# G4 L3 N% ? // a default order of `Sequential', which means that the
& A* a5 q) [# m7 L // order of iteration through the `heatbugList' will be
0 N. D! [! D9 p* K3 ^3 M% b* V$ Q // identical (assuming the list order is not changed
+ V9 p) n t1 r @/ W% u' Z // indirectly by some other process).
" R& P% O; f! L. C8 f) Q6 K 3 l: P4 q: b1 @' A" i! u
modelActions = new ActionGroupImpl (getZone ());: c1 C0 C* Q/ f, K) _
' e1 L7 X7 O3 y- p9 u, U
try {" m3 a. p; D$ m/ Q
modelActions.createActionTo$message+ X5 J8 w" |1 g. y4 w/ I6 a* J
(heat, new Selector (heat.getClass (), "stepRule", false));, A3 `9 S/ M3 L/ o: T T) l# O
} catch (Exception e) {8 Z- ]9 Q9 t/ V9 w9 C9 l
System.err.println ("Exception stepRule: " + e.getMessage ());
i( v# y/ H) F7 b% A( ^$ f3 H9 R. W }
% D/ U9 x& _8 T, m% R
, \( g+ D1 V: I0 ~: S" |* Y try {
" N7 u* G& s+ v: {2 G/ H9 o Heatbug proto = (Heatbug) heatbugList.get (0);# z& M( y# d; y
Selector sel =
/ Y# [# E# |% k+ f3 R new Selector (proto.getClass (), "heatbugStep", false);
4 _1 |1 G6 }0 Q% R actionForEach =
) Q$ }2 d' @; X1 }2 _" c3 _7 b modelActions.createFActionForEachHomogeneous$call/ l9 k/ `* s5 m/ Z& x, h
(heatbugList, u: u" [$ M& n' n+ I
new FCallImpl (this, proto, sel,
% G) W; ], p% j" X( f0 Y3 s4 m new FArgumentsImpl (this, sel)));
% M3 [9 P. Z( m. Y( y: e } catch (Exception e) {9 ]. W' t6 l; v$ i+ [
e.printStackTrace (System.err);0 d! q3 n- M0 p( y9 P. ?( p
}$ Y7 C# D7 ?) M7 T2 o
6 ]' g) f# Q! H) e
syncUpdateOrder ();) c+ W2 [' P" x: \- d# p
% d2 Z3 @: ?" p4 Y9 @) P try {% z; e- @ F/ g+ s/ c% i
modelActions.createActionTo$message
2 r- D+ ]) h9 u! U (heat, new Selector (heat.getClass (), "updateLattice", false));
4 t1 g# \# b' h& t( @2 u1 ] } catch (Exception e) {
0 z$ x; |( o6 V/ W0 p k5 d# ] System.err.println("Exception updateLattice: " + e.getMessage ());$ Y2 q6 f, u+ g! K) H4 o
}
0 N4 h3 D4 Z' @9 k ) m7 J7 t( w. g3 |
// Then we create a schedule that executes the
7 [0 t1 ]3 D( c8 q& ] // modelActions. modelActions is an ActionGroup, by itself it
6 s- i$ U0 n! ? // has no notion of time. In order to have it executed in
3 s) J: d" L+ { // time, we create a Schedule that says to use the
$ |- _6 J3 A2 N* d // modelActions ActionGroup at particular times. This% z3 R1 L8 |) k) D, Q# h% L' A9 ?
// schedule has a repeat interval of 1, it will loop every
; y5 Y8 t8 R! O5 q+ V( A$ l1 q // time step. The action is executed at time 0 relative to
1 Y8 j) l, ]5 g; Y: L5 K! \9 s // the beginning of the loop.( h, ~$ x2 [1 E) s5 Q8 q
( f0 h& Z# S! x- @; \6 j* c // This is a simple schedule, with only one action that is
8 E0 C& i; x- ]* q, E8 o // just repeated every time. See jmousetrap for more2 @; M; G( @" R9 K
// complicated schedules.8 u+ Z, T# J/ f0 f) [6 t
8 f8 E/ u& o2 R! G* Q modelSchedule = new ScheduleImpl (getZone (), 1);! g }. }+ T% J% k
modelSchedule.at$createAction (0, modelActions);
, k1 T5 b/ C/ ^% p6 L. h
H% S) l) u. i7 [5 k8 C$ S return this;
( S) X+ @$ J+ g8 Z! j' H } |