HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 x/ B: W/ ?- ~0 K I9 E9 l, I0 V) k1 j
8 I* V. h) {1 l; v p0 W# I public Object buildActions () {
6 v9 g) Y9 ~/ } super.buildActions();% y# Z7 H. g2 C0 Y' l, f' B, Z
( [4 n1 q( t8 b$ \ q
// Create the list of simulation actions. We put these in
9 w: ~9 q0 B( e& t& C. R // an action group, because we want these actions to be
5 n. j0 t6 o# B Y7 r% }: { // executed in a specific order, but these steps should# u1 A$ Z [4 s- J
// take no (simulated) time. The M(foo) means "The message) `6 Q, a8 V* b; ]' @2 B' ~
// called <foo>". You can send a message To a particular7 S6 X" D+ c; x, j8 h
// object, or ForEach object in a collection./ c' L5 A5 j( z8 H( c! O' \$ ~
% Z4 L; V* E7 H/ e' F5 c1 S // Note we update the heatspace in two phases: first run- [' ~; [9 U5 `6 z, b5 A6 r
// diffusion, then run "updateWorld" to actually enact the
, v+ D( ?$ |8 l' U // changes the heatbugs have made. The ordering here is
) R+ `) o) ^4 x% I# }3 J // significant!
4 y- e: O' z# f8 g! `( W2 i 2 q, U1 }$ k% l" Q
// Note also, that with the additional' S' X1 b: T! c7 b, ^ o( n
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- P/ M$ m. a$ z' |$ X1 Y, j // randomize the order in which the bugs actually run+ t6 R C: L5 {' v
// their step rule. This has the effect of removing any% c( }. L* D$ I+ a5 k* L b
// systematic bias in the iteration throught the heatbug4 @6 ~* k" h9 E3 F% T8 r4 r" }4 d
// list from timestep to timestep3 J4 U g" [7 i
5 p- j ]. J+ m! j! z3 V9 t( m // By default, all `createActionForEach' modelActions have$ P( j4 W6 E2 E. ?6 G1 z( R
// a default order of `Sequential', which means that the
! {. Y% T6 d: d! p) s; S+ t( p // order of iteration through the `heatbugList' will be4 d0 u* r& z! u' c- E _$ q! `
// identical (assuming the list order is not changed
7 a& w' |; v0 m- Z3 A$ x; i+ n- @ // indirectly by some other process).
6 w& N# ?* [! ?9 x# m7 B 9 c: j6 G2 E+ P
modelActions = new ActionGroupImpl (getZone ());
* S% Z5 r8 {; h+ ~2 }) A; W$ H( j* b# @3 K
try {$ [2 t6 P% o$ f- {- N0 }* i9 ~+ [4 L6 N
modelActions.createActionTo$message
$ Y% y$ ~; N9 W. h3 Q (heat, new Selector (heat.getClass (), "stepRule", false));. @) x9 z5 r3 K/ o- B3 F( y- ~& e( v# O+ l
} catch (Exception e) {% P4 a/ _/ O* u0 l7 E
System.err.println ("Exception stepRule: " + e.getMessage ()); u3 N" \& U6 E' i3 b' J3 X5 D: S6 p
}
4 l& @8 c% ~6 T9 I/ \* b U4 C; z W& l) v3 O
try {
) Y% _9 Q1 N& y' I Heatbug proto = (Heatbug) heatbugList.get (0);
) [% z, H @6 I# V% w0 F Selector sel = * q) c5 r0 }1 A8 f
new Selector (proto.getClass (), "heatbugStep", false);6 z) S. t# p( A/ ]& s( M
actionForEach =
( E, [" ]) p6 B4 v! w modelActions.createFActionForEachHomogeneous$call8 ~$ h' v+ C$ X4 s
(heatbugList,
7 I: W3 j$ G% h$ k: k! g new FCallImpl (this, proto, sel," L: y/ G9 j- F6 s f. U
new FArgumentsImpl (this, sel)));; p* R& \$ P0 S( X( L5 d
} catch (Exception e) {
) o8 p2 w4 m# A4 U" U e.printStackTrace (System.err);
( O, e6 y# a# r+ ~2 T4 ~" S }
$ L( _% U8 J7 G , R8 J; ^1 `/ S' z$ H+ }
syncUpdateOrder ();1 @$ I/ ~* ^- z- x# {
1 `" `+ r# n/ r: w' N& j( ^ try {
& q0 \* G8 h% k# w- n modelActions.createActionTo$message
: c+ ^2 o2 r" B# l (heat, new Selector (heat.getClass (), "updateLattice", false));
" n1 j8 y7 _3 T* O3 H0 | } catch (Exception e) {4 ^. V% D/ T6 `# F. v
System.err.println("Exception updateLattice: " + e.getMessage ());
/ ?2 J1 y+ P ^0 E8 { }
4 I7 t- W2 l, U, e! K w 7 ^7 D2 m# s' t
// Then we create a schedule that executes the
8 @+ G9 N( o* b // modelActions. modelActions is an ActionGroup, by itself it
' w9 d- `7 o, S% w% A! a // has no notion of time. In order to have it executed in
- W2 W9 w& Q# C5 a/ M // time, we create a Schedule that says to use the+ R7 q9 q3 b t& w# k) k
// modelActions ActionGroup at particular times. This2 i1 `4 ^2 z( c' W0 B1 @% H
// schedule has a repeat interval of 1, it will loop every
4 R! H7 y. {" o4 } // time step. The action is executed at time 0 relative to
1 b5 J6 Z \& S# Y9 M // the beginning of the loop.* P- w; x9 z% d3 O" N4 I. O. t4 i
0 w( a( k. ?6 r4 Z: ]* {
// This is a simple schedule, with only one action that is$ H2 D* \0 h2 B( I0 Z0 E
// just repeated every time. See jmousetrap for more
$ |% Z: x" x) E+ Y. [; i! W- G. I // complicated schedules.
) l. M) R: e: ^# c : V6 L" F% h1 M, _- s; V
modelSchedule = new ScheduleImpl (getZone (), 1);
& y: w( R( @% Z# K% X7 k modelSchedule.at$createAction (0, modelActions);: E$ F: ^3 S* G9 ?$ i1 v; A
4 i( T9 a7 T* J) K7 s return this;, n' C" R! q/ `: q( Y( c
} |