HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! S; p/ B! }7 a- n& m [: m$ g" O
2 }& x3 _3 V- L: p) v2 P4 X# f, y2 J public Object buildActions () {, V1 m4 B. o, M
super.buildActions();/ r$ s3 y% N5 j2 _" C6 g! \
. H' N% U6 {' P. M8 Q
// Create the list of simulation actions. We put these in- a4 B' w9 P7 R2 m* \- j" n
// an action group, because we want these actions to be
0 X- G! g' y" m2 w z# p // executed in a specific order, but these steps should% ^5 L+ y$ h0 o; u
// take no (simulated) time. The M(foo) means "The message
4 e9 G; T7 b9 K: j+ d& P: ^, K+ i // called <foo>". You can send a message To a particular# K1 U6 J7 {& p3 J# V
// object, or ForEach object in a collection.
( L' k3 v6 A6 v3 L. O
) F1 k" r0 N- O( Y$ L // Note we update the heatspace in two phases: first run, i S- G+ a! P
// diffusion, then run "updateWorld" to actually enact the
9 [& s' k7 ?* `$ o3 F // changes the heatbugs have made. The ordering here is
% d$ v, ]8 E, u/ z+ | // significant!2 E+ s: b2 o- o, k9 U
; E. u7 ?+ E; O // Note also, that with the additional. J* n7 P {; X [3 z
// `randomizeHeatbugUpdateOrder' Boolean flag we can' G) f; d" |% A; S( w7 I
// randomize the order in which the bugs actually run& h8 i! x& j3 `
// their step rule. This has the effect of removing any
) i% k7 e: G( `+ P0 f6 p' ]/ @ // systematic bias in the iteration throught the heatbug* A$ J5 ?4 ?" Q5 e
// list from timestep to timestep' e% r0 V9 b' P6 f( O
; f5 S6 i# m* E7 @" l8 v
// By default, all `createActionForEach' modelActions have
# `2 {9 m0 f- ]; D // a default order of `Sequential', which means that the
: r v5 [7 u% a7 u2 K // order of iteration through the `heatbugList' will be
; m- T; W" k$ ]; n+ m8 Y8 T // identical (assuming the list order is not changed$ R% m* y; U, M
// indirectly by some other process).! l" l3 e0 o' k% X
; k1 ^% n. I- L/ t modelActions = new ActionGroupImpl (getZone ());
, d3 u+ [( W" d9 [. P4 w7 \% |) n: h2 K \! z1 O5 l
try {
. z) K% V. [! |3 _ modelActions.createActionTo$message% g# g7 q$ ~ U& O0 O
(heat, new Selector (heat.getClass (), "stepRule", false));' d8 _* @% K# v, i+ _' N& B
} catch (Exception e) {" l9 u0 N8 B ^2 H0 ]' B8 Y' a
System.err.println ("Exception stepRule: " + e.getMessage ());
9 T9 s+ I% i1 b& U3 S }
+ b9 n( K) v2 d5 j$ |2 Y* H/ x+ S# V: S, X! d/ Y
try {
9 O! R, Z8 S" u l Heatbug proto = (Heatbug) heatbugList.get (0);
l" K z: N5 c Selector sel =
; [; F: P% I: E v$ n new Selector (proto.getClass (), "heatbugStep", false);6 G* x: W O. V0 Y6 }$ ]' V$ E
actionForEach =- u1 p y3 H! A
modelActions.createFActionForEachHomogeneous$call
* s' S7 N: K* G (heatbugList,
4 p3 K3 c! o8 ^" _9 w new FCallImpl (this, proto, sel,% Z. M% D& C0 r0 W; r% c
new FArgumentsImpl (this, sel)));7 i7 A7 r z* V! F
} catch (Exception e) {/ _" u) h D7 ~2 K' f: \
e.printStackTrace (System.err);
! s C9 ]# K! L' i6 E! E: r9 E }
8 o _. _; T( d( D5 t# c 0 p" z4 w+ @; `2 z
syncUpdateOrder ();
- U. N& L2 H. `0 R) \3 R& N4 r5 y; W0 p/ r
try {7 [0 d# |2 z! o+ h" P
modelActions.createActionTo$message
, Q1 E- ]! i4 \, b! J$ w0 Z (heat, new Selector (heat.getClass (), "updateLattice", false));
6 L+ C! i! S9 x8 s& J, }; n+ j4 q } catch (Exception e) {. o7 S: S1 ^# l0 x
System.err.println("Exception updateLattice: " + e.getMessage ());$ `1 t1 K1 w" M+ d: c; Q" b
}* a: I7 q W& l0 Y6 _
( k; i& a3 \) p& ?/ b1 N( Y3 N9 U. T0 Y // Then we create a schedule that executes the4 f0 M9 A1 n1 v
// modelActions. modelActions is an ActionGroup, by itself it8 E% O6 B5 h/ J. y9 w
// has no notion of time. In order to have it executed in& O0 }' w" t" w: M- x, E; z: d9 w
// time, we create a Schedule that says to use the6 f2 Y! w8 }, l1 f$ k$ @
// modelActions ActionGroup at particular times. This
( C1 C1 X- r J) Z( i& a // schedule has a repeat interval of 1, it will loop every+ y: M7 W$ t5 p& M! A% V6 a
// time step. The action is executed at time 0 relative to
2 j: y; N8 r9 a @$ {. N+ Y // the beginning of the loop.! \# s. x9 X+ x0 a9 ^- l! Q' ]
- H7 O7 { _/ }3 Q* y5 ] // This is a simple schedule, with only one action that is" ]/ j0 E& `: |3 \8 q& ^+ u
// just repeated every time. See jmousetrap for more
. g9 {. s0 n3 P" f // complicated schedules.
" h% ~5 v1 c# {2 c" Y5 ~5 W
5 s/ t2 ] V# B: d1 c8 x8 x8 h modelSchedule = new ScheduleImpl (getZone (), 1);/ |8 E! x9 l ?/ Q# @
modelSchedule.at$createAction (0, modelActions);/ D4 }7 E6 s6 l3 W7 p& T3 f
6 H/ `' f# H( @) v* M3 U# q+ M7 l9 p return this;
6 p/ f- U9 v! V/ V } |