HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 f j0 l8 Z9 U) J4 S; j l; b7 w
: K8 i' Q8 F0 C& z: h7 d0 U# g7 { public Object buildActions () {3 ]0 Z' b, @2 D% F
super.buildActions();
# \5 t$ D* E& v1 \! i
z1 M5 u2 W- P9 f* r3 x4 m# C // Create the list of simulation actions. We put these in
T8 [+ @6 w& K // an action group, because we want these actions to be
7 \/ [& |# l& |- b // executed in a specific order, but these steps should0 G, W# }" h: d
// take no (simulated) time. The M(foo) means "The message
( L! ]4 K2 C$ x7 U% G // called <foo>". You can send a message To a particular
% q/ B/ p" S4 K# { // object, or ForEach object in a collection.* N( |* H& g$ P2 F6 ]! p
/ Y$ v& J/ n6 V3 A" [4 D& G O d // Note we update the heatspace in two phases: first run b) ]8 B- y1 V _
// diffusion, then run "updateWorld" to actually enact the
4 Y( K, e9 k' w: V0 }+ d& s // changes the heatbugs have made. The ordering here is
- y4 E' ?; @" A5 g E7 y1 Z // significant!
& [& ]1 h" l' R( K' K1 P: v & [8 o! f7 Q4 u! w
// Note also, that with the additional9 z9 i; A! \+ y5 k* J
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# v1 }( ?! f' m, J! q& w // randomize the order in which the bugs actually run
7 Q/ k6 Z1 x( S: Y. G% k$ f' i! { // their step rule. This has the effect of removing any8 J, x% [7 ^) E# n/ Z8 G( Y4 F
// systematic bias in the iteration throught the heatbug
6 J8 p: P1 q- w, L- a) V // list from timestep to timestep* U5 G4 C7 [: P
5 G$ x6 j/ |+ L% `& |: c. T
// By default, all `createActionForEach' modelActions have
! I* {6 c: l1 ^/ U5 G4 ` // a default order of `Sequential', which means that the
, e! w: D- `. J2 O0 } // order of iteration through the `heatbugList' will be
7 f& Q, S) c0 o; x- J // identical (assuming the list order is not changed
8 x; B p/ X$ _! K // indirectly by some other process).$ [3 H1 B6 L( \$ D
6 C$ q5 t* o* }8 g# ]% \ modelActions = new ActionGroupImpl (getZone ());# f2 _3 c0 r' _9 R; Y1 C7 X
( [7 F6 { x' Y: S. R# w8 {# E try {
/ c, e0 D. c P( r" x1 O7 m+ @6 N modelActions.createActionTo$message! T& y) C6 g9 m1 Y4 X7 d
(heat, new Selector (heat.getClass (), "stepRule", false));
X. l6 H# O$ D1 w4 X! M( ?5 w4 b } catch (Exception e) {8 e) n( `! R% n7 M/ [! u( ]% e
System.err.println ("Exception stepRule: " + e.getMessage ());7 T! Z& D; {6 I
}0 k8 n+ s8 M( k" a1 c
: V, j) y! ?; G8 R
try {5 E2 N9 S. v" @) @/ l
Heatbug proto = (Heatbug) heatbugList.get (0);( K0 g+ O0 C/ t7 w/ f1 M) o' K
Selector sel =
5 G+ S: A+ r; }. S- y new Selector (proto.getClass (), "heatbugStep", false);
6 G3 w* S5 F9 D9 k" I! R' T6 h( V actionForEach =
, r6 A6 |/ Z. W4 P# i+ ^0 ~9 M3 l modelActions.createFActionForEachHomogeneous$call- |! o5 b+ | X* @# Z5 v$ ?6 R
(heatbugList,
2 ? W0 X% |$ |' ^ new FCallImpl (this, proto, sel,3 J- ?: J" g; J1 @3 H
new FArgumentsImpl (this, sel)));
3 x) ^4 h" r! L. i" v. R+ I } catch (Exception e) {$ L* V# j' u( |* ?" ^
e.printStackTrace (System.err);$ ?# K# a5 U4 c7 _
}
" F+ a; c' T. Z
7 q. d3 _: V8 n& \& m4 c: b" u, ] h syncUpdateOrder ();
5 I1 O, ~: J; q
1 {) x4 E! I {$ O6 Y7 y try {$ Y- c9 x, ]; m7 K% @4 x
modelActions.createActionTo$message
2 y/ l4 ^4 @6 a( V6 x& m (heat, new Selector (heat.getClass (), "updateLattice", false));
( f" E" [9 T6 s& [ } catch (Exception e) {5 N$ C I% c5 i& w' L
System.err.println("Exception updateLattice: " + e.getMessage ());) c$ j0 }' `( f8 I8 K* g# h
}8 f$ T, _, X8 O& c# K
v0 [4 u; c# q$ w, }+ h" o8 T // Then we create a schedule that executes the
8 e& Z! J. y# I1 b // modelActions. modelActions is an ActionGroup, by itself it
`/ ?; G/ U, O1 `, T0 r5 Z // has no notion of time. In order to have it executed in$ E" \2 \. l4 K
// time, we create a Schedule that says to use the( j* G' M5 H0 Y4 O
// modelActions ActionGroup at particular times. This
- N9 Z$ i* f) h // schedule has a repeat interval of 1, it will loop every2 t1 k1 B6 g. u2 W. |6 c- u
// time step. The action is executed at time 0 relative to$ ]! E# x+ Y' x: r( Z/ c' X, b
// the beginning of the loop.. Q. h0 o4 w, O
* W: O% G7 v& ?; |$ O3 o
// This is a simple schedule, with only one action that is
! V( k* s9 u# l // just repeated every time. See jmousetrap for more
! N" O! q' D. @( s // complicated schedules.
- o q9 j" E& P4 s, k ) R x6 x3 [' H! W8 B$ y
modelSchedule = new ScheduleImpl (getZone (), 1);! J0 q7 P* Q5 y, m
modelSchedule.at$createAction (0, modelActions);
4 d, X8 p9 F+ Y% s& h / v8 e5 R9 a# p7 B; y
return this;
- U$ |; O* J( m } |