HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: q+ B1 o/ w+ a. B, `) j1 K$ Z, W% B& H
public Object buildActions () {& T. l5 R5 f# r7 k' P# l, i* H
super.buildActions();/ I9 m9 J! Z6 M$ q" R! `+ b; u% B
* y- B: D' m. W! o
// Create the list of simulation actions. We put these in
' ^6 o W% K, F1 s // an action group, because we want these actions to be0 @3 W" h, d7 G2 W$ h' K
// executed in a specific order, but these steps should. f; d/ J9 J% L+ _) ~* Y
// take no (simulated) time. The M(foo) means "The message
# a3 `2 X5 ?! A // called <foo>". You can send a message To a particular, B& d2 P8 L% K
// object, or ForEach object in a collection.
% P W# b. e. m& i" F3 G
) W/ k. u2 L6 B5 Q5 t# n // Note we update the heatspace in two phases: first run9 y+ m9 \0 f* N. x! V
// diffusion, then run "updateWorld" to actually enact the
4 z, T4 r/ {4 t& J: | // changes the heatbugs have made. The ordering here is8 R; M5 Z- @1 D" I% [& L
// significant!
: d+ q, w% P. `2 U) y " S" z' d3 A. c2 f+ [4 a% W" K5 z
// Note also, that with the additional
3 K' b/ R/ F! `, P8 k' g // `randomizeHeatbugUpdateOrder' Boolean flag we can
; Z$ y& P% S- S7 f/ _0 I! t // randomize the order in which the bugs actually run
7 P( O3 ?0 M: x, L1 ? // their step rule. This has the effect of removing any7 m& ?9 O' z3 z! B: I1 Z; g
// systematic bias in the iteration throught the heatbug
- |0 W! t" M$ X# }5 R2 n+ i // list from timestep to timestep: r) l4 a0 @+ P0 V8 x7 J9 \7 P. J
+ z6 c! r; o4 [/ I5 L
// By default, all `createActionForEach' modelActions have
, h% G7 C; B' P- n4 p' E1 `9 s // a default order of `Sequential', which means that the
* n2 q8 K8 s# n) C) @! M. @6 U1 y" }" b // order of iteration through the `heatbugList' will be5 w5 @" g# P9 h" }0 O
// identical (assuming the list order is not changed
, z4 S: K, s s1 H9 y // indirectly by some other process).
) A5 x8 W& W+ D, s5 h7 I 2 o& O' l. |$ R' ^2 Z8 I8 ~ Q* |
modelActions = new ActionGroupImpl (getZone ());
- m! E8 c! ^# X2 E8 W5 C* Z3 a2 c: k4 t: g; m$ W
try {4 M9 r2 p6 D3 d. D! ?
modelActions.createActionTo$message/ G0 e( V5 R0 B* K$ C
(heat, new Selector (heat.getClass (), "stepRule", false));' [: D6 [% A) T2 t) L
} catch (Exception e) {
) {' R& A/ x' | l* ~; z7 U$ C5 S System.err.println ("Exception stepRule: " + e.getMessage ());
2 \% t! \3 G. Z! M }) F( F% H: A9 t5 M4 u8 S% G. P
8 D: O* P! q; X- t) v% F. R try {0 ^- r: I& [: d4 Z! z
Heatbug proto = (Heatbug) heatbugList.get (0);4 l2 u o# Y* f u# r: W
Selector sel = 9 Q1 L- m2 N( T3 ]' s, _
new Selector (proto.getClass (), "heatbugStep", false);
7 Q3 W- G+ }# S4 @" r4 i actionForEach =
$ ]" y; L5 r( F) Q modelActions.createFActionForEachHomogeneous$call4 H) G9 c, M1 P1 A Q+ p
(heatbugList,
7 \" G/ @: F& Y& d" r new FCallImpl (this, proto, sel,
' V7 W' X9 u7 E c7 T7 C new FArgumentsImpl (this, sel)));% d& O! |4 U# s1 m+ Y
} catch (Exception e) {
$ R* B4 m+ ^4 A$ G e.printStackTrace (System.err);- E* E+ z _ b& w
}
0 \* I" M0 o/ d2 H. U9 P/ T
' i9 o8 Z; }% H A3 B syncUpdateOrder ();
: d1 X3 c* O( o) W; N$ g1 @5 ~8 n. a& M) q
try {
m3 Q$ l5 k& j. r modelActions.createActionTo$message
3 T3 l" D- J; Z/ V (heat, new Selector (heat.getClass (), "updateLattice", false));
) y2 ?) e7 |+ p# d1 Y } catch (Exception e) {
7 ` n; ^0 V. O0 T: [4 n System.err.println("Exception updateLattice: " + e.getMessage ());9 d% a& y# V- @. N
}
. ?: z: I& w$ H$ e5 w, a! b: P
( f, w0 _& k/ ?3 a9 v* G // Then we create a schedule that executes the+ f, r' f7 l; `6 \8 T
// modelActions. modelActions is an ActionGroup, by itself it' S Y$ }9 p, p9 L0 p" W* M
// has no notion of time. In order to have it executed in
( K( K) o' M& ]( v! [( n" L# } // time, we create a Schedule that says to use the3 q# D# c5 \& D, Y9 w
// modelActions ActionGroup at particular times. This Q# Z. D$ }/ V3 [
// schedule has a repeat interval of 1, it will loop every* o7 o8 o+ i; u8 L4 y4 d
// time step. The action is executed at time 0 relative to
! [+ @, m) l- i // the beginning of the loop.
' J8 i5 J5 j4 W" I* {, h5 j7 H: ?0 d
: i' ?: B9 W9 E4 L // This is a simple schedule, with only one action that is" g Q& R* m- }4 t- n
// just repeated every time. See jmousetrap for more
7 K+ J9 l( _7 `7 } // complicated schedules.3 X- c, D- ^% h& s7 o7 J% u
5 s2 y7 b0 x4 \" B modelSchedule = new ScheduleImpl (getZone (), 1);: j \) a& H$ X; g* O5 K, i
modelSchedule.at$createAction (0, modelActions);
, r5 Q: w9 a; Z' B8 M% j
! ^5 A+ Z$ ^! v) h9 _ return this;' V7 o: B* W) Y. _; Z3 q/ _+ y1 l, z4 o
} |