HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" t- u5 u% \. \6 p# A( {
- } B& R B# Y public Object buildActions () {
( ]0 l$ R3 r3 I) O: b super.buildActions();
' q5 S0 C u! }& `
: f2 }" |2 Q4 A8 T // Create the list of simulation actions. We put these in; M) A% |4 k# w3 E& r+ O
// an action group, because we want these actions to be
) M" B6 g$ Q0 E* i8 c // executed in a specific order, but these steps should2 |& J5 V7 L/ h5 K( @
// take no (simulated) time. The M(foo) means "The message7 Z' C8 Y$ G' Y2 ?" \- q: i6 o8 b
// called <foo>". You can send a message To a particular0 ]! V) G# x9 b0 y+ V$ e- A
// object, or ForEach object in a collection.1 v2 c- E5 g8 s
# t/ `# O( L: m9 P
// Note we update the heatspace in two phases: first run! V: g, C6 Q$ q1 u. e; x. H. I
// diffusion, then run "updateWorld" to actually enact the
( F H# m( T. L( ` // changes the heatbugs have made. The ordering here is8 R- A- P3 j) z2 S' R) p8 c* Q
// significant!, A- U/ \ }: ] e1 [2 c( ]' t: z
! @7 T# V# U7 C3 Z1 [6 p
// Note also, that with the additional/ ?, m! F2 a1 m- G M
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 X. W" H0 X# p% O' | // randomize the order in which the bugs actually run5 t- a9 ^& N) Y2 ^1 a/ m% B
// their step rule. This has the effect of removing any9 k9 g' M2 m( K( a
// systematic bias in the iteration throught the heatbug
3 r; x: _; q( T5 n+ A7 } e // list from timestep to timestep$ m5 Z- g( ], j Z, j( X+ i
+ \$ ^( X7 V$ g // By default, all `createActionForEach' modelActions have
5 ~' e5 O3 l$ V4 E8 s* n2 _7 e // a default order of `Sequential', which means that the' P D) @; r, `5 l- f/ ~) G2 G
// order of iteration through the `heatbugList' will be
* _+ k8 ?2 I' a // identical (assuming the list order is not changed
- O; P# S: M: W# T( J // indirectly by some other process).
5 L. T* C9 Y, C' {/ U( `! V . R' T* @9 ?5 x
modelActions = new ActionGroupImpl (getZone ());
4 h9 C) C# w0 H, ~# m) n* [: V$ U! j4 o: S" _/ k
try {
4 I' x+ o9 e5 o F modelActions.createActionTo$message
: t- a( F( ]3 o$ E8 z2 s (heat, new Selector (heat.getClass (), "stepRule", false));; G& @7 |- ]0 E6 e+ W- X
} catch (Exception e) {6 q$ n l( l4 f
System.err.println ("Exception stepRule: " + e.getMessage ());
! o$ G. H' _0 C, V }) V* s: |2 h% K$ d+ i8 ~
! M6 ]; h6 m% L, x try {7 c) C1 n. H% w# n6 d
Heatbug proto = (Heatbug) heatbugList.get (0);
8 v) @) p4 Y3 _# F) U7 t4 z Selector sel = 3 {: A8 J0 H( s6 b
new Selector (proto.getClass (), "heatbugStep", false);& V; W5 e0 X" Y7 D
actionForEach =
3 {2 i" S) ?) e6 l- E0 H& T' f0 X modelActions.createFActionForEachHomogeneous$call
_& M1 [. W! I (heatbugList,. Y8 P' ^; J; s6 M) g
new FCallImpl (this, proto, sel,6 Y2 w5 b: O# }. z* B( D" W9 t
new FArgumentsImpl (this, sel)));
/ P) m2 l! |+ M! `9 L, Z1 R$ G# g } catch (Exception e) {
/ I6 g! U0 ]/ e1 w/ K+ o6 x e.printStackTrace (System.err);" d! ^" M* D% v# ~% P& _
}! N1 ^( i" ~8 ]: r. T% R; b
* }2 Z$ h: g* E5 I
syncUpdateOrder ();: X" {) q4 k/ q9 g! c: {" b
* |( o2 e& |; }' E" v: V3 E, |4 x
try {+ H5 W: @0 N1 U+ c) Q; H. L
modelActions.createActionTo$message
5 G1 {' k/ z* V, w3 G+ g2 X# x5 |3 [ (heat, new Selector (heat.getClass (), "updateLattice", false));
. o- v# h0 n1 y3 m# A* [4 J } catch (Exception e) {
' f% v3 `3 H% P6 a; ?5 m1 k System.err.println("Exception updateLattice: " + e.getMessage ());
2 `. S& |" c$ n7 E w7 ]5 k }- ]) `) g3 }( U( N' ], _' S" l( x
9 n0 `! ^$ K$ b# V% }9 l/ ]
// Then we create a schedule that executes the& d5 p" B3 O% _( q7 C4 \7 F; d
// modelActions. modelActions is an ActionGroup, by itself it) m0 U4 f' J# L1 W5 G
// has no notion of time. In order to have it executed in
/ i! G' A3 z. C, {6 ~ // time, we create a Schedule that says to use the
" e+ B2 e+ L1 n" K# s* p$ o // modelActions ActionGroup at particular times. This: c9 o2 H# ~. @5 F2 L
// schedule has a repeat interval of 1, it will loop every2 p, d* A8 p' O
// time step. The action is executed at time 0 relative to
7 U( s& N/ @" L- |6 s' d) i- B // the beginning of the loop.7 }0 c5 |; A$ _2 l5 z
5 `4 ], k8 O- U5 h
// This is a simple schedule, with only one action that is
( z5 [: Z" r- {8 H$ Y // just repeated every time. See jmousetrap for more
- ~9 r( R6 {& g' L // complicated schedules.
* t; \5 {: q$ Q6 W4 i) I# } 3 _$ W* u! k/ ^& w1 k
modelSchedule = new ScheduleImpl (getZone (), 1);
K) R2 Q0 p' Q& H; ~ `) M modelSchedule.at$createAction (0, modelActions);' D6 s- h$ @% U; R
- }) b8 p; Q( m) G0 O return this;
3 L V/ ~7 Z/ _, T } |