HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ i0 p+ R4 T" k2 K% D* C2 H$ @# v& {) x# M1 q* s; [# `
public Object buildActions () {
1 \+ G8 | l' Z6 [. {9 U7 P super.buildActions();, K# H' [1 n) T& }
' `/ J8 d- O' }. [4 o( Q6 o
// Create the list of simulation actions. We put these in# s7 S8 @* S' q; W( X
// an action group, because we want these actions to be5 P1 M }! P: M9 e' o; \3 a
// executed in a specific order, but these steps should8 o) f6 U( U/ V8 k
// take no (simulated) time. The M(foo) means "The message3 ~! F3 g- I! _' z, K, D
// called <foo>". You can send a message To a particular2 ?2 c4 P9 a& E4 W' W
// object, or ForEach object in a collection.
; I; e' `1 L' o3 l/ V
N9 S, J2 k, m: C3 M- U+ \0 H# K // Note we update the heatspace in two phases: first run' `# x- Q. l2 R
// diffusion, then run "updateWorld" to actually enact the) g2 V) O9 }% C0 P
// changes the heatbugs have made. The ordering here is
0 J6 Q e& z2 p+ d3 K) i // significant!
4 ^& u0 ~+ e N8 z' G" Q+ W
, q- ~+ a" S5 h `* b // Note also, that with the additional( \. E( b+ l3 r" c# X
// `randomizeHeatbugUpdateOrder' Boolean flag we can" w) @0 N' z# z) [
// randomize the order in which the bugs actually run9 D0 a8 f. a5 ?0 _! l/ g
// their step rule. This has the effect of removing any6 W' ^: ]; c0 E3 b ]. I* I1 y' [
// systematic bias in the iteration throught the heatbug
" x, O* A c8 |; y5 z6 } // list from timestep to timestep( H. s7 P* Y% }" V5 _
4 t, S+ r( \& V, {; K/ B // By default, all `createActionForEach' modelActions have
/ E/ S7 y( F: g0 O3 R // a default order of `Sequential', which means that the
7 z* N) _7 C6 |& ]3 c8 \" x1 V( D // order of iteration through the `heatbugList' will be
% D, J; L1 F# \/ F. H0 b // identical (assuming the list order is not changed1 B2 @, `$ r" v
// indirectly by some other process).+ L& z# p' M* U' y; G6 ^
1 C) ^5 g+ o! s( d5 t2 c
modelActions = new ActionGroupImpl (getZone ());' Q" t3 L$ }/ P
. N1 S8 D8 k( m- E4 u0 X( @3 T5 y+ Q
try {; p9 Y3 [9 u0 K1 G" F7 ^. O. o
modelActions.createActionTo$message
! B o* a4 |8 n# a8 O& T; p (heat, new Selector (heat.getClass (), "stepRule", false));5 p) t5 F* W$ _8 J/ t
} catch (Exception e) {
/ l" ?( A4 j. ~ System.err.println ("Exception stepRule: " + e.getMessage ());; b) W6 a' W* Z7 U! a5 V
}+ x3 o0 d/ h- M1 s
" Q3 a8 T9 ? t v7 i. z
try {; |+ B2 L/ I" b* O9 x( U
Heatbug proto = (Heatbug) heatbugList.get (0);0 c" e' C5 S' K
Selector sel = 1 h4 D M2 C, c o( C& Q$ @
new Selector (proto.getClass (), "heatbugStep", false);+ M0 o( X) m8 L7 h' Z4 u# l6 l$ \
actionForEach =
4 V% i9 A: k! R6 w8 G modelActions.createFActionForEachHomogeneous$call2 D% e7 v1 `/ L- c/ ~' Q: v- ]3 ^7 x
(heatbugList,2 c3 o- T, _) I% B
new FCallImpl (this, proto, sel,) k! L6 G5 z1 b6 \6 R% M# l* r
new FArgumentsImpl (this, sel)));" U- @. x( H' J( m7 H4 M7 P
} catch (Exception e) {1 ?+ x+ s% |9 u, \1 n
e.printStackTrace (System.err);
$ A! D7 [( { M# @6 D3 J }
$ }0 d4 M& C( n( K6 E! K ! J @ o* O* V7 c/ S
syncUpdateOrder ();
3 {) q3 d* D1 k; V8 L! n4 l4 x+ D- W4 j9 {
try {9 s/ {+ u3 W& P/ o2 p6 A
modelActions.createActionTo$message
& O/ N' H8 @- _3 C& x: T (heat, new Selector (heat.getClass (), "updateLattice", false));
: ^ Z1 C: P% l } catch (Exception e) {
9 q, p0 U4 n, M9 e* R, { System.err.println("Exception updateLattice: " + e.getMessage ());( _" @8 q+ p3 r4 Q
}& E5 s0 U' ]& l. k; |
+ x$ o! z2 ]8 w3 _
// Then we create a schedule that executes the
# \# f- s' e* S7 [" }3 F // modelActions. modelActions is an ActionGroup, by itself it
6 `0 @( m) N+ U G) m // has no notion of time. In order to have it executed in
, _# e7 t4 f& v( D# K, p // time, we create a Schedule that says to use the$ T# }6 q2 h! j! ^" ~
// modelActions ActionGroup at particular times. This4 ]0 R, w( A) K' v
// schedule has a repeat interval of 1, it will loop every
A4 [9 n) x3 h( D // time step. The action is executed at time 0 relative to: o4 L, k2 G0 n! `6 a: N
// the beginning of the loop.
4 a! h: v! \0 ^3 F [1 R
3 k+ V: v6 x) W! t# c; N // This is a simple schedule, with only one action that is0 t0 F: e+ R8 s- Y5 H
// just repeated every time. See jmousetrap for more
& {0 a3 [* g* B" F // complicated schedules.1 O" }" s# M- d0 h' r
! L) C& R& }+ H+ o$ e0 `& R) O
modelSchedule = new ScheduleImpl (getZone (), 1);
& e4 T7 |" @& v L modelSchedule.at$createAction (0, modelActions);
0 x% j. C# ^( U" \ u
; p5 I% d. v, x& z return this;
7 q; Z9 n+ y1 f0 X+ k" r# e } |