HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, @7 H2 W+ B; g) {8 a
9 C& Z8 v) u" p, \4 t public Object buildActions () {) [% ]' e5 H+ C; v$ G
super.buildActions();
- [7 _. A; z- E # @; ]- g2 a7 e8 B/ a: `& Q
// Create the list of simulation actions. We put these in
2 k; p/ [/ A9 D/ J# t# d Z // an action group, because we want these actions to be' ]5 \* b, J4 H, P/ O2 k) ?
// executed in a specific order, but these steps should
7 X- o( b s+ ]" ?' V // take no (simulated) time. The M(foo) means "The message; T) ^4 C/ S6 M H% h6 O; G( N
// called <foo>". You can send a message To a particular
3 d! m- R' X& @6 Y9 x // object, or ForEach object in a collection.! ^6 l+ S. M; [% ^" P! J- j2 u1 j5 E
- ]# L' W% T! g
// Note we update the heatspace in two phases: first run
" ~" ]. }! \: P/ j* J( r' w // diffusion, then run "updateWorld" to actually enact the
' N3 \) F) g3 O( h4 ~ // changes the heatbugs have made. The ordering here is
: _: W9 ]* i9 H6 B // significant!) U1 ~5 j4 H* H$ Q& ?
" D# X1 a- z6 o2 H+ v
// Note also, that with the additional
$ \0 g4 r; j/ a/ v // `randomizeHeatbugUpdateOrder' Boolean flag we can! k& x- J) g8 p0 H
// randomize the order in which the bugs actually run* [3 |0 G% d! N' C S2 o
// their step rule. This has the effect of removing any
! Q$ T `, O/ d" G' | // systematic bias in the iteration throught the heatbug
/ x) W4 n w" d // list from timestep to timestep
; ]6 e& A7 V) `) |0 A3 Q& d 6 A9 l. z+ @' \7 O6 C
// By default, all `createActionForEach' modelActions have8 z; W! V8 @. C
// a default order of `Sequential', which means that the6 Y& n' M0 Y/ ~# z
// order of iteration through the `heatbugList' will be
) A' ? C/ w% D; i+ i; g1 h% S: j // identical (assuming the list order is not changed% `& j9 Z5 w# c) X
// indirectly by some other process).
% P' a1 u( t* @: J' j( k
( q# q, Z1 n/ J: R modelActions = new ActionGroupImpl (getZone ());0 N! q4 A$ r: ?2 g
1 v4 f& Y( P" R$ \0 t3 `1 [: H try {1 I9 ?2 |9 J9 m# w4 \% D2 {7 k7 J6 O
modelActions.createActionTo$message/ @( M. S. g# R0 ]1 B) @ t) q
(heat, new Selector (heat.getClass (), "stepRule", false));" e* x ?) S" j
} catch (Exception e) {
3 R' k8 t$ E4 e E4 L5 e, b/ ~* d System.err.println ("Exception stepRule: " + e.getMessage ());+ p, D$ l1 J/ Z% L) v4 i7 P
}
: o' H! t/ n' P% V$ n
$ ?( O4 [# B% |$ U$ h: ?3 w- D0 C: y try {
, r7 Q: [: S1 h4 P8 T Heatbug proto = (Heatbug) heatbugList.get (0);+ G8 b3 w4 D' @ @2 l9 K" x
Selector sel =
, I& n5 u& G1 b/ C1 T3 x4 |; G" f new Selector (proto.getClass (), "heatbugStep", false);0 Y5 C4 l% @# q: C2 U9 {
actionForEach =
" o, @% @: k$ S modelActions.createFActionForEachHomogeneous$call; Z! T5 y$ K' H! T; h9 m A0 }
(heatbugList,7 j- `$ }6 Y) b/ N, |
new FCallImpl (this, proto, sel,2 ]+ K' I$ T7 A9 O4 y; k
new FArgumentsImpl (this, sel)));
3 J! Y) y& [: D s# n5 A+ j } catch (Exception e) {
- Z) p5 }- Q( S5 I8 a7 ? e.printStackTrace (System.err);
- j5 i4 D. m3 p& W# t; K }
8 o% j! b7 ~( A# S) N " L! y( S2 U' `. [( B- a$ Q
syncUpdateOrder ();
4 m) S! n, Y+ V9 X. K/ L1 P; o6 w; T$ e% i3 l/ F1 e ^
try {- R ?% T% }1 B8 c! [
modelActions.createActionTo$message
! N3 ^3 m1 w% k- E# _ x# _, F: a- [ (heat, new Selector (heat.getClass (), "updateLattice", false));) e- ~/ i- s% k5 z" m6 z
} catch (Exception e) {
' \; R( ]0 v" w' @" I# J System.err.println("Exception updateLattice: " + e.getMessage ());# ?& I/ Y [0 E: H
}
, X* V: ~+ @- g4 e
! f& o+ e, ]* C- B: P$ { // Then we create a schedule that executes the1 F% P% t0 u5 ~
// modelActions. modelActions is an ActionGroup, by itself it
1 g" r7 ^( }8 ?2 s) r) L // has no notion of time. In order to have it executed in
- U/ A3 F. f( e2 J // time, we create a Schedule that says to use the5 g4 Q5 R8 F* E2 n5 \* ]
// modelActions ActionGroup at particular times. This
1 K r7 H1 U8 e8 R2 J5 } R // schedule has a repeat interval of 1, it will loop every
: c% {2 z& o# N0 }6 r // time step. The action is executed at time 0 relative to, \0 D3 G- ?- \: r0 L
// the beginning of the loop.
$ F# O" z. {: |3 H
, X* J5 [5 W" Y+ ] // This is a simple schedule, with only one action that is
9 j; Y& Y/ v6 q // just repeated every time. See jmousetrap for more
) J7 M v2 {# c; r7 { // complicated schedules.; P. s: p8 |& w# A) M
) K/ y- u0 y# I, Q8 N modelSchedule = new ScheduleImpl (getZone (), 1);
1 ^9 B2 `4 d9 e; P0 M$ ^% c6 ?$ N* d modelSchedule.at$createAction (0, modelActions);# D7 h( p6 x/ w" L5 Y. t
' A+ G: }2 @) U" t return this;$ U8 l# y0 G/ N4 V; U+ c
} |