HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- m& o5 U" o$ L* k) N, y
; i B7 I9 @. ^; ~8 q1 S2 \
public Object buildActions () {
4 t) }2 k; p- y) X: h& n6 }' {. X# m super.buildActions();" t3 i1 r. _5 s: M6 p- B5 S1 Y
* c j- b G% g3 J" w& g
// Create the list of simulation actions. We put these in
3 Z! h; v% ~% g% ~4 e2 C9 R+ ~) ~ // an action group, because we want these actions to be8 N+ h! q6 j' y1 l* @; _. c. K
// executed in a specific order, but these steps should
5 \' B' ^ _. Q0 }3 m // take no (simulated) time. The M(foo) means "The message
8 q- n; Z1 E) L8 g // called <foo>". You can send a message To a particular/ N4 N& N# n3 l' |' M
// object, or ForEach object in a collection.
2 N9 Q0 E4 j) p. V+ F- @3 b- T 9 M) P, L P+ H; o3 ^% q+ ?
// Note we update the heatspace in two phases: first run) a) G! f* l' k" w% ~- R
// diffusion, then run "updateWorld" to actually enact the
6 o: o8 h9 e, a A! I // changes the heatbugs have made. The ordering here is
. z6 A3 ^5 w% |4 q" \( O. [ // significant!
- L; g+ U' l0 q2 R3 `: V + W3 P0 L I3 R( P9 U
// Note also, that with the additional
' y& e' U/ l5 L // `randomizeHeatbugUpdateOrder' Boolean flag we can
, t# A; Z. ?, E" S- c' i1 ]0 y // randomize the order in which the bugs actually run- K" p$ E- e4 ?
// their step rule. This has the effect of removing any
1 p; M: o; T" y) R- o' h // systematic bias in the iteration throught the heatbug9 W7 s# Q0 U( n6 \1 h7 }7 f
// list from timestep to timestep( i. `- z! s! F( a: j
. w0 T( I6 O& X! [ q
// By default, all `createActionForEach' modelActions have, h5 U6 o& q) E: q
// a default order of `Sequential', which means that the6 L) y& h% R8 w4 D
// order of iteration through the `heatbugList' will be) [4 Q, k1 t* k! {3 x
// identical (assuming the list order is not changed) x7 H/ U% N- h. J9 I# W- M$ D
// indirectly by some other process).
- z/ e) W L6 _0 S3 r" d& c, B( Z 4 ?( W. o) d5 D/ Y7 i/ \! r8 ^
modelActions = new ActionGroupImpl (getZone ());' E( U* N1 ]& C# p
+ ]! }' N5 \/ W& z$ Z
try {
5 W9 F6 h6 @2 M% t5 n4 A+ H modelActions.createActionTo$message
& ]+ T7 q0 x/ j (heat, new Selector (heat.getClass (), "stepRule", false));
! g! ~8 \: ]7 m( O) K4 M5 X } catch (Exception e) {5 D9 N, j! G0 l0 T; d, |
System.err.println ("Exception stepRule: " + e.getMessage ());
* a( C4 _6 s1 a- G3 O }
/ c7 }/ }* O" ^* w; H; S4 g/ |8 f. b
: k \1 o7 K, z, z: n# F5 }9 T try {5 X, ^+ o* }( [7 B( V0 E: `8 }/ Z
Heatbug proto = (Heatbug) heatbugList.get (0);/ w9 C7 b1 x7 K6 b9 K* t& E
Selector sel =
' d$ A; e& C/ \2 K' l7 Q new Selector (proto.getClass (), "heatbugStep", false);
O5 R3 X$ Q/ k actionForEach =9 t# B( G- N2 E( p% n
modelActions.createFActionForEachHomogeneous$call
5 }) r' J0 L, q (heatbugList,- p0 B. u+ P. K/ u
new FCallImpl (this, proto, sel,/ j" w: O# q! i" P
new FArgumentsImpl (this, sel)));
# |0 [, I$ g- ]4 f( V1 O* a } catch (Exception e) {" v& d$ k. a. z5 q5 `6 N& Z% B* {
e.printStackTrace (System.err);
: N6 {. t2 E, f2 W$ Z }6 C7 R0 Y' e1 H$ n* T
: w1 F7 |: @+ a
syncUpdateOrder ();
# Y3 g2 i; O0 C# A6 [9 G" m3 }! V0 _! q1 q1 q
try {
; x- m# T4 I% V: E modelActions.createActionTo$message
2 p, o" q& ?9 W0 L1 f1 L9 T (heat, new Selector (heat.getClass (), "updateLattice", false));
5 {7 w1 \. w1 W6 Q } catch (Exception e) {7 n+ L$ a) V, C2 \! R$ P: F" j
System.err.println("Exception updateLattice: " + e.getMessage ());
/ q# Q9 S. P; g( S }2 u. [4 B1 L ]8 M6 F
9 A. M6 d6 M+ ^1 Z; l' L* o' d // Then we create a schedule that executes the
6 ~( Y( Z- j N; R+ d // modelActions. modelActions is an ActionGroup, by itself it9 f. @( I6 U* b, `+ S, s: w
// has no notion of time. In order to have it executed in3 R$ |( j. h5 k& Y
// time, we create a Schedule that says to use the
0 O: e4 b" l( n- C- L // modelActions ActionGroup at particular times. This
7 C3 K+ O7 R( f$ b( b // schedule has a repeat interval of 1, it will loop every
2 ~0 S, M _6 A% V- ]5 Z5 K // time step. The action is executed at time 0 relative to- R. }- {( d& F3 G" p& |$ \6 Z' k1 D
// the beginning of the loop.
* O, r9 q$ F$ v- {6 s) E. T6 M& a! d! p
// This is a simple schedule, with only one action that is
. k/ H( e$ @5 T4 M0 o // just repeated every time. See jmousetrap for more
% _- A1 s% c9 _. y/ s' i // complicated schedules.8 b/ M3 ]1 _$ z) u- x
- E4 x0 h+ X0 U; \! A
modelSchedule = new ScheduleImpl (getZone (), 1);/ P- o: F5 |9 V* ?8 e1 m
modelSchedule.at$createAction (0, modelActions);# z3 \% S6 H" \- b% H1 k: u- P
, l+ X4 W' c% [/ a' A1 }0 [ return this;
: |0 F+ L7 T$ |" Y } |