HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 l! \9 M, T; z, L( W
: K8 N6 \5 d( [$ c7 F' { public Object buildActions () {
, Y4 n0 R0 N/ d( U. B4 o0 ~ super.buildActions();
) s/ C( q, @( H/ m0 C4 I8 l' P
8 N+ x' K8 R/ [: Q( b // Create the list of simulation actions. We put these in9 H& y' ?1 P1 k4 V- k3 X( _
// an action group, because we want these actions to be
# P, S0 p; [: ^ // executed in a specific order, but these steps should; |+ R; ?7 A* F1 D
// take no (simulated) time. The M(foo) means "The message
+ W9 u& `6 e4 A/ S' |2 F // called <foo>". You can send a message To a particular" N& z/ ?* T* ^4 n( k Q
// object, or ForEach object in a collection.
0 C3 G7 N4 g# U/ P m6 S ! t1 v6 Y% U: i- W
// Note we update the heatspace in two phases: first run
! i% k+ B% s( @* a1 v' Y# W // diffusion, then run "updateWorld" to actually enact the
% h$ P6 l: E6 y; p+ t // changes the heatbugs have made. The ordering here is0 c( p$ r) @( Y! G
// significant!' d) k2 [( m' C
8 n: Z$ s+ Z& S1 {0 j+ m$ S6 \ // Note also, that with the additional
8 ]% A5 l9 w. H( Q9 i9 Z/ |4 t // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 ~: |! `7 J& @ // randomize the order in which the bugs actually run
# a+ s) c$ u/ H4 Z, d/ c" K // their step rule. This has the effect of removing any
/ E6 @5 I: W9 v, X2 M: O3 o- q, Z1 k // systematic bias in the iteration throught the heatbug
' J4 G9 \6 B) u2 a7 W // list from timestep to timestep! y; `7 Z: y! b' p/ n# [9 ]) w9 F
# L! B, i9 G! ^% }& n" x/ u // By default, all `createActionForEach' modelActions have: c: f3 k+ ~2 P2 J0 x
// a default order of `Sequential', which means that the
9 t/ ?2 a4 x) U, a9 x* z // order of iteration through the `heatbugList' will be6 B* w5 d2 L5 u, C3 B
// identical (assuming the list order is not changed
/ w1 Q& [: K. p" h3 f; n // indirectly by some other process).
8 |" a1 G( a/ X% p$ v7 x
# `$ l8 Z, K) b( E modelActions = new ActionGroupImpl (getZone ());8 b2 S; w0 G0 i. A
' B V$ r( O# j' N6 D try {, y3 J9 O* r* O7 t6 M
modelActions.createActionTo$message+ k8 G5 i! h) i( }
(heat, new Selector (heat.getClass (), "stepRule", false));
$ K y6 ]& s: v4 d) m3 O8 Z6 l } catch (Exception e) {
) M: D4 u E6 |3 G' E2 Z System.err.println ("Exception stepRule: " + e.getMessage ());8 r! U; j& l0 N4 J2 B) n
}
" x* h2 f# z. _6 I8 g/ v. F. `8 ^0 y" w9 J
try {
& p, ~ Z: o: _+ t Heatbug proto = (Heatbug) heatbugList.get (0);
8 s* n' d+ y, }/ w0 r4 X Selector sel = : I$ V6 C3 t5 Y/ }: e
new Selector (proto.getClass (), "heatbugStep", false);
# [( z4 O5 r: k& \" I actionForEach =' K. ?9 P; Z0 j
modelActions.createFActionForEachHomogeneous$call
9 w: D6 _ C a: R3 ?+ K (heatbugList,5 L+ T: l0 Y: d: p0 R
new FCallImpl (this, proto, sel,6 @7 z+ Z2 b- n- I4 _% t' Y
new FArgumentsImpl (this, sel)));% _: P3 Z# l& s; h
} catch (Exception e) {, W% E$ {" H' `/ i F4 `
e.printStackTrace (System.err);
! p+ S, r+ `4 i' H; J } b, {8 g! O' C p
' U1 F+ e3 C% m h5 }# G6 s$ d
syncUpdateOrder ();/ n; y' W' U3 Q% P; C
: l+ G) ~$ _+ z& V, Z
try {% |: [: G' A ]7 F; r6 ^( p) q
modelActions.createActionTo$message
5 u% C- P8 o$ t) @, W$ { (heat, new Selector (heat.getClass (), "updateLattice", false));
6 Q; |8 b9 q0 t( C9 s } catch (Exception e) {4 I9 P7 D7 _0 k! q- d; t0 o
System.err.println("Exception updateLattice: " + e.getMessage ());
3 T! H/ X. F4 A/ S* ? v }
# z& C8 Z4 A$ @3 z, X& o 3 W9 [2 c" r( H+ k$ M
// Then we create a schedule that executes the0 R; A: P2 h% W8 }
// modelActions. modelActions is an ActionGroup, by itself it {2 d7 \4 X9 O& M
// has no notion of time. In order to have it executed in
( ~$ @/ b3 z6 \ // time, we create a Schedule that says to use the
/ M) U- a: |& h- Z // modelActions ActionGroup at particular times. This$ ^; u8 L% I( D7 ?7 j; P' g6 H, e
// schedule has a repeat interval of 1, it will loop every
- m: K& C' u) j5 N // time step. The action is executed at time 0 relative to) u/ i1 H, o- `7 T' w% L
// the beginning of the loop.
) J7 I9 c, a+ Y+ [1 J
5 B; J4 P# u: y+ N! c' r0 U // This is a simple schedule, with only one action that is, y1 Q& a* H# S
// just repeated every time. See jmousetrap for more
; e+ L' S7 m5 d X1 V1 w // complicated schedules.
1 d' e( r4 U# o' M% }/ w 0 o7 x7 f. |$ R
modelSchedule = new ScheduleImpl (getZone (), 1);
3 A* U+ |1 n+ u' {! S modelSchedule.at$createAction (0, modelActions);/ z7 |' j, t m, a; e: m
3 H7 Y. W; Q3 i
return this;
6 d/ V8 \# [! t( N$ x& a/ @% W& m } |