HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% T1 r0 p R9 v! O# b
* Q8 e+ y4 a* ] Z* ?$ r- J+ J public Object buildActions () {
, l3 x3 d2 w# G super.buildActions();
& Z8 c* @# a, s5 q5 m# o3 H
1 B! z8 ?0 K9 Y // Create the list of simulation actions. We put these in+ h* H0 F* D6 p. B1 g# p
// an action group, because we want these actions to be# Y v) q: u/ J) ?0 R3 V- B6 f* @
// executed in a specific order, but these steps should+ ^+ ^; ]/ o$ B
// take no (simulated) time. The M(foo) means "The message8 q0 m7 X9 S* A+ X* s9 o* Y
// called <foo>". You can send a message To a particular2 m. N. o6 A! ?" l
// object, or ForEach object in a collection.' w/ v6 [( _* F. X& q$ J- R z
O5 l2 f" t4 x // Note we update the heatspace in two phases: first run W% o1 |' X; ]; `
// diffusion, then run "updateWorld" to actually enact the
% T6 m3 p4 F& K( ^ // changes the heatbugs have made. The ordering here is
! `3 D0 n3 [5 [5 i7 B3 j% r // significant!
) a6 X0 |0 c. i6 H1 P. F+ V3 r
k! U1 I2 x, _# D2 a4 X. h // Note also, that with the additional6 ~. X/ N# {4 @+ \5 p9 y
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 Y! I1 j2 K$ E; Z7 ?' R& p2 Z
// randomize the order in which the bugs actually run* |' M. c. t% h" @. H) u
// their step rule. This has the effect of removing any
( J: Q, ~5 H# `; Y' B5 S1 c# F // systematic bias in the iteration throught the heatbug
9 U5 n- P' Y/ i5 R // list from timestep to timestep
$ X8 @0 D( g0 _+ k1 f ! }5 Q$ y1 e: _5 n! d+ w4 S* w8 I
// By default, all `createActionForEach' modelActions have
4 a I ~0 Y6 D# L0 a // a default order of `Sequential', which means that the
$ G, y2 v; F) O // order of iteration through the `heatbugList' will be& |& z# x6 ]/ V, N4 q( k; b& z( p, F
// identical (assuming the list order is not changed
+ T5 ^; u( h( F% W, }% w( g // indirectly by some other process)., d* J7 v7 h5 e0 ]: H: Q7 i) A- N
# C$ Z- y$ s% D' V
modelActions = new ActionGroupImpl (getZone ());3 q' m& a5 |$ K% O$ b& k' Q# m1 }
& Z$ ^5 K5 o3 ]4 F try {+ V! u. D ^: J3 Y
modelActions.createActionTo$message
5 [4 f2 E# s: J0 Z (heat, new Selector (heat.getClass (), "stepRule", false));
. b) V# a9 a% ? } catch (Exception e) {
4 H$ i" r* }0 j, z5 q System.err.println ("Exception stepRule: " + e.getMessage ());
% U+ m4 L: J c3 {3 o }
7 _6 a' x' d0 u& j1 W* \8 |) H* Y- W' [0 B8 m8 {* ~6 ~: ?
try {, o' @3 L$ G! W2 s
Heatbug proto = (Heatbug) heatbugList.get (0);) ~7 P& r2 F: B3 H3 t" M1 Z
Selector sel =
" f# W5 u. Q- P' k3 l3 M, R new Selector (proto.getClass (), "heatbugStep", false); d! \* b% B n. i
actionForEach =
$ x& x2 R B( s. |3 | modelActions.createFActionForEachHomogeneous$call; v& e) j& c/ V7 q6 `6 i
(heatbugList,4 o( O- Y( U X8 D8 o" j* @
new FCallImpl (this, proto, sel,
8 Z+ I& l' _0 p% V; g; W new FArgumentsImpl (this, sel)));' Y# i3 D# Z5 W
} catch (Exception e) {' G4 |+ g; [: d: ?5 T$ I2 ?
e.printStackTrace (System.err);8 S+ p+ |9 |- r6 A& d
}
: {7 t- T9 k2 j1 i3 [/ k l2 o# O- M 2 r, b' D3 |) i, M4 ^
syncUpdateOrder ();
$ o0 g) f! l# F. ]6 y! J3 z2 m4 Q, E% w: A' Y4 g
try {! C$ F: ~, W! Y* ~% K6 C+ Y# x
modelActions.createActionTo$message 9 z% d$ s! ^5 [( {
(heat, new Selector (heat.getClass (), "updateLattice", false));
9 i# s# F0 }" Z/ ] } catch (Exception e) {
+ c- l9 ^9 d! A1 J7 I! t4 ?8 A2 e System.err.println("Exception updateLattice: " + e.getMessage ()); m( |9 \/ e7 {. X" V$ x9 s( f
}3 F& N& T9 R& i5 S( c; r
/ A6 ^& w, t. W# m# w8 m // Then we create a schedule that executes the0 |" g7 L. W, e3 V6 O4 o
// modelActions. modelActions is an ActionGroup, by itself it
5 q# B. V% u' a/ F1 e // has no notion of time. In order to have it executed in' r: u0 ^, d7 ^) i4 p+ T1 q
// time, we create a Schedule that says to use the
3 c0 W/ v% l0 L% ?: I3 U3 f // modelActions ActionGroup at particular times. This a- q+ G) ?7 c* Z* S: B+ p
// schedule has a repeat interval of 1, it will loop every) Y! A9 U3 P' D/ P9 i4 G i
// time step. The action is executed at time 0 relative to/ ~) y1 S" k" d8 ~0 x
// the beginning of the loop.2 x9 T5 F: C( h1 {: S1 l
# @ R) s; ~/ w7 M& K% s // This is a simple schedule, with only one action that is! E. F+ x. W$ a- I% Q6 s3 \2 w2 y
// just repeated every time. See jmousetrap for more
0 ^) r! [ h8 [ // complicated schedules.
# X% `, |% E( {# _9 H1 ? ' l O) u0 d" ]. C$ M
modelSchedule = new ScheduleImpl (getZone (), 1);- Q4 E2 G ]# \# F% s
modelSchedule.at$createAction (0, modelActions);+ _% N* T9 }; T( P: w
8 D% e- v. C$ k+ A
return this;
+ ~. J! l } d2 x/ o S } |