HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- B p* D9 a1 l6 F
" ?4 B! X% b( D6 n y public Object buildActions () {& J7 U2 h- e8 p( V. j: j# X
super.buildActions();" y$ H5 M/ r( \$ I- I3 x& e
/ l- g- {" d# b$ p' } // Create the list of simulation actions. We put these in
8 m3 m$ @$ J: J6 { // an action group, because we want these actions to be
) V; P, b5 Q- o) ] // executed in a specific order, but these steps should
b- I; j$ E3 H // take no (simulated) time. The M(foo) means "The message/ m+ V( x$ z/ ~6 b5 ?) f; A# m* n
// called <foo>". You can send a message To a particular
) S7 J% t5 r# [5 s- |" g // object, or ForEach object in a collection.
2 E! g, k2 f5 A' g2 T5 c + k' K) X+ G# U4 [" c
// Note we update the heatspace in two phases: first run
1 ^: r1 E9 `( v8 Q% { // diffusion, then run "updateWorld" to actually enact the; Q4 G/ O* ~6 ]( o* W. M; v0 @8 v& X
// changes the heatbugs have made. The ordering here is, [6 A: G3 v; t
// significant!
( Y+ x3 M3 V3 z1 m, b , A7 `8 B( \ n; q* z& S
// Note also, that with the additional
; Y' |" R9 `8 ? // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 n5 F0 K3 f4 d4 V: u // randomize the order in which the bugs actually run
& ]7 V% W9 Q6 N4 p // their step rule. This has the effect of removing any
: D0 K: L+ Q: ]5 x9 g+ ^2 S! ?& J // systematic bias in the iteration throught the heatbug
+ x; d0 F0 g5 r: s) Q; } // list from timestep to timestep; S6 S! u: O3 D/ v3 a1 y5 ]
7 d' i# X- K2 u; Y2 a" | // By default, all `createActionForEach' modelActions have
% C5 q9 |" B5 m/ Y4 x* G // a default order of `Sequential', which means that the
6 H% X! W/ [$ w% B // order of iteration through the `heatbugList' will be, l* c4 Z! J& i4 y% E
// identical (assuming the list order is not changed6 B8 e! [/ l" p3 {" i6 W9 Q$ D
// indirectly by some other process).
~$ y9 R0 R m' f
* y% f& q9 X" X+ S& u) Y# N' t modelActions = new ActionGroupImpl (getZone ());
; }% K6 `3 Q/ j N3 L- Z5 Z8 {7 x5 I6 e8 j- E+ U( \$ ~) J
try {# W% Y+ r2 S, N1 W
modelActions.createActionTo$message- ?1 M+ _( }. F* D
(heat, new Selector (heat.getClass (), "stepRule", false));# b9 B9 t8 H0 o2 g3 p: f: M
} catch (Exception e) {; e# Y( o7 `, |1 Z. P
System.err.println ("Exception stepRule: " + e.getMessage ());0 B) U1 }8 X0 W7 p; x6 ?
}
], P8 q4 r z; n7 _& @- f3 U! H! r' o3 O J! t5 i
try {
! P; z! A- Y! a. N7 ?6 g, a( @6 Y Heatbug proto = (Heatbug) heatbugList.get (0);- c3 j9 v- k( Z6 c1 H5 L
Selector sel = , s8 l5 m. j; t* l% u2 M
new Selector (proto.getClass (), "heatbugStep", false);
" P+ ` O) Q7 ~' b actionForEach =
4 A( h7 s/ B. w! t/ c/ O( A; Q" i modelActions.createFActionForEachHomogeneous$call
) s* Z @0 C' Y3 _7 B. K0 i* O9 E) E+ x (heatbugList,: t K& u2 k: r
new FCallImpl (this, proto, sel,
' e! X& ^4 I, |0 | new FArgumentsImpl (this, sel))); H! l6 p; ^5 u" b$ g
} catch (Exception e) {
' n2 r0 Z- Z5 { e.printStackTrace (System.err);. t: I' m( v7 v @+ o/ x+ @
}) t s) |) d) u1 }( E) ^: k U
; s& S* H [' _1 m. c1 @' w
syncUpdateOrder ();
) S# u! @! a! G7 M
! D' }6 I; p) d/ h h+ D& H( p% R try {
V% }" u3 @, R2 h5 r0 @ modelActions.createActionTo$message 1 G' J1 v. o) Z4 ]
(heat, new Selector (heat.getClass (), "updateLattice", false));% @% N2 y4 f- G. B# ?
} catch (Exception e) {, q& k0 s! q" |/ ?2 s& A- s
System.err.println("Exception updateLattice: " + e.getMessage ());
' L4 w1 H5 D$ _5 J- K4 `2 \ }$ h6 X7 k* ^ A/ T4 c- t- \
. L* q$ l$ {* A# [8 B! h
// Then we create a schedule that executes the
$ H, U$ Z _5 ~. e1 u8 I. q$ _ // modelActions. modelActions is an ActionGroup, by itself it& L% s: e; @' o* e
// has no notion of time. In order to have it executed in- [1 B& ?6 r7 l( {; u" ?! F) `
// time, we create a Schedule that says to use the
9 Z+ J$ n4 v, }* n: G0 i) L // modelActions ActionGroup at particular times. This
1 @) z) n1 K, A: k$ I // schedule has a repeat interval of 1, it will loop every
1 C7 C4 q% u( B7 M8 I // time step. The action is executed at time 0 relative to& V0 _) W- \1 u! y; z
// the beginning of the loop.
" q; O8 ^8 \9 d7 ^! j
- \( l0 a' U! [ // This is a simple schedule, with only one action that is
6 F. b( f( q& L% i" J& D& U3 {8 o4 l% I. v // just repeated every time. See jmousetrap for more
2 k, O4 M: Y8 d: C, ^ // complicated schedules.
2 h$ @! l$ p) [+ _ ! U1 M, T7 ^$ s% [
modelSchedule = new ScheduleImpl (getZone (), 1);8 ~, C6 i/ W3 A8 n! M; @# I& z* D
modelSchedule.at$createAction (0, modelActions);
, g# g2 }! b, |* w 9 M. q7 a( t! }1 A% N- K4 k& G
return this;
( _: J8 x$ G \' i- Q$ v6 E* `& ~ } |