HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
@; \4 e& [* x4 J/ X* m
9 _) u9 L0 c; ]: I' _ public Object buildActions () {
* B: {( q6 Y3 _2 Z; t super.buildActions();, H' G' W# r6 n* Z6 |( R/ I/ a5 G
) F' Z; @) V0 _$ { // Create the list of simulation actions. We put these in
0 i+ P0 I8 I) Z7 i5 x) q // an action group, because we want these actions to be' g: L+ \& N2 H
// executed in a specific order, but these steps should
# ^* I9 G7 }" S( V$ ? // take no (simulated) time. The M(foo) means "The message
% K# Z2 \# O7 t, t4 ]' _& Z1 a. V // called <foo>". You can send a message To a particular# e& s$ e( o% V6 Q0 D* I3 x0 i
// object, or ForEach object in a collection.' v) \, |& ~: @; Q4 ]" I( Z
7 T! ^4 ~ j, F2 I1 R
// Note we update the heatspace in two phases: first run
. \; ~$ t" g6 G, @, p$ c/ ~- | // diffusion, then run "updateWorld" to actually enact the
6 j# W" o: ]9 ?# R // changes the heatbugs have made. The ordering here is
9 A E7 l3 M# l // significant!
5 k) c* j4 i l u& t1 d # i& D; B9 H; r, G0 P9 M' B% Z" ]
// Note also, that with the additional' t2 @# r- `: \# n6 Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 ^ J8 k: I1 j, e& R // randomize the order in which the bugs actually run' O' G1 W- ]0 k$ T! v1 V
// their step rule. This has the effect of removing any3 \7 |( O2 {* p. f
// systematic bias in the iteration throught the heatbug' V9 u1 t# P- K6 a' I$ X
// list from timestep to timestep
( P% n$ K" T0 P3 q ! ]5 P! g7 _- Q2 Z
// By default, all `createActionForEach' modelActions have
2 U+ R1 w5 x; | // a default order of `Sequential', which means that the ~* D0 q) p" [$ T# L9 ~$ H' N, o
// order of iteration through the `heatbugList' will be
" W& z6 F$ h! ?: ^4 E! @ // identical (assuming the list order is not changed$ ~- r2 U6 w& T* s7 x7 K. {+ x
// indirectly by some other process)./ r/ R0 E( H) n0 ^! w
' D) w) I$ w" l modelActions = new ActionGroupImpl (getZone ());
, x$ g! y4 \ o- r- f/ B$ u. E* n4 z" @4 [: i
try {
2 c7 }2 }9 G1 E. E/ l modelActions.createActionTo$message
q" \! I4 F: Q i (heat, new Selector (heat.getClass (), "stepRule", false));
2 h1 T/ D( ?7 I5 C4 ~, @ } catch (Exception e) {( q. v# v4 t' ]! `5 J, `' Z; X
System.err.println ("Exception stepRule: " + e.getMessage ());
$ Y- w: ?- V( Q& f8 T2 X- D }
( p4 E3 W6 U% c7 I; B% N9 w1 P C" p; C( }! A
try {
4 ?; A: g3 m/ P1 F Q! P/ R Heatbug proto = (Heatbug) heatbugList.get (0);
/ u$ h+ D- ]! B, _+ I Selector sel = 7 z! b. g! }' _5 w3 Y
new Selector (proto.getClass (), "heatbugStep", false);
0 ~9 E* P/ T# _9 P8 @; J actionForEach =
. X5 M( A# k# Y2 x modelActions.createFActionForEachHomogeneous$call
, V" K% P0 \" z2 z (heatbugList,9 N; H5 ^ d" U. g
new FCallImpl (this, proto, sel,
|- Q7 a0 W3 S1 t* N9 b new FArgumentsImpl (this, sel)));$ Z) H' v% m3 N: j# ~& J. e
} catch (Exception e) {
4 `! _. v+ c& ?$ ^5 g e.printStackTrace (System.err);
2 D) f$ ?: s k0 M }, {" l( {/ F0 t: z+ z
0 d' ]3 c7 ]6 s' a, W% C, _2 |- S, [
syncUpdateOrder ();
3 l) z0 U1 g# z3 N+ a0 p' j! k* W: G8 Y
try {
. P5 q. Z5 p* w( C% v modelActions.createActionTo$message * ^, r; H+ i7 j" Q8 K
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 u; G( G1 K7 l6 m5 A7 w } catch (Exception e) {
9 g/ d& r* @% `0 K System.err.println("Exception updateLattice: " + e.getMessage ());
2 M, y6 w/ ]7 G }
, N' ?' I- A- q' u; e9 m
( y: n7 A# k1 Q, g8 c8 }2 Y; M // Then we create a schedule that executes the
/ _- s2 R' J5 e" T7 p$ o8 d) S // modelActions. modelActions is an ActionGroup, by itself it% A- R4 L/ W6 V6 p
// has no notion of time. In order to have it executed in
g* s, u e z2 y7 ` b6 [" W // time, we create a Schedule that says to use the
p- `7 S2 k8 o' m3 { // modelActions ActionGroup at particular times. This
: d7 X0 [6 T6 Q0 z d // schedule has a repeat interval of 1, it will loop every9 y6 e* n8 a7 F3 y. j$ N+ }/ a- r
// time step. The action is executed at time 0 relative to
. c4 x f9 d- b# ?% ] // the beginning of the loop.% g4 H" V v, r3 i/ U$ Q
* |( R z; d+ e3 S) T' w* r x // This is a simple schedule, with only one action that is
% V& H1 L" y2 h9 Q! m! j // just repeated every time. See jmousetrap for more% }; e) X: W: T6 G
// complicated schedules.
" \2 `; i7 _+ C# s8 \
6 z; E+ V3 t8 P" [# k1 P5 w$ L modelSchedule = new ScheduleImpl (getZone (), 1);$ F7 F( i$ }. e- j
modelSchedule.at$createAction (0, modelActions);
5 J3 z7 D* H1 |$ a- O2 _
" C: F: V! X( u3 d: W9 w' a return this;
! ? A1 M6 L) |* R* _6 P$ D } |