HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 Z4 p. V4 w9 M* `
* ` D& C. T, k* l7 e6 z
public Object buildActions () {
' x7 q r- Q) [1 b super.buildActions();0 v( {; g9 Z: ~3 s0 Y0 g- R
" e; i; i9 v* l" L- G% I0 n
// Create the list of simulation actions. We put these in1 U8 Z0 {3 ^ ?
// an action group, because we want these actions to be
5 I q4 X& Z) B+ [ // executed in a specific order, but these steps should" o$ Z5 b( ]1 h8 S2 X* {" u+ f
// take no (simulated) time. The M(foo) means "The message
" L# X. n2 V9 _' z+ @5 Y' B // called <foo>". You can send a message To a particular: p% y/ h0 e; f; _9 d1 J( F
// object, or ForEach object in a collection.) `! H/ R! `% Y8 J, U" E% o! w
( L5 H! l- S2 u3 r+ r // Note we update the heatspace in two phases: first run% S9 f% r- L3 S7 u* g2 T- L
// diffusion, then run "updateWorld" to actually enact the
3 c8 f* w6 B" N& A- b // changes the heatbugs have made. The ordering here is
/ g7 b9 d& v \9 I+ S9 X // significant!/ |6 S. w( E" K2 h2 I j& s# G
( u3 @% C5 b& q3 G // Note also, that with the additional6 p. m" H! c* |. i0 k" k! D5 W3 j# ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! k/ d- H& R0 E# M/ Q& J // randomize the order in which the bugs actually run
! Z% a, S, g1 V" P2 H. \4 f9 P // their step rule. This has the effect of removing any
7 S; \) b" Q/ @" f. G) F, k // systematic bias in the iteration throught the heatbug
" }; _; A! n: a$ T // list from timestep to timestep
; M4 U9 N& Z2 G
3 |; q6 Q' ^ s+ Q. V // By default, all `createActionForEach' modelActions have f/ }/ Z/ N7 g. P% N
// a default order of `Sequential', which means that the
) D6 j* R$ c" f // order of iteration through the `heatbugList' will be
% A$ s0 j2 e; G; f8 z: V // identical (assuming the list order is not changed+ d0 j9 l9 }& C6 e# H X2 k
// indirectly by some other process).+ ~* ]6 U+ ~6 W" t) E# k
3 W$ v, w0 R. N8 e% F1 Z* ~* X& T
modelActions = new ActionGroupImpl (getZone ());* n7 x/ _: Q4 o" Z# E
- i* y+ `4 b5 \% f
try {& i' k4 A5 G" ~ p- s7 }
modelActions.createActionTo$message4 Y1 Q- r5 u N3 J
(heat, new Selector (heat.getClass (), "stepRule", false));8 [& {2 j' A8 q: ^1 S
} catch (Exception e) {
5 A V3 X) ~$ e5 I System.err.println ("Exception stepRule: " + e.getMessage ());5 G9 P! J8 Y1 U2 L
}/ ^: D: Q5 C+ n+ w7 g! p/ p. v
* ]; I4 ^5 w. l3 C# O) Q) p$ I try {
# z& D# U3 u! ^ Heatbug proto = (Heatbug) heatbugList.get (0);
0 O' _" j5 D- f8 F9 r1 N( J2 D( m Selector sel =
m) J' r4 a3 m. _6 m new Selector (proto.getClass (), "heatbugStep", false);5 f5 _2 j" W5 Z4 o
actionForEach =
# b5 X: K# W W& _9 K5 ` modelActions.createFActionForEachHomogeneous$call' o$ u; t9 x6 x& D7 X: k g
(heatbugList,
+ ^4 E' B) D( M& m/ r, X new FCallImpl (this, proto, sel,1 k4 N, `" q. i% D9 Y6 l# h' ?
new FArgumentsImpl (this, sel)));, h4 W$ _, S1 U/ ]
} catch (Exception e) {- w: L# n$ X- R. |! J8 a' @
e.printStackTrace (System.err);1 z6 R& F1 g" }5 h1 g
}1 U! k6 B2 |' S( t1 l2 C+ J; |. }( h- H
% B9 f& [% }) D& Y, V4 F
syncUpdateOrder ();, B% r5 U" \8 S. B9 k/ F1 v
$ p9 Y0 t9 X" g; t8 y l
try {
3 u; E5 u: j4 E5 G1 \# @ modelActions.createActionTo$message 6 t* w+ Z6 _" C3 x( D
(heat, new Selector (heat.getClass (), "updateLattice", false));" l& @6 G. l% C+ u8 X2 ]- w/ |; l
} catch (Exception e) {
; B3 _( K# h6 r System.err.println("Exception updateLattice: " + e.getMessage ());
& e/ Q9 J8 y! J& f% b' E& a }. w" @. S `" f( p
6 t, ?2 q' }5 n5 ?2 c( m) N% v* Y
// Then we create a schedule that executes the
' r& J, V- a( i \6 A) a6 @1 A // modelActions. modelActions is an ActionGroup, by itself it6 d: L& L1 S7 o( A9 b. [
// has no notion of time. In order to have it executed in+ O2 E) j [+ s6 E# i
// time, we create a Schedule that says to use the% A- z' r8 ~% P- d
// modelActions ActionGroup at particular times. This( X7 N3 l. B* c2 N
// schedule has a repeat interval of 1, it will loop every
" Y4 h* i6 Q! | // time step. The action is executed at time 0 relative to$ u5 I* y; C9 |' J! Z( @, b- m
// the beginning of the loop." ^% b G; l# v) y" Y
. b; {" c8 l1 j! ]/ f* q* {0 d // This is a simple schedule, with only one action that is
* b; ?5 m& {5 ~6 ]: E- x% q) \ // just repeated every time. See jmousetrap for more5 e3 @ C" p7 R/ [
// complicated schedules.
5 l+ A; F4 B+ l! j, d( _4 Q 7 Y( v+ h$ D( q( N
modelSchedule = new ScheduleImpl (getZone (), 1);
5 F$ G3 L9 g& o* z" N modelSchedule.at$createAction (0, modelActions); _/ ?+ b3 g, Q- E' h7 U. r
7 {/ k" c. K! | O
return this;
5 k7 K0 {. @% G* \. i8 U9 r8 f } |