HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 B+ N9 f( ~7 u5 P
. G9 r! i9 Y- O6 ~2 Z- T: w
public Object buildActions () {
. C8 n; t3 y) k4 P5 K super.buildActions();
% d$ H9 J5 W9 f! a
# b6 w! |' G8 l. ^0 B4 Z0 {7 Y$ N // Create the list of simulation actions. We put these in
' X, A$ e6 q2 i0 b3 V // an action group, because we want these actions to be P# o9 u0 P$ q0 Q, A' [7 T
// executed in a specific order, but these steps should! V2 e. y3 l( k# g
// take no (simulated) time. The M(foo) means "The message2 O2 Z+ J& t2 q( T/ i
// called <foo>". You can send a message To a particular
# m$ h, M* F- `* i, }8 {' H( A // object, or ForEach object in a collection., {3 A, |0 `/ s; B
+ C( E5 I: M- a$ G/ h+ T // Note we update the heatspace in two phases: first run+ K ]& z: ]; ~* N
// diffusion, then run "updateWorld" to actually enact the
7 m3 d7 d* O' _ // changes the heatbugs have made. The ordering here is
4 i; i5 W2 g0 P d1 w& _' F // significant!
& O. s2 M4 u* Y1 u' u! v) n 7 O& \7 a' v, q H' g
// Note also, that with the additional! \( O7 @! u4 ?5 K+ q
// `randomizeHeatbugUpdateOrder' Boolean flag we can& x7 O+ X+ z6 U# d2 S2 @
// randomize the order in which the bugs actually run
# E1 O8 }" \& z9 a# x; l. L2 g // their step rule. This has the effect of removing any
3 F. D3 P. _5 R( } // systematic bias in the iteration throught the heatbug
! [; C W: j0 z/ \- @ // list from timestep to timestep
+ D* G0 T. x7 @) E / {, n" o7 g$ m# \- p9 t* v4 c; h$ P
// By default, all `createActionForEach' modelActions have
! K! `( N& V- |# R( ?( {3 j+ { // a default order of `Sequential', which means that the
# T+ B0 C! m- Z9 E* N" S // order of iteration through the `heatbugList' will be+ O+ x2 g' w* B3 l: {; t8 B8 N
// identical (assuming the list order is not changed( t3 j# n) v+ h! z, H+ v
// indirectly by some other process).
" E6 i! W9 K$ V: R+ A: ] m# n5 v ! P$ n) n( Q+ G% _/ C! e
modelActions = new ActionGroupImpl (getZone ());
1 V* w; z2 e- q- w, b+ o
! x( Y. O; k0 H# g7 C6 O" ~ try {
8 c( J& }" i4 e modelActions.createActionTo$message- T$ S' R2 G# K# H P: ~1 u/ x
(heat, new Selector (heat.getClass (), "stepRule", false));
1 p1 O! @. d+ U2 C& |1 A- Y6 H! { } catch (Exception e) {
: M0 |' E6 Y3 \8 c5 b) N System.err.println ("Exception stepRule: " + e.getMessage ());
6 h$ X$ P& I) J/ [: a9 C/ g' c }) @9 ^+ ?$ @( e" L' S
: K- Q# A3 W+ p try {
0 `; d# U# S/ L1 a9 m Heatbug proto = (Heatbug) heatbugList.get (0);2 l8 r; X7 f2 T! Q$ i2 e. R9 u
Selector sel = $ y. V3 m. q, ~5 T$ P( C! l" y2 o
new Selector (proto.getClass (), "heatbugStep", false);
" ^3 e" m6 m7 h9 k# w2 q6 P actionForEach =
w! ~6 @- H' [+ [$ |* y modelActions.createFActionForEachHomogeneous$call
) T/ B( J1 n, `& \ (heatbugList,
n; ?! d$ W' @* q% T, e& r# }+ t( m! c new FCallImpl (this, proto, sel,
. [6 V2 L. s+ A# f/ F7 `' ?1 @9 R new FArgumentsImpl (this, sel)));; m4 d1 H( r5 N
} catch (Exception e) {
/ c; F: c" c: t$ _, Q4 ^ e.printStackTrace (System.err);
8 l- A" g7 t8 M' V( q7 G }
! E* i' h; U6 t! S) R3 w0 Y - g8 `, }) Z: X1 Z. q* C2 W3 l
syncUpdateOrder ();
7 O- X/ y* m: x) N* g) x$ i4 e: p) o7 w) p( x
try {& F, Y) L& f4 p/ g& e0 p/ k D
modelActions.createActionTo$message 0 N i" `# b, D) j! m" Q8 S; B+ E1 L
(heat, new Selector (heat.getClass (), "updateLattice", false));, o! X( G2 Q8 a ]2 _
} catch (Exception e) {
2 P+ `) Y+ f7 {/ g System.err.println("Exception updateLattice: " + e.getMessage ());9 j- T4 `& i1 J; Y" x" ?
}" R4 t9 \4 Q( L4 C
2 e4 e& }' g' h. [$ x4 l // Then we create a schedule that executes the+ w) z8 Z' f+ c9 ?0 u) E! ]
// modelActions. modelActions is an ActionGroup, by itself it9 T* G4 N, p! i3 u! a. O7 P
// has no notion of time. In order to have it executed in+ n1 P1 {. y% {+ u# ^4 U
// time, we create a Schedule that says to use the
0 z* t4 w: Y( a. J c // modelActions ActionGroup at particular times. This
& l; {) |" ~/ a* a7 R- i! u // schedule has a repeat interval of 1, it will loop every
. Q( }8 A* U$ j9 ?4 _- A. r // time step. The action is executed at time 0 relative to' c: e% _' A m, N {( _) B
// the beginning of the loop.$ T1 D3 b3 [4 R- N8 U0 Q9 J. t
, r. ~, c4 ^) y2 Z& m- ]* E" I
// This is a simple schedule, with only one action that is6 A! H9 i b; n
// just repeated every time. See jmousetrap for more# p- A9 ^* {# M- L
// complicated schedules.* a. P$ O' h' f. W
, N/ P& e6 ^1 ~8 P- J n. J
modelSchedule = new ScheduleImpl (getZone (), 1);; r+ J6 O. n2 E( T/ U. `, N b3 z, p1 W
modelSchedule.at$createAction (0, modelActions);3 `# ]( Y# q$ l* k
) V) l( q; V4 m2 T' C
return this;& g/ e9 |: h6 R2 y4 d
} |