HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ {5 W: P3 O$ V" U
3 ~) L# }8 ]" J! O. g/ i e public Object buildActions () {
4 V; v- Z! Z3 R$ v) |( D' e" \ v super.buildActions();3 u2 E$ @9 |4 Q. \: d
4 x1 D A J9 t
// Create the list of simulation actions. We put these in
7 C0 S' u9 f1 ~1 L. `. y // an action group, because we want these actions to be; G* {1 B. y: q# `6 S
// executed in a specific order, but these steps should( @0 W" r( v( f R; j- J
// take no (simulated) time. The M(foo) means "The message$ ^! `/ p; P. x# [7 }) |! t/ X
// called <foo>". You can send a message To a particular/ ^4 I" ^7 A$ j' p1 N) |, u
// object, or ForEach object in a collection.8 n# q% [3 [) L5 u/ R/ G( D7 y n
) Z# ~# q+ l2 q* ^2 Z- Q& E; ~- [
// Note we update the heatspace in two phases: first run+ y7 F& i* s: O# J! T
// diffusion, then run "updateWorld" to actually enact the, I/ ^ Q9 w8 C+ N6 t( Q1 U
// changes the heatbugs have made. The ordering here is
( |: J( A5 b H* \0 f' k% V, u // significant!
5 s9 j& Q3 \' E$ V' j5 q' F ' [' e$ \* L% m# L9 }
// Note also, that with the additional
! Y+ P0 ~' g. N) i // `randomizeHeatbugUpdateOrder' Boolean flag we can
) o8 I; \' S: `4 ]* c6 i7 J // randomize the order in which the bugs actually run" x' A- c9 q. e: O: g6 b
// their step rule. This has the effect of removing any' e* F# L5 O6 Y, L
// systematic bias in the iteration throught the heatbug1 v/ ^ d K" k1 i$ i
// list from timestep to timestep
; O i/ D4 Z2 g* t! r: u/ ^" K 2 K5 P: f9 U, |3 [+ m& Y
// By default, all `createActionForEach' modelActions have4 W s" {& ]3 h" n4 L
// a default order of `Sequential', which means that the
( }0 }$ R% x) G8 V( F8 Y // order of iteration through the `heatbugList' will be
% e* l h( R [% d+ y7 @ // identical (assuming the list order is not changed
" R+ [ I0 |; F# F6 m% O // indirectly by some other process).
% @& l0 Y3 u, d* c5 B
+ J6 n1 j% O3 G, B! D modelActions = new ActionGroupImpl (getZone ());
3 _+ ?) |% D0 j; X& Q# k5 E* d! _9 c9 R" j c
try {3 j" l2 i, L) y# P. i0 N
modelActions.createActionTo$message
- ?# i& i+ c. r8 L% s (heat, new Selector (heat.getClass (), "stepRule", false));' H0 a7 T/ ]: R1 J; l1 b
} catch (Exception e) {
& O6 x% A0 N+ {+ m( b5 p; Y System.err.println ("Exception stepRule: " + e.getMessage ());7 q# ~# M- {, p3 D& k
}
' s! m4 q5 j: r5 I; t1 b% Z$ \2 G8 Z
try {" @2 r1 `( l# X8 Y( N* g0 ~
Heatbug proto = (Heatbug) heatbugList.get (0);/ m; E# f( K$ y# Z7 J
Selector sel =
0 b6 h, x2 n1 Z5 @' B5 M3 o new Selector (proto.getClass (), "heatbugStep", false);1 B7 Z* m) K4 i
actionForEach =: Y/ ~; \9 B @! n- `# ?
modelActions.createFActionForEachHomogeneous$call, Q$ K1 a# @! G" X/ @7 H
(heatbugList,
9 m5 \( ^- f1 g W* s& y. g. v new FCallImpl (this, proto, sel,/ t) C4 v& I# J. G0 S
new FArgumentsImpl (this, sel)));) [% a l" b, H, @# b$ K0 c
} catch (Exception e) {6 k- H$ n- a* Y4 p% D' T" M" ^
e.printStackTrace (System.err);
( M N4 c m, `% ~4 b7 x& K }
6 l& U7 q# x7 x
0 Y1 k0 o. u2 |9 T3 G syncUpdateOrder ();, x4 b& J: r- A2 V$ Y
^3 h: V* \7 ?
try {0 W7 d F6 S, I* K1 V/ n
modelActions.createActionTo$message
9 n/ _. E" S2 g, e (heat, new Selector (heat.getClass (), "updateLattice", false));
# q7 l0 _8 V5 G$ ^/ u- @0 Z } catch (Exception e) {
. K* ~% J/ `1 u/ Q4 l+ [7 O% s& ^ System.err.println("Exception updateLattice: " + e.getMessage ());3 a# p( Y8 G7 j5 e
}/ \/ m% u- e, H+ r# k! O
) ?9 Y0 [; v( d
// Then we create a schedule that executes the/ i, t9 k; [0 c* b2 W$ s: W7 o
// modelActions. modelActions is an ActionGroup, by itself it
# C- j8 _& |$ @/ u0 X1 P8 }, e# b // has no notion of time. In order to have it executed in8 z" T q8 W1 j% H) G% r8 u
// time, we create a Schedule that says to use the
: ]" M' ~0 ^8 T$ |% d // modelActions ActionGroup at particular times. This" ^% I- w/ E2 p) p
// schedule has a repeat interval of 1, it will loop every3 p- u; Q4 j2 W& i2 ~2 U0 y8 f
// time step. The action is executed at time 0 relative to
" l, m+ r, R: H p: Z* I% p0 N // the beginning of the loop.
# s* c! O. G+ I* f" E* u9 g4 z
# d9 I& U' |& K // This is a simple schedule, with only one action that is. N: O7 v' F% v1 `* ?( V' ^( x" D8 k
// just repeated every time. See jmousetrap for more ^5 a* w+ u: n1 n) k' d' K4 t" H
// complicated schedules.
; g9 Q! d. B4 ^, \
5 w i8 K Q0 X2 ~ modelSchedule = new ScheduleImpl (getZone (), 1);
' O+ v+ w0 m. V8 [, ^ modelSchedule.at$createAction (0, modelActions);
$ F, ]. U9 Z1 C5 {7 ~
1 i+ V2 e) _ P0 E$ x% G return this;
* f6 {. v+ b$ k. [8 D } |