HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; a& q) G6 E' s! S% p
n2 c4 R5 A1 t# e public Object buildActions () {
4 T* z4 _, \. U7 S1 [ super.buildActions();# X/ c: M( N+ w' k1 ^. x
: f7 m' H2 ?1 }
// Create the list of simulation actions. We put these in+ V" y2 V4 d0 \/ W6 Q
// an action group, because we want these actions to be
/ x% o$ H; L" i, \7 D" N% | // executed in a specific order, but these steps should" ~: H; u+ X5 b8 ~2 ]; o c
// take no (simulated) time. The M(foo) means "The message
+ O% w0 r2 N2 L3 ?7 p // called <foo>". You can send a message To a particular
* }# e, N3 O% w // object, or ForEach object in a collection.% E; m$ _2 V% d6 v" G2 x7 c
/ R8 `$ ^1 t3 Y1 i& K( H0 `
// Note we update the heatspace in two phases: first run# f+ r1 W9 l2 f% f
// diffusion, then run "updateWorld" to actually enact the
x. f' k0 ~" o2 H+ Y! ` // changes the heatbugs have made. The ordering here is: a5 F8 X$ \: B% ?9 M
// significant!
; T- M- v& L# z: c0 o 8 |! b3 P1 J" o! B! [7 Q, |" C
// Note also, that with the additional
+ S- Q$ |" m* X; X7 z1 i L // `randomizeHeatbugUpdateOrder' Boolean flag we can
# v! @9 K, Z @1 h* M // randomize the order in which the bugs actually run! t/ S* k" _' j1 ?, D/ D6 e
// their step rule. This has the effect of removing any
; Q" P& ~, z2 d+ j: {1 ]1 \' ` // systematic bias in the iteration throught the heatbug9 g' o5 v* V* N2 ]) j' B
// list from timestep to timestep
9 T& E% A" f' j; [ ' U) A) [, t$ ^- v. e
// By default, all `createActionForEach' modelActions have+ P h2 N% [0 a
// a default order of `Sequential', which means that the
# l, t& i1 m5 {! q; \ // order of iteration through the `heatbugList' will be
# z/ J2 a# ^& W! e- k3 s5 H4 U // identical (assuming the list order is not changed0 }8 N. C) l+ |/ t& m! _. n1 A, K
// indirectly by some other process).& l5 N( r p$ u) n) T
; @3 N4 g) ?' A' h% | modelActions = new ActionGroupImpl (getZone ());
! q3 e# K" T; J3 W/ W- B& a3 h8 C6 S% F$ a2 W$ h
try {
( k2 D3 M! g* ~ P# f modelActions.createActionTo$message
m" G; C/ m& D+ l7 ] (heat, new Selector (heat.getClass (), "stepRule", false));
* B1 ], i/ a; N6 y+ t' {# i } catch (Exception e) {: z7 _' d9 O8 q6 I
System.err.println ("Exception stepRule: " + e.getMessage ());/ w' C' j8 H& U4 K& I7 |; A
}
% l7 Q7 X% e2 V B$ B
) B2 `( o: S; v5 |# l- h3 {5 ]9 I try {
d, X- e j" K) L' m Heatbug proto = (Heatbug) heatbugList.get (0);" \3 U! y! f2 @0 v) q; b1 K
Selector sel =
9 S+ d+ S6 Z+ C3 w, v: [9 m8 I- z new Selector (proto.getClass (), "heatbugStep", false);
( I2 t3 K' u4 j# } actionForEach =
0 F6 I' Q# m+ R- l$ _/ @- f: _ modelActions.createFActionForEachHomogeneous$call
( H7 b9 E& K! |* w& n6 T t# a/ z (heatbugList,- j) e: C+ c7 b! _7 o6 Y4 I
new FCallImpl (this, proto, sel,
9 M' {' \; G9 t; p. a! ] new FArgumentsImpl (this, sel)));2 N' R0 s; u* |2 i/ R
} catch (Exception e) {
- K: w& c0 E4 Q. r e.printStackTrace (System.err);
: M" b7 v" ^0 V" [+ ? }
, a& u- f( \ s" \7 F6 F : f. |+ Z8 `" T$ V
syncUpdateOrder ();
0 l" ^2 O `- H0 W
9 [# S" J7 q& Y) x. I# S v try {
. J' o9 a! P. y& e6 N4 z4 Y/ w modelActions.createActionTo$message 3 }1 X: }1 Q- N _7 u9 S2 Y% ]
(heat, new Selector (heat.getClass (), "updateLattice", false));
) Z+ J4 w1 [. c" Q+ h: ^) |. a } catch (Exception e) {
" O+ E F6 t4 d" N+ h6 j" c3 S1 a System.err.println("Exception updateLattice: " + e.getMessage ());
1 H9 w8 Q" G# ~ }3 P9 S# E! m, {& B. H B
2 ]' _ p# ?5 q. j. T. ]# ^# Z // Then we create a schedule that executes the& D5 [# a1 \6 E
// modelActions. modelActions is an ActionGroup, by itself it
( N% \% ~1 M! q( `- I! C/ v // has no notion of time. In order to have it executed in2 f: M& w0 V' }0 O$ d0 B; n, R( }" A
// time, we create a Schedule that says to use the
; f6 {$ M7 i$ _% P, q // modelActions ActionGroup at particular times. This
) t8 j2 j; Q& @& ^% P0 Q // schedule has a repeat interval of 1, it will loop every
* v( R3 g( F# w# F# r' y) x2 F // time step. The action is executed at time 0 relative to! O$ g( |- o2 b
// the beginning of the loop.
( b& r3 q |8 o! ~
T( m# a" p+ l% R# I // This is a simple schedule, with only one action that is9 v% ~5 k' ?- P) U8 R2 S
// just repeated every time. See jmousetrap for more: Q+ s& q$ F3 W
// complicated schedules.
& S1 X( S/ X+ ]* e) l 1 O1 G# l8 d( ~) j& S! r
modelSchedule = new ScheduleImpl (getZone (), 1);
: D1 I% Q0 F( w5 c& m% f modelSchedule.at$createAction (0, modelActions);
- |- N) t/ a5 j* Z+ d' P. ~' A ! u$ V0 [8 y! f0 ~5 y( e% A( a' ]( n
return this;
: q( G# Q* h8 w' `1 G } |