HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& O/ a \! ~' A1 T, w
0 ?( _) W% B0 D5 I$ Z
public Object buildActions () {3 R# S! S) J8 l/ K {9 I! [
super.buildActions();
+ t; E$ k4 g8 C( V& @ l$ C2 o & H+ a: w) v$ q7 v) b
// Create the list of simulation actions. We put these in7 M) q2 t4 J( K3 v" A
// an action group, because we want these actions to be$ `8 m3 e2 T6 \: K
// executed in a specific order, but these steps should8 x9 H4 f! l! T; U! v5 g2 @' e
// take no (simulated) time. The M(foo) means "The message
, u7 A1 s$ y" z& w$ [ // called <foo>". You can send a message To a particular
8 J5 b5 L) m9 ]! Y0 R // object, or ForEach object in a collection.
/ m( ]3 i( c6 O0 t8 M' x0 S
4 h; S2 v( l$ Z4 C // Note we update the heatspace in two phases: first run
! ]# I/ f6 H# k% l+ ^9 x# a7 M$ o! X // diffusion, then run "updateWorld" to actually enact the- c1 S% U5 [' z
// changes the heatbugs have made. The ordering here is
, T6 v) W; i/ U3 I$ l, v" @4 Y2 L& e // significant!) _ D$ R+ i+ V( k; d u
6 S* c2 G5 k& j$ o' ]0 [6 Q3 a, R6 E
// Note also, that with the additional
% ~8 l$ H" Y& w- n3 ]9 P8 L // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 b$ X1 c! M9 | // randomize the order in which the bugs actually run9 m4 j' Z2 k& d8 M9 R
// their step rule. This has the effect of removing any
- |! R( U: s% Y" n+ }) d // systematic bias in the iteration throught the heatbug
; N f) g7 o2 E7 }' I" M // list from timestep to timestep
0 O- Z7 g, F* \5 O \2 F+ j4 A% X9 s& G$ W8 u1 n
// By default, all `createActionForEach' modelActions have
; ?% T( Y! T1 D% [$ U( k3 l // a default order of `Sequential', which means that the% q' c% j9 y$ N$ R/ |& w( @
// order of iteration through the `heatbugList' will be- f, z" P; u5 `/ M+ I! b$ V
// identical (assuming the list order is not changed
8 @4 X) w' f/ ` // indirectly by some other process).+ I* J( m2 @2 R$ H" [! q2 _5 w3 ^
# d) L$ g) Z) }) l& ?( x: l% Y modelActions = new ActionGroupImpl (getZone ());
' Y- S1 u6 `( \3 K3 I0 ?6 u1 _4 F0 K3 O% w3 \. r/ X! D. o
try {# N# R- M) R. W3 }% }( P
modelActions.createActionTo$message
8 ?" b) E+ e& {' @0 l (heat, new Selector (heat.getClass (), "stepRule", false));
8 ~. s" Q/ R0 |) [6 q0 M" V6 U } catch (Exception e) {+ q0 Y( W% f6 }* J( [+ b
System.err.println ("Exception stepRule: " + e.getMessage ());
3 {1 t* C- b% ^1 Y9 U% O. R }
; F H ~$ {8 ?5 G: ^4 Y4 Q0 V
$ z& J! S+ g k R try {3 e- N2 G0 A G
Heatbug proto = (Heatbug) heatbugList.get (0);7 }, `, f- w7 f
Selector sel =
1 k1 i1 b+ l. w* }) d1 P new Selector (proto.getClass (), "heatbugStep", false);5 K$ C' C9 F0 R' v, h, ~
actionForEach =1 u! N, k: B, P' }6 k& s
modelActions.createFActionForEachHomogeneous$call
, z3 ]* M3 ]/ f6 I/ M& Y (heatbugList,1 r0 U7 V/ L( c8 }3 U$ z- y) a
new FCallImpl (this, proto, sel,# {, L7 R+ J7 Y* g& U3 ~
new FArgumentsImpl (this, sel)));1 J H2 u# O* j- w: ?+ u4 w6 G
} catch (Exception e) {
" _! E3 _ q( i0 m3 p$ o e.printStackTrace (System.err);# l6 g! h2 k, H* p% P% w
}
9 g% `" D, V$ N4 g& D * l; Y% @1 I* c. x( \: j
syncUpdateOrder ();
3 b: c2 A+ c1 H0 m, H7 K, b9 F6 v8 Q0 v* m, {, P. o# o2 y
try {( I. J% d) `+ L8 U/ \' J+ n
modelActions.createActionTo$message , l2 I; x" ~( b) ?5 @4 _4 o
(heat, new Selector (heat.getClass (), "updateLattice", false));1 z' u/ B% k( g+ b% k
} catch (Exception e) {5 S( j1 r A( d! ?! C
System.err.println("Exception updateLattice: " + e.getMessage ());8 a! \7 L- C8 N W- U
}
; I' e/ {4 t4 P3 Z) M
* ^+ \$ e# J% ^. e2 Y$ I9 F- I& d1 z+ U3 Z // Then we create a schedule that executes the
) F" Z/ [- X7 p // modelActions. modelActions is an ActionGroup, by itself it
* E' f6 P/ f A1 D& g ` // has no notion of time. In order to have it executed in6 t! ^1 p: h) X. Q: p$ X
// time, we create a Schedule that says to use the {$ s* j1 S. a
// modelActions ActionGroup at particular times. This9 H" Y+ M Q" O0 n
// schedule has a repeat interval of 1, it will loop every
& o; N7 R) } j) {2 g% J // time step. The action is executed at time 0 relative to) ^5 g8 l/ e3 }0 S8 U b- V
// the beginning of the loop.$ W1 E* a2 ~' X* u5 Y
, e# W' k8 ]( M" J4 y
// This is a simple schedule, with only one action that is9 |2 t# B% f+ t' f
// just repeated every time. See jmousetrap for more1 U+ ]' H1 D- v4 P8 o; M
// complicated schedules.
# B2 Z8 `% z! V2 d# R- p: R ) U9 N$ f" F& s+ Y6 {. B" ?
modelSchedule = new ScheduleImpl (getZone (), 1);! c9 k" A" f! t7 {" y
modelSchedule.at$createAction (0, modelActions);
) ?5 M8 R7 D* R. e p: W. ?
5 O2 |$ D! l* {0 K% D return this;: t" F* Z, p! Q- u: Z0 j3 R$ c
} |