HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% }! J* C! F* P" x ]9 z4 o$ j, ^
( ~# v9 N' i: T: E# D/ I
public Object buildActions () {
- O" u0 ~( g( U* H& h( m v5 F super.buildActions();
- y% G$ |& m) R8 @4 o5 y3 D
1 j9 p6 s+ T! _ // Create the list of simulation actions. We put these in+ f3 z/ l# O$ O& J) J
// an action group, because we want these actions to be: _8 \+ G8 M! T: d r' K# K; {
// executed in a specific order, but these steps should/ }+ p0 m% l1 K, V4 A& A2 o0 y
// take no (simulated) time. The M(foo) means "The message2 k7 T" q# B" q' s6 J
// called <foo>". You can send a message To a particular' m( G9 | Q0 o2 p
// object, or ForEach object in a collection.9 x/ H" t* g3 Y% w" P3 J
( F9 m' q$ N8 A5 Q# L; Z# a
// Note we update the heatspace in two phases: first run) S' J7 H; m' h$ r) T
// diffusion, then run "updateWorld" to actually enact the
4 m7 H7 n, ^$ a; l // changes the heatbugs have made. The ordering here is
) H* K! {" \0 q* G" {* x( S // significant!
b4 [8 {' y% n B+ r; N8 u
" L9 J; u5 I+ r1 }1 I! k$ N, G) \+ [# n // Note also, that with the additional+ e* ?& m2 ^9 i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& ^( K& x5 p9 O ^3 m // randomize the order in which the bugs actually run
; ?' T% \: _+ X$ e. c // their step rule. This has the effect of removing any0 C2 e$ b! @% Y! u' J
// systematic bias in the iteration throught the heatbug9 i0 }' E4 V- h$ x
// list from timestep to timestep7 ?, h3 @4 r& G! n) E s
1 g& u- ~' K' {1 a, \4 w // By default, all `createActionForEach' modelActions have
% ~ f1 Z4 ~6 ]3 [/ c9 Z) p( G // a default order of `Sequential', which means that the
' c% q$ \1 M6 ? // order of iteration through the `heatbugList' will be
$ ]( I' W4 g' z8 u0 h0 s+ Q // identical (assuming the list order is not changed$ K! G1 P. R; z @% Q- [- I
// indirectly by some other process).
( Z: G# { N6 {- Q+ q# b2 i: V
- @( f; X( t) W/ W9 D( X5 y3 o modelActions = new ActionGroupImpl (getZone ());/ Q( L) f+ Q1 ?. h$ W' y$ j
/ x' ^1 O+ b; K0 S7 m$ y try {
4 x! S8 `! z$ G) }- g modelActions.createActionTo$message
9 Y0 B" K' i, m5 h- F, Y- m (heat, new Selector (heat.getClass (), "stepRule", false));/ \0 M' n) C6 q2 `4 `* N
} catch (Exception e) {3 }8 ~1 x7 n( I) ?
System.err.println ("Exception stepRule: " + e.getMessage ());3 h+ p. T5 l4 }; y9 [$ Q
}
" Q) y [! K; m$ K# U1 S' ~
2 ^6 q6 Z1 p3 } try {
8 d+ R# ]1 r4 r) m0 g Heatbug proto = (Heatbug) heatbugList.get (0);; Z3 k2 \% A7 H1 O" y
Selector sel =
$ h1 B9 i2 ^ K new Selector (proto.getClass (), "heatbugStep", false); B( s9 q+ x+ }; y4 J
actionForEach =
$ X: V. k$ \2 J% [+ A modelActions.createFActionForEachHomogeneous$call: e0 w8 s. m7 R2 r, H1 _; d
(heatbugList,, ^5 c2 A4 a( s1 g6 Y6 D
new FCallImpl (this, proto, sel,
+ x& c- U2 Q: l new FArgumentsImpl (this, sel)));) I g" C" j4 l; J: [
} catch (Exception e) {
) l( X+ |, r/ j R9 Q e.printStackTrace (System.err);
# F. H* _: |+ x5 l, Q' m }
, ], u( K1 C2 P! @6 I3 U ' s( A0 K3 G, t( N, f
syncUpdateOrder ();
/ P3 i1 C$ q1 Z0 R% e& m* {
' r" T% y+ P6 f6 P try {
I9 B0 X6 B- v4 J, }$ J: C modelActions.createActionTo$message
" F) q$ v7 w1 e5 ]) u (heat, new Selector (heat.getClass (), "updateLattice", false));6 q7 V0 l- r8 R3 ^- n
} catch (Exception e) {
) f2 ]; @$ o6 `4 n+ k6 B! x0 B System.err.println("Exception updateLattice: " + e.getMessage ());
( O) O6 [; a, y" P0 ]/ z8 [ }
, I. c O9 q. i" @+ L
7 C1 Q; d/ x% W, y; w // Then we create a schedule that executes the
7 ^1 b) ^# v. d! x6 U! G // modelActions. modelActions is an ActionGroup, by itself it
; B& Z# v' X! u' u // has no notion of time. In order to have it executed in
+ _) o4 R% ` {) N. L // time, we create a Schedule that says to use the
- T+ K U! _$ h // modelActions ActionGroup at particular times. This
5 l* O* E* t9 I6 x // schedule has a repeat interval of 1, it will loop every0 @) b( |6 @0 x9 {, m) V& o: q
// time step. The action is executed at time 0 relative to( B! ?4 F* Y$ e5 R/ m7 }- a3 X2 g
// the beginning of the loop.5 x M+ b0 H; l' v, D. K
( c% r' I! X4 k. E // This is a simple schedule, with only one action that is
% q- x$ b. G& h7 M* i4 `9 T // just repeated every time. See jmousetrap for more2 F; z- {6 |& D" o3 q
// complicated schedules.8 C1 |# ]! O% U& L9 ?
2 b6 O# a9 d) U2 C# T1 X
modelSchedule = new ScheduleImpl (getZone (), 1);4 o B8 c" N* X; d: H
modelSchedule.at$createAction (0, modelActions);
. w1 {7 \8 `5 }5 k9 T
6 h8 M! Q ^7 Z4 M return this;0 s1 i3 y, b/ v. n w
} |