HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 u+ J5 `* ]& X( {* j2 z: y. }
7 ?' \: u2 \1 d e public Object buildActions () {8 r1 l0 q$ v1 \& y& | e; j; g
super.buildActions();6 t# x/ p# k# f. m
. S/ {, s0 g2 j& {8 h3 _ // Create the list of simulation actions. We put these in# A" I. N2 X: N) e. F
// an action group, because we want these actions to be( ~. D6 p, r/ H
// executed in a specific order, but these steps should
! z7 y8 M, } t/ y7 G // take no (simulated) time. The M(foo) means "The message
9 |8 X0 R) q- j/ W6 c5 s% A" L // called <foo>". You can send a message To a particular+ M6 p% H( x4 W* L! A" I& V6 k
// object, or ForEach object in a collection.
y4 F$ Q- z; r c% ?. r8 F( ^# W
+ a7 n6 s- @2 M& E3 t! U) ^ // Note we update the heatspace in two phases: first run6 E' |* b) ~% F3 X8 z
// diffusion, then run "updateWorld" to actually enact the
% z5 |: C3 r6 k- h$ m/ G" X' f // changes the heatbugs have made. The ordering here is: D# Q0 E6 m1 V4 ]& G6 V$ n
// significant!
- \8 Z( [9 [& F # ^$ _9 L5 v. y/ E) Q* T
// Note also, that with the additional
! ?4 [6 l* o" u0 |; B2 Q2 V // `randomizeHeatbugUpdateOrder' Boolean flag we can- s* g& l% j8 V' }/ r# w8 ^) y. Y
// randomize the order in which the bugs actually run0 T f1 J& |& a+ u- y0 j
// their step rule. This has the effect of removing any
+ b: f. i* V9 q! Q // systematic bias in the iteration throught the heatbug8 e* z' X+ e) K: ?6 t
// list from timestep to timestep
0 D8 e# U' p6 R/ ]: p( c9 o, p
2 @+ j8 ~6 j2 }! ^2 g4 {, ~8 z // By default, all `createActionForEach' modelActions have7 P+ y& `) r* O8 l7 N
// a default order of `Sequential', which means that the
5 a( |; k8 J, \ // order of iteration through the `heatbugList' will be
* C( f& ~, h* l // identical (assuming the list order is not changed1 e2 t: X7 i7 l/ V+ J: Z
// indirectly by some other process).
( [: \, e7 J) l; J& _ H3 p
6 m1 w9 m$ n# g( g" u. p' |1 T" V1 f modelActions = new ActionGroupImpl (getZone ());4 [ r& G& A \4 m
9 W+ ^/ `; n: N) J
try {
( P/ m& J$ _/ Y, [2 n modelActions.createActionTo$message
9 l) m5 c4 N4 @ (heat, new Selector (heat.getClass (), "stepRule", false));/ `* h% a1 w7 ?& C- J, b/ ?7 p. ?# s
} catch (Exception e) {: L9 ~3 Y; F4 @& F( q
System.err.println ("Exception stepRule: " + e.getMessage ());8 F Z3 P9 a1 e5 v
}
+ M5 o, O) T& @4 s/ D* z ?4 Z$ Z- o) @
try {
& e& g3 Z9 s0 K0 G Heatbug proto = (Heatbug) heatbugList.get (0);
' _' b% Z+ e/ Q/ M4 C( r# L& o ~ Selector sel = 3 b1 T Z4 Y7 v: x
new Selector (proto.getClass (), "heatbugStep", false);" J8 B% }7 z# e" T
actionForEach =
0 _2 a* H0 D& N8 o2 h( V5 Z; k modelActions.createFActionForEachHomogeneous$call% p& Q4 D `% I" {: P
(heatbugList,) y* k' X. }/ @' J% D
new FCallImpl (this, proto, sel,
; y! G9 G) n9 J new FArgumentsImpl (this, sel)));
2 \3 R( S; v- k. a7 e9 ] } catch (Exception e) {
; D. u* H' T; C- c: ^ e.printStackTrace (System.err);. K% p6 r0 ]6 O* K% U) \1 X5 w
}* f, G; \& x6 N9 O
' J a7 S( e3 C4 L+ h5 {8 s4 U
syncUpdateOrder ();
) R \7 _1 w" c# b; B3 k0 ^' F; ]! L
& h3 H4 F0 k3 m" E( z2 j try {
' I0 Q9 L* H- u% L modelActions.createActionTo$message 9 F! `2 z# R) U# W
(heat, new Selector (heat.getClass (), "updateLattice", false));
" ?6 M b" L. [+ G( a7 B } catch (Exception e) {8 v1 k* ^& c- W' C, ?% m
System.err.println("Exception updateLattice: " + e.getMessage ());" H9 Y, B0 a% P% N; |
}8 H# W: B: @+ ^6 J- K% B; M! r
/ x3 R! d' @! E7 c0 A- y) F // Then we create a schedule that executes the
8 H! g# o* O+ t6 |9 I9 W0 D+ \ // modelActions. modelActions is an ActionGroup, by itself it
7 y3 D6 Q, W( H6 s7 C c6 V // has no notion of time. In order to have it executed in: O R8 K3 N }" N
// time, we create a Schedule that says to use the
$ {4 s& h1 R) s, h- C. u, k" y: V // modelActions ActionGroup at particular times. This, F# l1 i4 x- m3 ?" w+ G
// schedule has a repeat interval of 1, it will loop every' I4 t; q! l3 D6 |0 Y
// time step. The action is executed at time 0 relative to% z/ j, S5 {) M9 P
// the beginning of the loop.
" r s8 U' ]) m, o$ S P0 `
3 Z# }( d) ` z7 s+ o# V7 V // This is a simple schedule, with only one action that is
; E8 E1 N# ?% j b // just repeated every time. See jmousetrap for more
- [- ]( D# f5 L% Z: [3 I4 \" P9 E$ o // complicated schedules.5 _) C1 m) C* ?6 n. U- c% {8 |
2 A# l7 X1 B) V% a6 T5 ]1 i# F modelSchedule = new ScheduleImpl (getZone (), 1);2 `2 X* \7 k2 [3 j3 I
modelSchedule.at$createAction (0, modelActions);
7 Z* i1 F% y5 q/ ?0 D9 e e# e4 f9 P5 m" d( y4 x
return this;
& i, O, F) V/ x+ R% u } |