HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 V/ q- q) w4 _# O: M1 L# w/ n" \ ]9 k+ E2 \0 P, C2 f" X$ ^
public Object buildActions () {4 R+ h9 ]2 K e. B3 K( c& H
super.buildActions();* E5 a+ m: j' M( D% |' q7 M
# ~# B; H2 Y; c: q' [8 v // Create the list of simulation actions. We put these in. l6 `3 X4 e0 G* m' Z
// an action group, because we want these actions to be0 s5 S& U* U- x* x
// executed in a specific order, but these steps should$ [5 ?- _2 Z2 [' f% f! o- l
// take no (simulated) time. The M(foo) means "The message
* `" C, L4 V9 s2 W7 `: r& @- l // called <foo>". You can send a message To a particular% Q; \1 g$ z9 X: M+ ?
// object, or ForEach object in a collection.
4 x2 ] b8 s [8 b9 @# j" T
& o+ R7 P; o# }0 L# O& E // Note we update the heatspace in two phases: first run' R e" o0 x/ X
// diffusion, then run "updateWorld" to actually enact the
+ R/ Q) I( h4 b' u+ i // changes the heatbugs have made. The ordering here is
" a; r$ Z" d% D+ H // significant!/ [1 I* N+ w( }. q& m" j1 \* Z
; s- W1 {7 N. C$ B7 ] // Note also, that with the additional
7 h+ C! k3 @5 N- G; V // `randomizeHeatbugUpdateOrder' Boolean flag we can# v$ K, N0 I$ a9 n- N Z
// randomize the order in which the bugs actually run4 n9 k1 U% ~ f H9 |
// their step rule. This has the effect of removing any0 q" I4 Z$ c8 e( {9 Z8 l) W
// systematic bias in the iteration throught the heatbug8 F3 S2 s/ m) |6 U7 ]- l6 F1 t
// list from timestep to timestep+ K+ T' M$ Q( v \" p) J" X& `
1 g0 g8 s* ?: E# b! J7 ^! T0 z7 ~& y
// By default, all `createActionForEach' modelActions have$ c1 F0 K; ^" R" @/ I; E4 Z7 H$ K
// a default order of `Sequential', which means that the
& _& k4 D5 ] p, i! U // order of iteration through the `heatbugList' will be
( P0 y w& Y u- x // identical (assuming the list order is not changed& o3 ]4 n( I1 k) K
// indirectly by some other process).# O3 u- c$ o2 f# ^, @
B# @% [* D9 \7 X* ? E
modelActions = new ActionGroupImpl (getZone ());
0 j* d0 q! h+ g [; W" X+ S: ^+ ^9 E7 M" e" z* U
try {
: |) s( t, O& x- _0 w! [ modelActions.createActionTo$message; A7 ^+ I1 ^. T4 E' O$ v/ E
(heat, new Selector (heat.getClass (), "stepRule", false));
7 O3 }* `7 A, L } catch (Exception e) {
8 h6 m" E: P; e- B2 x System.err.println ("Exception stepRule: " + e.getMessage ());2 L, q& x3 j; u2 T9 f$ \7 w
}
' x& x* v9 z- [# t$ b2 o- }% A
K" k+ s d# N, @! ~6 H try {6 Q. P/ D* K3 x4 Z" v d
Heatbug proto = (Heatbug) heatbugList.get (0);
0 i3 x6 y2 l; i8 ~ Selector sel = + u- V1 u4 E w9 E% J
new Selector (proto.getClass (), "heatbugStep", false);
9 E: v+ h" L# p, l: _% m actionForEach =& k# Q/ {, X4 M7 s) s$ C
modelActions.createFActionForEachHomogeneous$call
, B8 f. G8 `8 U3 ]* F9 P5 @" | (heatbugList,
( |$ q. v* J& H/ O new FCallImpl (this, proto, sel,
# A O" {- o9 H0 I new FArgumentsImpl (this, sel)));. O w& d$ @ y5 i9 P
} catch (Exception e) {+ K# D7 _$ U6 o" M( [
e.printStackTrace (System.err);3 g3 r3 \2 A3 q, f1 i# R- a+ ?
}
" f% x! n) \4 b1 @3 N5 v, R) [" c , x0 q0 H& A6 l% x
syncUpdateOrder ();
, P2 S* L& `! F9 q7 A$ T
( K! E* V, X' q! d, f: [% O: ~ try {
3 p' e- W4 n% ~3 x$ }+ g2 g modelActions.createActionTo$message 5 o! E8 e3 h7 Y% X
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 \( J! b) a7 n+ Z } catch (Exception e) {
, {+ q; r: `$ g9 e$ J6 U/ u8 K System.err.println("Exception updateLattice: " + e.getMessage ());, o8 a/ C; }2 B- M. @
}7 p4 |. i! J3 k, ?
$ J& \- z8 ~+ e: n( p // Then we create a schedule that executes the
% @) `+ Z/ m) ]5 ~9 F" Q // modelActions. modelActions is an ActionGroup, by itself it
* \& U& r W" q8 U6 ^0 E; v // has no notion of time. In order to have it executed in: M% |" \5 n/ ~! d. C2 G. r8 F
// time, we create a Schedule that says to use the+ S& v5 _7 w1 y8 s5 I9 ]# F2 j( D
// modelActions ActionGroup at particular times. This6 c0 \, a t1 i B
// schedule has a repeat interval of 1, it will loop every& D3 W& u( R4 k' N5 Z
// time step. The action is executed at time 0 relative to
L5 F2 r% s8 H5 P! \% x- V0 U" c+ h5 [# v // the beginning of the loop.
9 e& m( }; I# v" o, w3 d7 ~) G# P
" Y2 ~( [5 R n$ Q! ? // This is a simple schedule, with only one action that is
6 \- \7 z5 I7 ~ // just repeated every time. See jmousetrap for more
m" T+ @6 a7 B2 c( ]; K // complicated schedules.
% n: V4 V$ A2 }- s1 S3 l
- R* J1 ]! @! B& F6 A3 ~ modelSchedule = new ScheduleImpl (getZone (), 1);5 Q- j& i9 t5 ~" m: D7 g* c, l
modelSchedule.at$createAction (0, modelActions);
: L( T# [+ `: B
# h; _( z4 c; n. R5 g6 ~ return this;5 p4 p# e1 I: V+ D4 w" O
} |