HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- n3 W. d' [3 {7 \! V* `
6 l( w. U; _' Y5 \$ y public Object buildActions () {/ E2 i9 D; {9 [( V: I
super.buildActions();" @1 v: D" o- Y5 w5 \5 i1 ]7 u" S
9 s, Z. c% V1 w9 V- \$ f& w. [6 H" G
// Create the list of simulation actions. We put these in
6 I7 ~, B* `& y U S // an action group, because we want these actions to be) q! h. K" ?7 Z( F
// executed in a specific order, but these steps should5 O: e7 C* b2 c2 q" Y( k. ]4 n. N
// take no (simulated) time. The M(foo) means "The message0 h# ~$ Z9 v8 U/ Q
// called <foo>". You can send a message To a particular) l3 H4 _2 q: l+ H+ s* b5 U
// object, or ForEach object in a collection.* d1 l6 E/ V! R9 K* X4 h( I
' G, |/ i5 J) `# {! s // Note we update the heatspace in two phases: first run4 ~2 C6 V7 q0 Q! r7 s- |" ^- d- r
// diffusion, then run "updateWorld" to actually enact the
7 W7 T4 C D' b // changes the heatbugs have made. The ordering here is
7 G; U1 T& o) @: v5 Z // significant!" N/ q; \# f2 m0 E
+ i, Y, K& m* W% }9 H. `! R; t // Note also, that with the additional# j: V* E$ r; w; ]0 Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; O; @/ C" g! N8 }( ^9 ~- N // randomize the order in which the bugs actually run
! r9 V6 [+ h, y* C5 z" Z& p# n // their step rule. This has the effect of removing any
2 D# S" E2 q9 Z* h4 J) K // systematic bias in the iteration throught the heatbug
; v6 `& M# p# l8 o // list from timestep to timestep R9 U* _ ]: R( L
& N9 M( _7 T9 H" o! U
// By default, all `createActionForEach' modelActions have
/ ~, x* O) W1 A // a default order of `Sequential', which means that the
& l" {3 ^7 }+ \* G1 d: X0 ?9 m+ W // order of iteration through the `heatbugList' will be' \/ K' X% M' Y% L% U$ c
// identical (assuming the list order is not changed
, @! k1 y. N# | r // indirectly by some other process).8 v6 B. I8 t2 a; m, e* R- \
: P( S4 a5 {, u6 p( T
modelActions = new ActionGroupImpl (getZone ());
1 k5 U4 ]4 I8 z( n [; B6 U- G* k) G+ k6 @& I8 v' |7 a/ D ~6 j
try {
/ b: P' Q7 T( r modelActions.createActionTo$message
( T; E" g k+ {9 `2 c (heat, new Selector (heat.getClass (), "stepRule", false));
3 v) D5 v& f2 U9 g! a, d0 o } catch (Exception e) {
# O* W! Y0 Z% l* K( p System.err.println ("Exception stepRule: " + e.getMessage ());
- A0 g4 q: N6 C) P" }2 R }
6 F( d3 @9 w$ O) r5 D
7 }+ n0 g( o' z! k' N' i! P. R } try {3 x& A" D) @) x6 @; t" `! X# `
Heatbug proto = (Heatbug) heatbugList.get (0);
* H- z5 b4 X1 ]% T Selector sel =
; X, e6 F: L1 A( @: x9 k1 \% a5 T new Selector (proto.getClass (), "heatbugStep", false);. U, Y0 D, U, ^+ b& ^8 B- M* x- f
actionForEach =
4 u2 f, R2 {3 J1 y. n modelActions.createFActionForEachHomogeneous$call
- c$ V2 s/ r: R% \& m9 L( }2 b (heatbugList,0 T6 I5 H2 e; G: @/ }) E* B
new FCallImpl (this, proto, sel,+ j7 ?- y7 `% ?2 V# _
new FArgumentsImpl (this, sel)));
* W$ B0 I% C, F6 H( X- t } catch (Exception e) {, o. w# T' o. s& ^9 t' V
e.printStackTrace (System.err);
8 M1 u6 \$ E! B0 I$ L2 a }
3 t/ M8 z) E* P$ h
8 Z0 K" a# z1 s) ~( Q; r syncUpdateOrder ();
- n( Z) z6 ?; J) m% |6 X& G
' p7 Z' g0 U+ F& P try {. P7 J0 X4 o! N: D% G5 E {
modelActions.createActionTo$message
+ m b: X+ y$ E5 k. i$ @& p (heat, new Selector (heat.getClass (), "updateLattice", false));
# N8 y8 J' Z7 Y1 w } catch (Exception e) {
1 h; }1 {2 ]! _ System.err.println("Exception updateLattice: " + e.getMessage ());7 h* X; o( S% E: Y! {& T
}7 t' p* K5 e1 R. V6 B" @/ l0 U
/ k) X; w$ b* u0 e- o
// Then we create a schedule that executes the! I+ m. ~' j8 D2 T2 N2 y
// modelActions. modelActions is an ActionGroup, by itself it @3 n2 T- |6 e3 W- j! e u& Q0 ^
// has no notion of time. In order to have it executed in$ q" h* i3 k* b4 y) C! U9 {2 q
// time, we create a Schedule that says to use the
) g1 o5 v( {1 b6 c! O // modelActions ActionGroup at particular times. This
4 v" s; O' u+ Z // schedule has a repeat interval of 1, it will loop every/ S, R6 c7 I1 d) Q% w
// time step. The action is executed at time 0 relative to
9 k1 b. w, v6 P# Z* g; P; I3 k // the beginning of the loop.( o, ~. P) x- D7 s1 _% Y: T
]2 f z) U# j {2 V8 @4 h* a
// This is a simple schedule, with only one action that is
+ @. e! S4 m6 }- I3 X, j // just repeated every time. See jmousetrap for more
8 O c* v% t5 C4 [* P // complicated schedules.
. ?! U2 l- Y# M . j K# }( @2 p3 X, y' |+ }
modelSchedule = new ScheduleImpl (getZone (), 1);) o7 E; f: V$ Z! Q3 d' a
modelSchedule.at$createAction (0, modelActions);
1 m/ t! h6 `. N* m ! J ~, W( V% H' x! q0 m) M
return this;/ u2 j' C1 K6 q6 C o' Z
} |