HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- o8 }) F$ B$ K7 w5 X8 c
, }" }3 E" ?2 s' t8 M7 \
public Object buildActions () { w1 O. w% C+ s( i, w0 A2 ?. j! F
super.buildActions();- i% _. H) x% O5 a7 z
3 y$ c7 u7 N! P6 \' Q t p, F0 s
// Create the list of simulation actions. We put these in
2 L, m0 g; O6 w# _- Y2 N) @ // an action group, because we want these actions to be
: J }% [" h6 z4 |( h; [ // executed in a specific order, but these steps should
1 g, ~3 p) t) P# W5 s+ g6 q // take no (simulated) time. The M(foo) means "The message
3 m) e5 d7 E9 J. s // called <foo>". You can send a message To a particular& {& y4 q8 t$ {. K5 h
// object, or ForEach object in a collection.. a( D) ~( A4 d! z- ]7 X$ i
4 [$ v7 Y. d6 e. o // Note we update the heatspace in two phases: first run
* F* R9 Y# P& L& j; r2 s5 B // diffusion, then run "updateWorld" to actually enact the2 j9 K) R( v" l# v: N8 g8 b P. U
// changes the heatbugs have made. The ordering here is& X9 G( X. c% S+ Y
// significant!
% h* F1 y. V- l" W4 ?2 t - ^, H8 N. f4 c7 N0 `8 t) }2 P1 r: e3 v
// Note also, that with the additional+ G* D2 @2 j" O# a. b; O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
N7 j( y. i$ g, G9 w7 C- } ^ // randomize the order in which the bugs actually run
9 m1 L9 n" y8 Q% L // their step rule. This has the effect of removing any
- K( b/ [9 g u( `9 g; p // systematic bias in the iteration throught the heatbug) `5 b% O$ ?! C" P ~9 _0 }
// list from timestep to timestep4 @5 r5 B( [6 K w6 a" l3 T
- k# n" l; @2 k- r$ a; Q2 c // By default, all `createActionForEach' modelActions have
9 d/ H3 ~9 i: q // a default order of `Sequential', which means that the' u. n" {8 b. d( l! o
// order of iteration through the `heatbugList' will be
2 I2 H2 ^+ W& d8 F4 Z' X // identical (assuming the list order is not changed4 S" C0 Y+ t5 I* {' P
// indirectly by some other process).0 b" W. T* G; d B% K% u( ^
]5 a6 g, l9 p% W, o2 }
modelActions = new ActionGroupImpl (getZone ());
* E$ W* H- M! x6 W G# x+ }. n. \, I; a6 \
try {' N' |9 \! m8 z' q
modelActions.createActionTo$message, o5 r% ^( J1 c) D0 R% f5 G* F
(heat, new Selector (heat.getClass (), "stepRule", false));
4 \- }! Q6 a: T, n6 q } catch (Exception e) {1 f7 v v7 I, e: o
System.err.println ("Exception stepRule: " + e.getMessage ());# c' ~1 m* E( d5 j
}
9 p' `) g- E. x9 w6 y- i
- D0 |% ?5 w' ~ h- _ try {
& [% \* c* [! S$ d' V( z0 U Heatbug proto = (Heatbug) heatbugList.get (0);
1 t4 e% \9 u4 ]1 I4 m0 M0 u Selector sel = 3 F6 N2 N% m6 }) O2 \
new Selector (proto.getClass (), "heatbugStep", false);, P' L+ t x# ? O1 h3 K
actionForEach =
! S0 f% T! Y6 l r- j modelActions.createFActionForEachHomogeneous$call8 d: l+ k3 b; w$ x
(heatbugList,( P9 N; Q3 ]) b. R0 @' f% l
new FCallImpl (this, proto, sel,
t, A. X$ J0 b# ] new FArgumentsImpl (this, sel)));
# u8 X1 }$ }: t( G/ d4 ] } catch (Exception e) {
6 z2 E- Q7 u% H2 B e.printStackTrace (System.err);
3 w( ^' O' w! _ }
) m' m- { P2 F- n2 Y ; t4 b2 q# H" Y1 Y: V0 P* V$ B) O1 ?
syncUpdateOrder ();8 ~5 ~+ _+ b) t- P" L [# z
& T+ z0 ^" D8 o5 ?# C" u9 J" E
try {% H: ~9 ~; F, \, r% x4 Q# w
modelActions.createActionTo$message 9 W3 S: ]- O: ]4 v( _; L! m
(heat, new Selector (heat.getClass (), "updateLattice", false));
& s0 ]9 m- I F9 M } catch (Exception e) {
3 [; y7 |) F% P0 a6 r0 a System.err.println("Exception updateLattice: " + e.getMessage ());
9 A; Y( Z7 s# r; F8 k" p }$ |- t" ?, y5 ~. u& s
2 O& Y' O" [2 e* J // Then we create a schedule that executes the
3 N* A+ Y- G% F1 l M: T' G3 b& H // modelActions. modelActions is an ActionGroup, by itself it# Q9 p0 c0 R8 M0 Z5 |8 o
// has no notion of time. In order to have it executed in
7 v* \2 n5 H# g: k$ g4 Q0 L // time, we create a Schedule that says to use the
. e. q' o- b9 ^9 }; g // modelActions ActionGroup at particular times. This
2 a, S1 [ p7 q8 c // schedule has a repeat interval of 1, it will loop every, g! h" O5 m+ f8 z: i9 o
// time step. The action is executed at time 0 relative to6 F) d6 z$ `" A' H0 c/ U
// the beginning of the loop.1 H# O6 y; {* f0 T
' W, S% B$ k! c! S+ ]2 ~$ C1 \
// This is a simple schedule, with only one action that is3 _+ i" r9 U2 I" H# Y
// just repeated every time. See jmousetrap for more; t; _- s( u0 G4 i H& b! @
// complicated schedules.- l1 L0 i# o7 ~6 Q9 R
# K ^4 w% I2 N, L- j
modelSchedule = new ScheduleImpl (getZone (), 1);
( b5 y* y7 F5 R B) l modelSchedule.at$createAction (0, modelActions);
- g; D: ~0 R( v - O, @. i/ |9 \: b0 ~
return this;1 ]+ P7 B5 D3 O' R o- H
} |