HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 z; h/ Q# \$ t/ G& i+ T* t
+ R% Y: l6 b+ J3 N
public Object buildActions () {5 Q# B4 T, a" j- P- o y
super.buildActions();
' C0 I/ v5 l* v% _; |- g( R, Z
3 e6 r: A: d% B: [, E" m6 A // Create the list of simulation actions. We put these in
8 K9 o% l$ [$ Q: r: Z // an action group, because we want these actions to be* p) D0 t. \5 ?1 N, s$ n
// executed in a specific order, but these steps should! E4 M* q) o6 l. ^2 j; h7 Z" I7 A" h3 j
// take no (simulated) time. The M(foo) means "The message
% ?5 S$ b- N2 D // called <foo>". You can send a message To a particular
5 d) G# p, q: y% T // object, or ForEach object in a collection.3 m0 R& P. F" _; I# E
* N" d. h7 @. W- I5 z
// Note we update the heatspace in two phases: first run( ]7 d4 V2 O8 n r% {9 d0 U3 y
// diffusion, then run "updateWorld" to actually enact the
8 m$ e7 Q7 c9 c( ^# x // changes the heatbugs have made. The ordering here is
" ?6 V8 _( h: Z0 P // significant!5 W- [- u# ?2 P
. _9 [3 _" B( x! y% @. u2 y
// Note also, that with the additional' ~# C- r, v4 U! K! y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 O4 c& \. v( n' k* Z: I // randomize the order in which the bugs actually run
0 z5 e. D* [9 w! Q9 [3 y# {" F // their step rule. This has the effect of removing any x _% ~8 ]( r) C- L
// systematic bias in the iteration throught the heatbug) Y& C. d t T1 S
// list from timestep to timestep
, ~( s# o' g! b/ \5 B6 a1 a% A
+ H8 ^9 Y/ q* F; p // By default, all `createActionForEach' modelActions have2 k, B# c7 q9 ]" t" o
// a default order of `Sequential', which means that the
7 \/ K5 p1 v+ H/ b% X // order of iteration through the `heatbugList' will be
" `( I1 K/ N) c( r // identical (assuming the list order is not changed
, X5 G" ^/ y5 ^ // indirectly by some other process).
$ ~/ q1 O; ?2 O$ T ' `) ]2 F2 J3 B! j% Y
modelActions = new ActionGroupImpl (getZone ());( I# U5 g) W4 n h# ~" h
! ?' Q( Y ~/ I1 V- H try {
$ d6 S) s! L. ~* v2 C modelActions.createActionTo$message
, S, L& S; y# H6 ]$ Q5 \; C (heat, new Selector (heat.getClass (), "stepRule", false));
, B. G; ]3 c7 S% A+ U) ^ } catch (Exception e) {
; ?$ X- j- R( g" S( x4 f System.err.println ("Exception stepRule: " + e.getMessage ());1 s' R: l& Q4 N2 [( j8 `+ p8 i4 U
} O) O$ M: ? W# D) S: A
$ I' K) W! A3 J/ {: P/ o try {
, x& s5 m- [6 K Heatbug proto = (Heatbug) heatbugList.get (0);0 V( B4 N, d- e& o
Selector sel = 4 x9 d% y4 E/ [, b8 E8 _+ l
new Selector (proto.getClass (), "heatbugStep", false);
5 J* J2 l7 m* |: }8 ` actionForEach =
/ a4 m* m/ c1 i7 ~ modelActions.createFActionForEachHomogeneous$call
1 z* J+ r+ B& A3 p6 Q; p# I ?- r (heatbugList,6 s- [& q2 D5 U
new FCallImpl (this, proto, sel,4 A- y) S" Y6 d0 D
new FArgumentsImpl (this, sel)));) q! Q, X% y7 z+ b4 [
} catch (Exception e) {# g& x$ U, U. ?% k
e.printStackTrace (System.err);6 @$ ]( X8 Z/ d% F1 M/ i
} S6 t$ ], h4 r$ m7 j9 Y/ h, a1 f
+ O8 {" F* M* i& l; k( J% o syncUpdateOrder ();& R* _' d8 Q }# d) V: [) \
; ~! \! U; y8 \1 @( h try {
0 Q! @( \* x; T( t modelActions.createActionTo$message ! ^% G0 l& K# Y, w( v; B
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ f' B+ j; O: k j1 G } catch (Exception e) {
( U: Z# Y0 y! A1 r+ L& j3 D System.err.println("Exception updateLattice: " + e.getMessage ());0 r# J7 X* b5 X; W; [3 P+ W' ~9 T) E- o
}
" o7 {( w3 a& D: b2 K
5 L1 t5 O1 ^8 @6 d: T/ F // Then we create a schedule that executes the; T/ f K! m! [3 J5 ]4 h
// modelActions. modelActions is an ActionGroup, by itself it! {9 X; F6 U0 C# y+ C+ t1 G
// has no notion of time. In order to have it executed in+ v+ f! J, Z4 R6 O6 y$ y2 z
// time, we create a Schedule that says to use the
0 M H! R" |/ R" M // modelActions ActionGroup at particular times. This! e3 |8 k! A. D3 c
// schedule has a repeat interval of 1, it will loop every- e. L" p: F- B0 S4 ]
// time step. The action is executed at time 0 relative to- B, Q1 k- h. K' C/ O+ M
// the beginning of the loop.% [. H8 z8 ], h z, L7 |+ ~
7 d# x5 N$ v5 h4 ]) Q // This is a simple schedule, with only one action that is
! G9 Z4 h3 X% y% H( w // just repeated every time. See jmousetrap for more! T2 c7 B0 @7 m' h. P
// complicated schedules.; S2 c5 ^. ~; ]& u. u3 @8 l
! x8 b; V* }: H) ?1 l9 s" k modelSchedule = new ScheduleImpl (getZone (), 1);
0 K2 o! [& C. ]# O! y5 }- ~( U& w modelSchedule.at$createAction (0, modelActions);0 X( M' B6 |8 I7 G
A8 L8 P4 H5 r U
return this;% ]6 \2 b3 x& A( A2 x/ s J o2 }
} |