HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" l" S6 C0 q- r5 C
& M+ w/ V+ F6 }# b7 G/ W public Object buildActions () {
- k D8 @1 s$ G2 ]# m+ h, { super.buildActions();
- c: u5 Y" r+ k% z
4 o! {( O. O/ D // Create the list of simulation actions. We put these in4 v) P( ?; p, d" _; p) m. |
// an action group, because we want these actions to be
5 \4 j) a3 E H // executed in a specific order, but these steps should7 v) \; V4 e& G( W: ~
// take no (simulated) time. The M(foo) means "The message
A- L" ~- g5 N ^% d2 W' | // called <foo>". You can send a message To a particular
, a$ w m& k6 B; V // object, or ForEach object in a collection., m+ l1 c; l% l/ J/ c% H
g* m0 o1 \& N- U* Q // Note we update the heatspace in two phases: first run# D7 r) K3 u! _
// diffusion, then run "updateWorld" to actually enact the5 j" K8 K- b- S8 s, s6 E
// changes the heatbugs have made. The ordering here is9 c4 @# y! J r* t
// significant!0 V' y8 l+ p. |0 {
3 k1 p9 T8 ?2 S' ]" O6 y" N w // Note also, that with the additional$ I; Q' w* E4 ~, Q# i8 ~
// `randomizeHeatbugUpdateOrder' Boolean flag we can
I* l: P- N9 \6 \( ?) v& { // randomize the order in which the bugs actually run _, A+ q4 e. z% w
// their step rule. This has the effect of removing any
" ~# k' A3 f) p3 k2 C // systematic bias in the iteration throught the heatbug. E& e9 S9 J2 v
// list from timestep to timestep
4 L/ ] S0 T/ a; v3 r3 p8 ] ?
9 N3 u+ H6 {& _" C$ { // By default, all `createActionForEach' modelActions have6 ~( v+ I$ |8 D1 c( U9 |. G G
// a default order of `Sequential', which means that the
* L8 |' U+ |& ?# g8 e$ H$ n // order of iteration through the `heatbugList' will be: v$ G2 f) r1 l* c: s/ _ p$ ^% X5 `
// identical (assuming the list order is not changed
$ p' a# F9 K c6 k1 { // indirectly by some other process).4 N* C) O( h& }6 C7 H% m
0 Z, K5 m" i0 D5 }9 y
modelActions = new ActionGroupImpl (getZone ());
4 [5 F, y5 i- e) X( Y8 O3 S
7 X; d( A+ C' x+ ^ try {
( A4 v7 [2 r$ N* S modelActions.createActionTo$message( i3 I$ N- F6 h% ~* T
(heat, new Selector (heat.getClass (), "stepRule", false));
; e# I. ?5 Q5 h } catch (Exception e) {5 d K0 x5 h5 K
System.err.println ("Exception stepRule: " + e.getMessage ());1 H3 H8 R' h5 f) l( ]
}
0 k& }$ J8 K0 v H( R* d8 ]7 P( a m" m. L) ]1 q P [9 G
try {
+ i( u- K M- Z6 t* k Heatbug proto = (Heatbug) heatbugList.get (0);
& c7 U5 G6 D3 K7 I. c Selector sel = ! v8 W# d, d6 j) t& e
new Selector (proto.getClass (), "heatbugStep", false); G$ R) g4 @/ R+ S! P) L
actionForEach =
& d7 ^1 [# ^4 ~ i. j modelActions.createFActionForEachHomogeneous$call8 |1 |7 `/ v- H) D
(heatbugList,
; q* B& ~" {/ D6 w8 O: x% v' v new FCallImpl (this, proto, sel,
8 T# a1 @( W* Y* N; ?+ ~ new FArgumentsImpl (this, sel)));
( p: p& ^& Y7 O4 k- Y. ? } catch (Exception e) {
+ u* P5 g" L9 c6 _5 r2 R. v e.printStackTrace (System.err);
0 Y! w0 n$ ?6 M6 A g( k+ T+ B }
/ I/ [% N1 g, @ ! s0 \0 c+ @& J' m' `. ?) w
syncUpdateOrder ();
! C5 b3 X% q# O1 e! _0 o1 N. |7 i
6 D" ?% u& |9 _0 L V try {
4 \2 E, C* B! N G" q modelActions.createActionTo$message + l6 w$ d- |( S% _4 M
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 z% v+ |, E+ `* q1 l9 ]6 x } catch (Exception e) {# D3 B2 g ?* @5 \
System.err.println("Exception updateLattice: " + e.getMessage ());& x9 q" X4 z( ?7 r! @
}
- G6 D9 s+ y- I8 _' ~ 0 ^9 \1 V; w9 U$ H& f
// Then we create a schedule that executes the
6 b2 @0 \# ]4 E- |3 U. T // modelActions. modelActions is an ActionGroup, by itself it
3 T5 y M4 V+ c; K2 j; N // has no notion of time. In order to have it executed in \" @! }" P$ v2 R- B
// time, we create a Schedule that says to use the
/ E2 `- F6 m7 ^" w" e4 \9 @9 E // modelActions ActionGroup at particular times. This
# p1 f9 D+ b5 ]2 r6 T! {% X4 p7 @ // schedule has a repeat interval of 1, it will loop every
. `: j; v* H0 ] // time step. The action is executed at time 0 relative to$ d# e+ A9 k$ p
// the beginning of the loop.6 _1 }( k. l! S
5 V+ D" Y! Z' ]8 a, b; D9 J // This is a simple schedule, with only one action that is1 ?/ n5 w& h- A- P! N( W2 g
// just repeated every time. See jmousetrap for more
. O* F5 E, p. Y6 a a& h // complicated schedules.; u4 B5 t, O& Q2 g; {/ a
. M9 ?+ l9 w! I8 l' e
modelSchedule = new ScheduleImpl (getZone (), 1);
# i3 Y# r0 L, @" Q modelSchedule.at$createAction (0, modelActions);
1 J- [4 @2 T! |0 {$ E* K ( w" B( C, E4 }7 q* a0 @# n
return this;& @( t4 `4 Z5 c/ z ^4 o5 J
} |