HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 ~* R% P0 G1 ?/ V- ]% ~
3 l" ?0 q3 z# a! d# m2 l public Object buildActions () {5 i* v* Q& d/ l7 B/ q& ?; K
super.buildActions();# ?" s2 D) i) `, U7 l: `
7 V; b% _+ i1 U* b( ~5 n& } // Create the list of simulation actions. We put these in
: O) n% D, A$ Z6 H5 Q // an action group, because we want these actions to be
5 L, C2 M4 z5 p1 I0 w, t // executed in a specific order, but these steps should
7 p" m) b" k3 v4 _ // take no (simulated) time. The M(foo) means "The message) `' z% S5 X" Y: e
// called <foo>". You can send a message To a particular* U. k6 j9 c* y; S
// object, or ForEach object in a collection.; N2 E! _3 R( M; I& Z
- w5 W! S/ [" i. z7 Y7 }
// Note we update the heatspace in two phases: first run# ]! Q; B/ R3 {9 r J; |) [
// diffusion, then run "updateWorld" to actually enact the- r( b3 M1 N# C% ^" d# O& W8 X. u% k
// changes the heatbugs have made. The ordering here is: M( \1 n4 N, N1 ^3 \# J ^
// significant!
" f9 L( R% J* |6 `
1 e0 {5 [3 }9 c // Note also, that with the additional! K' n1 G( S" [1 S: I- o: [
// `randomizeHeatbugUpdateOrder' Boolean flag we can/ l" [5 F: O% v9 e
// randomize the order in which the bugs actually run) l" Y- V8 H. I. |3 q; j
// their step rule. This has the effect of removing any; l: p9 Z& h- w' i
// systematic bias in the iteration throught the heatbug$ I- f# H8 Z* {3 N: k* c2 U
// list from timestep to timestep
7 [! s3 y0 I& Q X+ D. R+ @
/ m9 U3 D1 h- e5 V$ u6 i // By default, all `createActionForEach' modelActions have" }% n0 Q/ q3 Z# w
// a default order of `Sequential', which means that the
# S2 F: f& L7 X" o5 Z+ k7 r( a // order of iteration through the `heatbugList' will be1 v# \% t2 Z n" g2 A* Y
// identical (assuming the list order is not changed: m9 K2 ~+ Y5 E) t' m7 R+ c
// indirectly by some other process).
) J6 R& I' U7 W8 O0 B/ Y
# Q- s5 n& ]+ N: i modelActions = new ActionGroupImpl (getZone ());
/ H& T. x8 e$ I5 t* H! h/ R) C: N9 e7 m% ^7 P8 q$ S9 q# ^
try {6 L( Z7 G9 {4 K% l1 k6 ]# P* L& {0 V
modelActions.createActionTo$message ?" |. m; e6 h$ e8 `/ w
(heat, new Selector (heat.getClass (), "stepRule", false));
% i0 p1 ]' a, i } catch (Exception e) {+ T$ K+ i3 A# c: v
System.err.println ("Exception stepRule: " + e.getMessage ());5 J" D& m5 v' J4 M1 w6 r6 m
}1 g/ t& T# @+ K9 y$ u: e
) w2 s. z% K* Z5 E
try {
$ A% |5 r2 ~# j8 ^ Heatbug proto = (Heatbug) heatbugList.get (0);
' \# \. h: o. Z- y) L* b Selector sel =
% g5 W) H G. B- t new Selector (proto.getClass (), "heatbugStep", false);- L D7 ~& V0 A$ T( p
actionForEach =
8 b6 X0 E( s( w* r3 O6 s8 L modelActions.createFActionForEachHomogeneous$call
1 q& A I1 T& n2 @/ U7 A" w (heatbugList,
$ d) h5 l1 R& Z; c( u new FCallImpl (this, proto, sel,
- l, @' J l( n O5 r. I g( q new FArgumentsImpl (this, sel)));7 _: ]) p% N% k; ?' U0 f' M4 U) Y
} catch (Exception e) {
* e+ _/ A) e1 S& I0 g4 E0 @& g e.printStackTrace (System.err);: l; G" q4 W7 I; P; D) M
}% i: Y4 @! ]6 d$ I; ^
9 h) r& H V5 L' ]6 k syncUpdateOrder ();0 L0 U( F! P2 s- U6 W& y' h& f: i
$ S5 u3 F7 Z8 V! I
try {
# h8 h8 A' H# n) X+ x modelActions.createActionTo$message 2 C6 a, _# m3 m, |7 _& x' d
(heat, new Selector (heat.getClass (), "updateLattice", false));/ B6 D* C( l1 c+ e. |) v
} catch (Exception e) {
- M# m6 R1 w& s& M" n% j System.err.println("Exception updateLattice: " + e.getMessage ());* c+ u4 ]. u2 H) U6 ^- m& |2 L
}
) k* K9 w% U8 k; f) c( y( C
7 S+ Y! o$ b( T0 Y/ g: A! D; Y // Then we create a schedule that executes the
i/ N' Z9 y; k }0 N8 S // modelActions. modelActions is an ActionGroup, by itself it- P+ C- T2 _5 {: G3 ~- t
// has no notion of time. In order to have it executed in
( h5 ~' c5 _ N }* W2 S! S // time, we create a Schedule that says to use the+ @( J* U7 x) d/ |
// modelActions ActionGroup at particular times. This
% @' R$ x6 t6 C) o% y# \ // schedule has a repeat interval of 1, it will loop every- J! g& Y' d$ |# c
// time step. The action is executed at time 0 relative to
: o% _1 b k7 y% V& m) d // the beginning of the loop.6 m' Z; q: \) A2 N% L9 K$ a" E
/ Z0 m p- M/ f, ^* Z& E
// This is a simple schedule, with only one action that is* ~: q- C$ c+ m( t" }# c: F
// just repeated every time. See jmousetrap for more
3 S* ?2 ^# ~/ @# X+ c // complicated schedules.$ k8 P8 P, | F
4 d" i4 x7 f; c/ \
modelSchedule = new ScheduleImpl (getZone (), 1);
. Z9 l; E4 j% w3 F; X& e modelSchedule.at$createAction (0, modelActions);0 l: R/ l( r: x) u; c( z# o
5 F) e# o4 ]4 H( z( x; c, _ return this;) F! F0 p& d2 g6 ?$ R5 {
} |