HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 x+ ^$ x: _/ t2 o8 ]; P
" s' V8 b& p7 i3 W2 R b public Object buildActions () {
" w$ I( w+ f% H' G* {3 | super.buildActions();: q2 y9 U0 u- F; d) i& Y
@* Q- G* O1 n% D/ d( b$ K
// Create the list of simulation actions. We put these in v; }+ \& a8 {) o
// an action group, because we want these actions to be" j4 @+ B5 g6 n+ @* w* Q
// executed in a specific order, but these steps should2 P7 v" q/ W: `% \( R" ?6 U0 b
// take no (simulated) time. The M(foo) means "The message) L. J' [; g" I0 ]7 n0 n; f i
// called <foo>". You can send a message To a particular
% W$ t2 T) B9 D8 V x3 W // object, or ForEach object in a collection./ S3 ^: C {1 C: I
5 z: w0 u$ ^, x2 j; Q
// Note we update the heatspace in two phases: first run3 ~; @/ s" D a: b* a$ d8 o+ Y2 t2 S, c
// diffusion, then run "updateWorld" to actually enact the8 X5 q+ A/ y/ `8 f' a( ]
// changes the heatbugs have made. The ordering here is
* |/ _. l( A) l! M& r Y: `% _) Y // significant!
+ d3 |# L k- ^
Q1 |9 P5 j* V: j3 ~& y // Note also, that with the additional& c) O& H1 ^; @! M# c8 z) M
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ o! [9 k7 S6 U8 ~& c
// randomize the order in which the bugs actually run6 o4 U) Z& \0 z7 F* `
// their step rule. This has the effect of removing any. w0 x% l/ T: o9 b% m
// systematic bias in the iteration throught the heatbug1 A* g2 o6 o% |5 [
// list from timestep to timestep# K% r6 ^: r+ c" U4 k( r
0 n0 w3 l9 z s
// By default, all `createActionForEach' modelActions have
* k6 D- U2 F& ^3 f; q // a default order of `Sequential', which means that the ]4 y; _' T# |& n, h
// order of iteration through the `heatbugList' will be
! s* V4 s; h: N9 \' k4 S' x+ r u // identical (assuming the list order is not changed# M0 b, R/ t: [
// indirectly by some other process).
* S, @6 ~2 a9 K; N- C2 q1 X
7 m1 v! U: r4 N# m' ^2 h. Y modelActions = new ActionGroupImpl (getZone ());- A3 o0 A8 V; a" p; \( K" K3 @
! n3 |7 H$ ^, X6 x/ A/ g2 W) m
try {
+ w, Y' j* W5 u$ v9 c$ V5 T& H! q( G modelActions.createActionTo$message# y" _6 J2 o6 H$ y7 h
(heat, new Selector (heat.getClass (), "stepRule", false));! P. ?4 d. M8 S( S3 E! H) J
} catch (Exception e) {
% f5 u' n# E: x- g! s' b/ p- \/ J System.err.println ("Exception stepRule: " + e.getMessage ());6 V/ \# A ]$ d! Y# V
}
0 Z" K* p0 N P! O( c- \
! M$ T( u5 _- H! p try {) B% O) |0 Y! |/ C& a2 [
Heatbug proto = (Heatbug) heatbugList.get (0);
S6 ~# d# h! Y0 \' }) e' h Selector sel = 7 k. m! q1 v; N0 t2 R+ d
new Selector (proto.getClass (), "heatbugStep", false);) ^5 w$ D- E! R# H
actionForEach =
% N7 P" P) [2 t. I9 E modelActions.createFActionForEachHomogeneous$call
3 _6 S3 L/ o C# B2 a) J (heatbugList,4 T p9 v* @2 t; O4 M0 q
new FCallImpl (this, proto, sel,) R, G; {8 R4 |0 f& r
new FArgumentsImpl (this, sel)));2 x e$ S2 m6 u3 ?6 K/ w) Z# J- r
} catch (Exception e) {
/ N& n0 r8 i# [4 N" q e.printStackTrace (System.err);, K% g: q! @' e
}: c0 E) n" x9 [- U
& q! a/ c& D, `
syncUpdateOrder ();, W2 P6 F$ C4 ?# m
8 |6 ^* a" c" p l" V
try {. m* X- ?4 n7 I
modelActions.createActionTo$message % k* u& c5 O; R2 V; s$ W
(heat, new Selector (heat.getClass (), "updateLattice", false));
& s5 a& d' S; r } catch (Exception e) {1 M3 b0 j l( O' P% p7 w& M" {! ]" _4 u
System.err.println("Exception updateLattice: " + e.getMessage ());
6 R! _' x+ C" E+ V' U }
# M8 ^ r5 E/ a: C3 h M4 S& L% | B5 I 0 d. I) _& Z* ~2 U9 f3 O
// Then we create a schedule that executes the
3 C; y& u4 m/ W$ E6 M/ j, u0 a // modelActions. modelActions is an ActionGroup, by itself it( N9 T1 z2 E% r; _5 ?4 {/ ~
// has no notion of time. In order to have it executed in
/ Y3 c# g3 u+ H; d9 b! ^0 X // time, we create a Schedule that says to use the
: y# H2 Z: N7 E4 z // modelActions ActionGroup at particular times. This( \0 O' n& L' h# e
// schedule has a repeat interval of 1, it will loop every
% P* a8 D" C1 c8 S // time step. The action is executed at time 0 relative to+ Y$ H' Q8 l: u" I
// the beginning of the loop.
/ d9 H6 [% l: p& ]3 y' Z6 E9 r" @
+ z: w! o; V5 Y* x6 ?+ V6 | // This is a simple schedule, with only one action that is* x2 `' V6 v& R+ p$ y2 @
// just repeated every time. See jmousetrap for more1 T1 V0 _- `( Q+ \( r% y' T
// complicated schedules.+ B" ?2 `2 i9 J. o/ C% r+ \, r
) ~+ B' F8 n: U* r1 i
modelSchedule = new ScheduleImpl (getZone (), 1);
, J; {3 w; {" W5 Z! R1 w modelSchedule.at$createAction (0, modelActions);
n: m% t9 f$ x- N G' U
1 {0 R* r5 K a7 Y# [! e0 q return this;
6 _* w# ~1 ?0 b } |