HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 j- D( S* ]1 u9 O0 g. Z, G3 L8 m0 y) Y; i
public Object buildActions () {7 z" O! h; A6 E1 K/ U: V
super.buildActions();& b( @& C5 X' Y
4 F& m6 [0 ^) g3 Q7 V
// Create the list of simulation actions. We put these in1 M* D+ x0 I% v& q
// an action group, because we want these actions to be
8 h8 {9 J6 \" Z$ H0 } // executed in a specific order, but these steps should+ l/ f( \+ b1 c$ f3 q8 C
// take no (simulated) time. The M(foo) means "The message; o: d. k' A) K
// called <foo>". You can send a message To a particular7 j: v3 o9 E! M0 M. f) \, ]
// object, or ForEach object in a collection.
* b+ Y2 l1 S. S( O$ I% \+ j
" e$ v- i. Y( N: L // Note we update the heatspace in two phases: first run( {7 F7 [$ B+ x4 A* U
// diffusion, then run "updateWorld" to actually enact the$ P" z( D \- T9 [8 @/ y8 P
// changes the heatbugs have made. The ordering here is5 \" \. }0 U5 C8 B
// significant!
( C( l* k3 l A, z+ r
& q# L: V" `8 U% c // Note also, that with the additional
( B9 k( w0 Z# A; v# r! c0 K! s // `randomizeHeatbugUpdateOrder' Boolean flag we can
; ~) [0 k6 M: E/ R // randomize the order in which the bugs actually run% k% ^7 A1 l3 l
// their step rule. This has the effect of removing any: p) K9 ]# b! O, m% F& w8 K, E* N
// systematic bias in the iteration throught the heatbug
2 L- Q5 B6 T h) O // list from timestep to timestep
; M. m1 Z8 j4 Q3 _* \+ c- J5 Q1 o) m
1 q. Z2 M# O, X& v$ ^( A5 `* A i // By default, all `createActionForEach' modelActions have
$ i# O8 G- P8 p // a default order of `Sequential', which means that the3 o* m7 Q9 z _1 `
// order of iteration through the `heatbugList' will be
q6 [7 k; i" x // identical (assuming the list order is not changed
2 d0 i# y' N# w" t& c% T! y // indirectly by some other process). R) u& m8 y' {$ Y L
- i. [0 ~; o1 j/ b modelActions = new ActionGroupImpl (getZone ());3 \; u/ I5 _4 Y. P* ~
& S9 n* M- D& q5 x1 R0 E try {
% l- x) v! ^+ t5 ]8 N& C modelActions.createActionTo$message: W& }+ q. ~4 v8 d/ X2 F z5 R
(heat, new Selector (heat.getClass (), "stepRule", false));* d4 `5 w" m4 J* o" q/ S( W9 ?5 S
} catch (Exception e) {& g7 T, w9 X- J6 a' v: a9 i" |8 Q, B
System.err.println ("Exception stepRule: " + e.getMessage ());
4 K' Q* W+ R6 ` }7 G) d5 f5 n$ j9 @% x5 P: h# n* V$ s
$ g4 K5 t( b; Q( W+ G |! ~( F2 g+ ~ try {
; _: _( \1 g2 y Heatbug proto = (Heatbug) heatbugList.get (0);
0 [" d6 I$ G6 ~2 [1 N) t1 |* U- M. ?$ F; v Selector sel =
2 L- Q. J' k& L v% i6 M new Selector (proto.getClass (), "heatbugStep", false);+ b7 M/ s* j: K/ q% @
actionForEach =
( u3 i/ B9 V6 ~% W/ D1 R S modelActions.createFActionForEachHomogeneous$call
9 l3 h+ n" f# F; i6 V! y- w$ z' C (heatbugList,
. ~' k- m+ N2 i9 S9 ?9 y, Q8 z new FCallImpl (this, proto, sel,
" k/ t3 F& C7 @ new FArgumentsImpl (this, sel)));
1 ]$ K. U' h# L, F4 i- E' {& C } catch (Exception e) {) E: Q8 U" A$ M7 d' \! q r' c( j
e.printStackTrace (System.err);
( h$ f. z) `4 Z8 E }
% u, f- @+ D8 ~1 B; t ( l X5 Z+ G S4 Y
syncUpdateOrder ();& U \ ?% k7 Y/ @; C3 M# s* H/ ]0 H
/ B' l9 G( I2 E$ f& K2 O- s" J
try {: O+ C0 z/ T D" _) `# L
modelActions.createActionTo$message 5 `# d) v2 f! z* A& L
(heat, new Selector (heat.getClass (), "updateLattice", false));7 A, v7 H- w1 v* I
} catch (Exception e) {
R% U6 f" N. Z- C5 p" ` System.err.println("Exception updateLattice: " + e.getMessage ());
8 f3 n* d7 ]+ P! c }# T9 Q: {& x9 F# j! s6 x6 t) N
: @- R" q. c9 t- U, A
// Then we create a schedule that executes the% a/ U8 u' f0 y$ q/ T: k7 y% L3 T8 ]* D
// modelActions. modelActions is an ActionGroup, by itself it
; v, f; ?; C D: U9 S! {) S- ^ // has no notion of time. In order to have it executed in
2 D4 |' w& O8 H j; {) N // time, we create a Schedule that says to use the
/ q9 f9 p! w+ e0 q0 \ // modelActions ActionGroup at particular times. This. d! p& h: C% |
// schedule has a repeat interval of 1, it will loop every
9 o2 N; O5 X% u8 P- t A // time step. The action is executed at time 0 relative to9 N1 g) @4 x; J0 ?
// the beginning of the loop.
8 E! g, E, r* h! P) q2 |; t( j6 F+ w( K+ q8 _3 \8 ^
// This is a simple schedule, with only one action that is
) L/ X* F! ?+ b' h. ` // just repeated every time. See jmousetrap for more
4 `. L% @* l; h0 c; o // complicated schedules.( u9 W7 n( F, P
5 j2 X- d+ _$ s6 _# O* g
modelSchedule = new ScheduleImpl (getZone (), 1);: Y* u7 v% O' }5 R
modelSchedule.at$createAction (0, modelActions);4 L0 j/ A: Q8 Y7 Q& w2 X
) Z2 C- x: n( {+ S, L; x
return this;7 Y8 L; @0 S) H/ d7 c' }
} |