HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! |! B/ v( w* @, k; R
3 E+ O, X( j X f+ D public Object buildActions () {/ ?7 V% o2 W' T' d7 {
super.buildActions();
7 m! D2 J v% r% o) p& E# J " a. c$ _; Z7 \1 f$ V8 B# m7 ?$ p" I& N
// Create the list of simulation actions. We put these in
w9 N& p2 G* | // an action group, because we want these actions to be
' _! k: T+ y2 I: u7 Z // executed in a specific order, but these steps should
0 A0 ]9 L$ |) } // take no (simulated) time. The M(foo) means "The message& I, e5 c# ]& z C$ o
// called <foo>". You can send a message To a particular
# {! S; V( m# r8 T) o4 m+ m // object, or ForEach object in a collection.$ u$ |$ _/ W4 y9 z
3 _+ e6 {, k0 h9 @) k/ w: O // Note we update the heatspace in two phases: first run
}' C7 G* G' ^1 v // diffusion, then run "updateWorld" to actually enact the9 J. S9 C/ N) |% U. s( j% z, ]
// changes the heatbugs have made. The ordering here is8 @$ q8 l* T2 V- O4 A1 r9 l2 o
// significant!
4 T/ {+ p' V. [ # R8 G/ U" M/ o4 O% \
// Note also, that with the additional
2 ?) A1 \% e3 {1 z. }% I // `randomizeHeatbugUpdateOrder' Boolean flag we can
" C3 S( R5 n; i3 k \0 B/ _& n // randomize the order in which the bugs actually run9 @$ g/ k/ r w+ F7 w" `/ ?
// their step rule. This has the effect of removing any
3 z9 }$ h# B! P/ D9 x/ X // systematic bias in the iteration throught the heatbug2 P o( C+ v9 g3 x
// list from timestep to timestep
! C/ y( Q( r7 A Q' ?1 Q & A( w# \4 }( m+ z( D7 H: o5 g
// By default, all `createActionForEach' modelActions have1 L4 m) K+ n6 Y, O# [
// a default order of `Sequential', which means that the! _6 [9 J- m5 \; E3 q6 r
// order of iteration through the `heatbugList' will be
- Z% T1 W1 A' T7 _ // identical (assuming the list order is not changed+ D( [2 `; l* I8 q3 K9 f
// indirectly by some other process).- I; F8 H4 f0 m4 d, @
7 e8 N( k' f, w$ M) E/ s$ t1 j+ t k
modelActions = new ActionGroupImpl (getZone ());$ I! w8 n& b$ @$ I1 `3 _3 k* G# C
( l+ U Z* \% k" W9 b0 X/ w
try {: ~0 F* t4 D! v* ^- H. F. f
modelActions.createActionTo$message
1 P, V1 X. @ ^8 ~( D* Q4 x (heat, new Selector (heat.getClass (), "stepRule", false));# E9 I! j* O* ]' ~* ^+ Z: x
} catch (Exception e) {
5 V; g% L# N4 s5 J9 s System.err.println ("Exception stepRule: " + e.getMessage ());
% k& t! D; f6 Q9 m- y4 S6 B: Q8 | }+ I8 { R# o9 |. K
4 M. q* [3 j+ J
try {
( a/ o9 q* X# s4 E$ p4 K( u$ I5 n Heatbug proto = (Heatbug) heatbugList.get (0);
) e: x: [& d$ P: ?) u Selector sel = ! e1 V: c3 S6 z+ [
new Selector (proto.getClass (), "heatbugStep", false);( c, ~1 L0 x. h M: F8 h# v- l
actionForEach =
S3 A$ s' H- f; k modelActions.createFActionForEachHomogeneous$call* P. p" `1 W& D& N3 f0 t
(heatbugList,
5 F& X& B) N. Y+ R. B5 z new FCallImpl (this, proto, sel,2 f: r: \: E& i
new FArgumentsImpl (this, sel)));; X$ I/ P: [7 S7 B" D. A7 \
} catch (Exception e) {
+ h5 g5 j' T8 [9 l e.printStackTrace (System.err);
" e1 f& }# ?) C1 g }; A( V5 t( ]# X
8 N3 N$ I, K) q. F. ^' s# ]7 Q
syncUpdateOrder ();% j7 i/ ^3 k3 x% H" j
2 T4 }# x* e: f' ^6 Y7 @$ {
try {
7 d# R8 P+ g ?! ] modelActions.createActionTo$message 5 R- d9 ]( o* ~2 h
(heat, new Selector (heat.getClass (), "updateLattice", false));
# {7 f9 i6 L" h! ~) R } catch (Exception e) {7 _+ S8 G5 A$ E
System.err.println("Exception updateLattice: " + e.getMessage ());
9 I& C# U/ l+ ]. B: d. R }
; |, H+ O! F& _( `: j5 I' z! G! D% O
. b2 k. |& o' ?% O // Then we create a schedule that executes the
& l( }- [2 A+ `# H6 F // modelActions. modelActions is an ActionGroup, by itself it' {4 V) Z7 o" {5 p
// has no notion of time. In order to have it executed in
5 X, e4 r# J! h+ o' m; I // time, we create a Schedule that says to use the- [0 k# t& Z$ n. e0 H1 Y+ a& J8 g
// modelActions ActionGroup at particular times. This
" N$ N. t* J+ h. T+ U // schedule has a repeat interval of 1, it will loop every
, U$ G- K6 K# b2 @' G' @ E // time step. The action is executed at time 0 relative to0 n- P1 K+ w$ ?2 v( x1 i
// the beginning of the loop.
: S/ w+ d0 S: @/ f2 h$ H# W& t) W
0 ]% S, j" _, G // This is a simple schedule, with only one action that is
1 E: E% ]- A( D0 C: h) m. f* i // just repeated every time. See jmousetrap for more
& {* z1 q+ j* ^% B4 j // complicated schedules.
+ k6 S: m- A; E ?* B 6 ~5 O" c3 o2 b5 R+ B) F
modelSchedule = new ScheduleImpl (getZone (), 1);# S7 l9 a1 u: z8 r" l
modelSchedule.at$createAction (0, modelActions);, y2 M1 ]' w+ c, S
- {, ]$ t$ Y7 b% v, |
return this;' K& ]7 ?9 b# G4 q* D) v0 v
} |