HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 o$ n1 V4 m4 v/ Q) O4 ]' b8 p7 E% z$ E, g( g8 @+ |
public Object buildActions () {
) x4 x1 @8 D/ {0 D2 @0 W R super.buildActions();$ ~% j2 F# w, p
/ p4 l% \4 P) o9 W, [4 p // Create the list of simulation actions. We put these in& K4 `7 l% v: I$ `
// an action group, because we want these actions to be
! _0 V% w- d7 P3 i" \( w // executed in a specific order, but these steps should
( j- T3 r. ~; v5 D+ W% }, D // take no (simulated) time. The M(foo) means "The message
" v2 P" f/ m% p9 o; d$ K // called <foo>". You can send a message To a particular7 A! [3 ]% \+ ?' E6 z
// object, or ForEach object in a collection.8 M# g% r, P; z- v7 P3 b: |7 J
) i4 t; g3 U( S$ w- C
// Note we update the heatspace in two phases: first run
M; k- ]5 t2 q K // diffusion, then run "updateWorld" to actually enact the+ q) X! k' I! U/ M2 |7 F+ d- i
// changes the heatbugs have made. The ordering here is
3 g, |4 ?# K8 c- O4 Q- c // significant!
- D+ a8 {: U6 x( s5 X& Z1 n, B
# H( q6 H q) o9 \2 I$ t( O // Note also, that with the additional
9 t2 u: H0 O4 `4 _( ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can ^+ d& e2 T+ d6 f# `0 U2 j
// randomize the order in which the bugs actually run+ x! V' N9 {, J9 ~6 _" i5 Z6 L
// their step rule. This has the effect of removing any1 o- _9 | {' @) c
// systematic bias in the iteration throught the heatbug/ E' f- H, M# l
// list from timestep to timestep
5 e/ {# z; Q$ k; [: `# f% M( Z ( ]+ B/ X% M+ w4 ~/ m0 L1 [& m. ^" q
// By default, all `createActionForEach' modelActions have& r: _: a9 g6 _
// a default order of `Sequential', which means that the% ]% r5 i- j3 Q
// order of iteration through the `heatbugList' will be
! B$ P/ u& o1 t- V1 D // identical (assuming the list order is not changed
+ B0 s) o8 ~7 x) E // indirectly by some other process).
3 ` Y$ Y# V8 i ; R- f- a" W$ j
modelActions = new ActionGroupImpl (getZone ()); ?+ x) E3 } V+ h; \1 E
7 V5 C0 M6 Z) H' J7 a0 K r7 }
try {
% s, E( n8 {! n' N& {# i modelActions.createActionTo$message8 N! @; S% T% A. G9 H2 `
(heat, new Selector (heat.getClass (), "stepRule", false));
$ R5 m* s0 j' z' D } catch (Exception e) {, k" X& ^! C2 {6 N, T+ V
System.err.println ("Exception stepRule: " + e.getMessage ());
( R4 { p# m- e }
: v: P* a& Q4 W. z5 G( F& j
- G; w) Y2 H* R% R try {9 r4 U6 I& h# J$ { Y G
Heatbug proto = (Heatbug) heatbugList.get (0);
" j* _' W, ]$ F E& c Selector sel = ) e" m" w4 K( X8 I. ?/ c9 H
new Selector (proto.getClass (), "heatbugStep", false);
7 F2 i' t8 N4 {1 A: l% ^1 J+ q actionForEach =0 |" m. T. F3 x+ |" F: R
modelActions.createFActionForEachHomogeneous$call9 j" h2 }, B4 E# Q# P5 U B! O
(heatbugList,9 e, T9 _. m6 ~- S
new FCallImpl (this, proto, sel,
9 t# S9 T. z l new FArgumentsImpl (this, sel)));. t2 f$ H' _' ^' [8 X8 N
} catch (Exception e) {: s" \3 L" G+ s* {3 f1 s. Y3 S$ |
e.printStackTrace (System.err);
8 U/ w8 K: J( a- l( k2 R3 [ }
* E+ j# g1 a$ h5 l* R6 A
2 I% M/ a" b$ \1 q! C3 [ syncUpdateOrder ();
3 t# r! V8 S' i5 k% U
+ X( S$ K$ ^* g try {
. X+ p" u2 L8 _2 Q; ?5 V modelActions.createActionTo$message
) ?8 s9 R8 G4 q& I4 ~ (heat, new Selector (heat.getClass (), "updateLattice", false));; O2 ^% F! K* r
} catch (Exception e) {" R. ~' z4 J9 W7 b) S
System.err.println("Exception updateLattice: " + e.getMessage ());8 o# I% q s& P- K3 y5 w$ \
}& [5 d& o4 {0 \% ~4 d) [1 T
% A; O1 U+ |# x! _* |8 H // Then we create a schedule that executes the
+ f" ^6 N) t0 W# a* q // modelActions. modelActions is an ActionGroup, by itself it
6 l# B/ W2 S; Q3 E, z% F9 X& Y // has no notion of time. In order to have it executed in0 n2 f. ]# f" m5 {' `5 q
// time, we create a Schedule that says to use the; P: [" H7 W: g; u
// modelActions ActionGroup at particular times. This
: U+ |, o$ N9 R4 f+ z I t // schedule has a repeat interval of 1, it will loop every q* n y, E$ Y( i6 a, ~0 j
// time step. The action is executed at time 0 relative to, U# F' T. j0 \$ _5 ~. c
// the beginning of the loop.; K+ i, k( ~; ^" E- q. e4 I2 Z' y
, S. q9 ?0 t' f: e // This is a simple schedule, with only one action that is
1 D9 C0 @) q1 F7 o; q // just repeated every time. See jmousetrap for more" b6 [8 n' s4 _ s& e
// complicated schedules.
0 P. L+ d% g' Y; o- p% {7 t
! w5 M# o, h3 d: h. m modelSchedule = new ScheduleImpl (getZone (), 1);0 x# A( l" x$ k4 t B+ r/ G
modelSchedule.at$createAction (0, modelActions);
, r% Q( S6 d$ ~
: n s4 M0 \! A ?7 s1 E return this;) {1 r. N$ F: E, a$ \9 q. w
} |