HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ @7 i L+ h* r
" [/ ]( @7 }6 G" N: o& R public Object buildActions () {: {8 b8 K3 o+ c- H6 u
super.buildActions();# ~/ M6 h6 y, Q. X6 `
+ c* h8 o3 ~0 ^' M/ u
// Create the list of simulation actions. We put these in& A& l( }! z y u! Q" j* e
// an action group, because we want these actions to be6 p! U, U! w+ b) M. W* t! k7 p
// executed in a specific order, but these steps should- c, i% {3 g% S( X% J, I
// take no (simulated) time. The M(foo) means "The message
+ d7 e2 F/ F$ E" a) ` // called <foo>". You can send a message To a particular
( G" I( |2 O7 p // object, or ForEach object in a collection.
4 c: r1 Z! u- [# b! Z
- E+ P2 w4 A8 p3 C. ~ // Note we update the heatspace in two phases: first run
\ i9 h8 T0 ~4 j1 f; O // diffusion, then run "updateWorld" to actually enact the" Z# x) { f! l: c8 G+ Z1 G3 G, u
// changes the heatbugs have made. The ordering here is9 E4 I$ e& Z& B" b* m* I
// significant!* O+ {1 l3 S* |
: l Q, d/ M4 j! y9 B // Note also, that with the additional
v" v K# K" f7 g // `randomizeHeatbugUpdateOrder' Boolean flag we can
a E8 X2 t/ s' a // randomize the order in which the bugs actually run2 Q7 ?/ H/ ?6 r; H8 _/ A& P9 t6 @
// their step rule. This has the effect of removing any
: `1 X) A$ q0 M8 _1 t9 C // systematic bias in the iteration throught the heatbug1 U$ D9 P. ^7 b3 t& X9 N
// list from timestep to timestep
9 r1 f3 l9 ^- z. o' a" M - h9 D. n0 ^7 Z! n8 a9 _, r# ~
// By default, all `createActionForEach' modelActions have% c: |+ p" U* T8 D6 @
// a default order of `Sequential', which means that the, `# W; j; V0 l# f3 a
// order of iteration through the `heatbugList' will be9 X7 ?: `; O- Q% t2 a4 T) R
// identical (assuming the list order is not changed4 f1 R a! Z1 H9 k8 ]& I1 T
// indirectly by some other process).8 X' X9 L$ H1 Y& ^, T% \; I4 F6 }
8 d+ p, ^) n! z! ?( I4 R: s4 s modelActions = new ActionGroupImpl (getZone ());
# N% ?) o: \# L# @ U$ _/ k( k
try {$ d, u* K" N' c; O) n" V
modelActions.createActionTo$message
( I3 P! p; {+ l, m0 j+ { (heat, new Selector (heat.getClass (), "stepRule", false));6 ~$ @+ a% `, w+ N8 x3 r
} catch (Exception e) { h; h7 Y" R' n
System.err.println ("Exception stepRule: " + e.getMessage ());
" U& l0 Y, `3 z9 E0 B2 a) t }9 S; U% |6 G' |% R
8 H. g) h: X1 D& } try {
5 k0 M, b" Z! G' c! I6 m* m Heatbug proto = (Heatbug) heatbugList.get (0);( m' U) g' z+ `5 N. J, X
Selector sel =
0 o0 ^* W1 W" Z8 x$ A. c6 G: f4 y new Selector (proto.getClass (), "heatbugStep", false);
2 e6 c! u8 d7 A+ W: _+ M" N actionForEach =
" P2 t! N% J% h- c6 C& U/ r modelActions.createFActionForEachHomogeneous$call
- X' b) h. ?. j* c+ b0 n8 {: p (heatbugList,
3 Z7 g* c, ~ Z% H8 W# A$ b- o" O new FCallImpl (this, proto, sel,
8 g( T5 L! ^, j& N5 P& A2 J9 z( A new FArgumentsImpl (this, sel)));
7 H' t f0 o% s) N. K } catch (Exception e) {
, }6 ]/ F" _% L+ f( \/ q" k3 V3 V e.printStackTrace (System.err);6 A3 J2 I5 E/ z- L- @
}
5 Q7 s. l6 g0 N! {$ J
, x ]; A& E, [ syncUpdateOrder ();
& f8 N8 ?: u `) t, N4 g- S+ Q* e% j- t9 ]# |$ |
try {
9 I( V, u& g6 }$ W" | modelActions.createActionTo$message
! g: s. e& X/ D/ \& M (heat, new Selector (heat.getClass (), "updateLattice", false));
! @! y1 J+ [ v! L" G } catch (Exception e) {. F. q; }6 |% ?% t2 @. _. q
System.err.println("Exception updateLattice: " + e.getMessage ());! U' z# c) Q) Y. u) Q
}
# X) F# P* A- W4 n* K D& ^+ Q4 c, D6 W* ~4 d
// Then we create a schedule that executes the
! m- f- h3 I! J6 b) A5 H // modelActions. modelActions is an ActionGroup, by itself it
* b. w8 W# s4 | // has no notion of time. In order to have it executed in: d' |4 Z# T F C2 g4 f
// time, we create a Schedule that says to use the1 p/ g& I4 `& A' t4 ?2 u; b
// modelActions ActionGroup at particular times. This
9 s. N+ p3 g2 Y q# C; M4 r0 `+ ` // schedule has a repeat interval of 1, it will loop every9 S' o6 S3 i# s( P! r8 c
// time step. The action is executed at time 0 relative to
x1 F6 t, w$ X& I0 \; I4 l3 A // the beginning of the loop.7 u( b( Y5 }, }9 }1 D1 N- f; b
* `8 v. l) N8 K) b3 r1 z // This is a simple schedule, with only one action that is+ h. Q8 \) D& P- O9 Z
// just repeated every time. See jmousetrap for more
8 ^! V" _3 E8 H& G/ t( K' F& p // complicated schedules.! Y5 l/ S/ i( A( k0 _0 }5 L
, p5 }7 V( y# \* l+ o* F modelSchedule = new ScheduleImpl (getZone (), 1);
4 L: f8 v* {; f% M0 i modelSchedule.at$createAction (0, modelActions);' C7 k* W8 i) a
0 w* \9 z% [: V# Y' l6 y5 \' d
return this;) Y4 `( ^# B9 H9 n1 y, t
} |