HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 X6 l3 Q. i5 r
! o& C+ c4 S" G" E public Object buildActions () {
# y* e# G5 U4 X5 z) K8 B) g super.buildActions();
/ w* `' y p% |% B9 o 1 P" X& j9 b- j* {
// Create the list of simulation actions. We put these in
9 h8 ^) x% s- k# m- S% T8 X // an action group, because we want these actions to be
, N6 w: M" b( g* q8 R // executed in a specific order, but these steps should
5 h. h/ c/ L: \% e+ M // take no (simulated) time. The M(foo) means "The message
# t1 _1 G' K! S // called <foo>". You can send a message To a particular% I$ D h2 G+ v( g4 O
// object, or ForEach object in a collection." W2 z3 J% a. U' @' K( {
s* q( ]" a; W3 f
// Note we update the heatspace in two phases: first run" Y) X" X4 z" f& z
// diffusion, then run "updateWorld" to actually enact the
. @" I6 t6 G$ E, B' e- ~ // changes the heatbugs have made. The ordering here is6 a1 f" o' Q$ e9 m$ w H
// significant!* R2 t1 p W5 q, P& U
# \, c. n b# J
// Note also, that with the additional
9 [ [3 Z& X. N8 P2 f0 P5 n( Q" }/ @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
: [; y. x# H3 U+ ` |- R) } // randomize the order in which the bugs actually run2 N# L2 h2 [7 z+ h# h) W
// their step rule. This has the effect of removing any* D- [. h2 X% U& h
// systematic bias in the iteration throught the heatbug7 h' V4 U4 L9 x. [( W+ n
// list from timestep to timestep
# D. ^/ J. ]. T: f# i' I9 ]
+ p9 S! a7 ^4 k, R3 D // By default, all `createActionForEach' modelActions have
: x5 R8 y1 ~1 k; k- v+ H // a default order of `Sequential', which means that the( n3 \' O7 V; @
// order of iteration through the `heatbugList' will be
5 j0 z' S: [( {4 l6 _# ? // identical (assuming the list order is not changed i+ _3 L0 ^+ i- M: O
// indirectly by some other process).0 }+ p- N$ q5 N1 t# U3 e) F0 V8 U; C
! S, g# W: L8 d; C( _. R
modelActions = new ActionGroupImpl (getZone ());
& H$ a4 _: o6 ^9 ]7 h$ X+ o% Y* R( r- M! Y2 {# `1 [" O
try {: F1 g( X$ w \) H% T
modelActions.createActionTo$message
" S1 G. ^& }% u# y% O (heat, new Selector (heat.getClass (), "stepRule", false));% X: \& l% h6 t- C$ }
} catch (Exception e) { @, h2 E* F+ C3 S. H* {
System.err.println ("Exception stepRule: " + e.getMessage ());
3 c' A# @4 k0 G. L9 ]2 s9 f- ^ }" J) H+ R, H2 M7 f( l- z: G
6 X: d1 z6 t8 @$ J2 x7 K: ?- F, v try {
! x+ X: [2 g% y2 `3 b Heatbug proto = (Heatbug) heatbugList.get (0);
' H6 y3 U/ p% }& D0 B4 g7 R Selector sel = 3 V; p6 g; ^& N5 T/ h( h7 a+ h
new Selector (proto.getClass (), "heatbugStep", false);
& u3 g( i+ l7 h' Z* H$ M" | actionForEach =
0 H- x; x2 m1 x& ]- i6 o C- C modelActions.createFActionForEachHomogeneous$call- F0 T) g4 u M! w. L
(heatbugList,
5 |1 p& A/ `0 \+ p' O2 A) ?1 T new FCallImpl (this, proto, sel,3 b" x/ k5 o4 D/ [
new FArgumentsImpl (this, sel)));
! i. M r; R9 K I3 m! g# \6 P } catch (Exception e) {/ {6 @6 {% p# ]/ e) a* ?
e.printStackTrace (System.err);
, n, U K) \ ?0 X2 m) M' A: [ }
- A# @7 F7 ~' ~( p2 v7 Q' e3 q 1 s2 ~* t/ }' E* U' F2 O* a& D) V
syncUpdateOrder ();
; e% t: ?, }) x" z: m1 G
9 D- n2 j ?9 k try {( M2 w+ M; q3 ]) \) W3 S
modelActions.createActionTo$message $ e9 @4 P8 U' f5 R7 v1 H u
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 c" r0 `0 w, I/ F, a& } l } catch (Exception e) {2 g5 a4 q5 |( Z$ c
System.err.println("Exception updateLattice: " + e.getMessage ());
6 F# h1 f) w. d! I A }5 b, L& L" L5 }. h! M+ E
8 G# w+ r( Z2 E$ n, ]! u. I$ w- c // Then we create a schedule that executes the
7 S/ }. a" ^4 e* b4 [) o // modelActions. modelActions is an ActionGroup, by itself it0 h6 ~+ j& H& t
// has no notion of time. In order to have it executed in* y, a( f! X' z
// time, we create a Schedule that says to use the
& O/ b7 Z$ |" {3 ` // modelActions ActionGroup at particular times. This
1 _$ ]0 I" X4 x6 l" w$ G // schedule has a repeat interval of 1, it will loop every( B* B: R( E+ ] |' o& B* E2 M
// time step. The action is executed at time 0 relative to
, h$ R$ W; H2 D& z; Q // the beginning of the loop.
; d$ g+ D; _1 B& b: N+ R/ `/ u/ D6 q# D7 S! B' S7 t
// This is a simple schedule, with only one action that is* }( L$ y+ g' j: k* t
// just repeated every time. See jmousetrap for more
& u* D+ F7 X9 C; y V+ Z; W; _ // complicated schedules.' u# Z; D# ?+ a: A
4 l& n# G( D3 @ i$ r& G) v% U( i modelSchedule = new ScheduleImpl (getZone (), 1);
. ]! O9 G( Y3 y+ t+ j modelSchedule.at$createAction (0, modelActions);
% d; m& b1 m" i! S
( a+ u7 y6 I" v$ W1 r return this;$ t( U1 {0 s" l* a( Y* x4 C E
} |