HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" q9 C6 O1 {: ]. a) a4 P
1 ?% S9 o. d. n! K5 `7 c( ~$ M
public Object buildActions () {
5 c0 `, n7 P$ B( W) k: |& Q2 m super.buildActions();
( ?& B* v# b& K5 S
6 X& c4 t$ f1 a- T8 x0 u4 T" [5 V // Create the list of simulation actions. We put these in
+ M+ {6 W( Y( d- K( F' d5 t2 P // an action group, because we want these actions to be
. k- X4 _7 ^$ G // executed in a specific order, but these steps should: ~: l1 s9 J* z; t
// take no (simulated) time. The M(foo) means "The message1 o: @3 r$ V" `" k9 e- `& F7 [& ~
// called <foo>". You can send a message To a particular% m6 n7 a- [# d$ N
// object, or ForEach object in a collection.
# c; L" M( }5 g# }: m 3 S- C# m. B: q8 J+ i& W
// Note we update the heatspace in two phases: first run9 e1 B" d$ p/ d, H* Z1 Z7 Y
// diffusion, then run "updateWorld" to actually enact the
$ k% m% F4 P* M2 J // changes the heatbugs have made. The ordering here is
, i5 E9 t, p& w. P$ \, d // significant!4 ?* W. i _ }! |- m! P+ ^: T
/ v) h2 N9 L, Q4 |/ _6 S1 A // Note also, that with the additional
; N5 o) A7 H }* E // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 W4 c( ~7 O. m' a# t/ \ v3 k# S: O // randomize the order in which the bugs actually run! ~3 w& H* |: e. p0 I
// their step rule. This has the effect of removing any
& b( s. q# O3 Q, d // systematic bias in the iteration throught the heatbug% E) d" `* t# ~: b0 L9 J
// list from timestep to timestep O6 Q. @+ o1 V8 L1 q
0 ~3 X2 S6 W6 [+ E% Y // By default, all `createActionForEach' modelActions have Z9 E) D1 Y6 j, j( U- k! b0 Q
// a default order of `Sequential', which means that the
: @. d+ x9 w' }/ Z5 { // order of iteration through the `heatbugList' will be
, D. z* h3 s* N, h% y$ j6 M // identical (assuming the list order is not changed
& Z# U# ]/ h/ }) g% l) o3 ? // indirectly by some other process).* F* A) H3 b9 h5 G7 ^- m
* s" |( K( w U- q! p modelActions = new ActionGroupImpl (getZone ());
; `6 s( ?( ~4 _1 t6 U
y ?2 G Z3 B. r' p: q& U* ~ try {9 T4 i7 U6 r: @% z% R
modelActions.createActionTo$message# g9 \; {& H$ D' Q% n+ w4 b# [# D$ \
(heat, new Selector (heat.getClass (), "stepRule", false));
: P* D! L; I0 q! O& p) b# U1 j# K } catch (Exception e) {
8 U* E" Z1 o8 O System.err.println ("Exception stepRule: " + e.getMessage ());) d5 S1 Z% W9 `. N$ |& q" `
}9 K3 \% F( y$ |
% b" S4 ^9 b6 b' G! _( |7 J try {- t# R0 o' t5 M: N; h
Heatbug proto = (Heatbug) heatbugList.get (0);
( [* L' b* Q. c. N' g) ^ Selector sel = / D: J7 k# e. z) K2 W) |* E* K
new Selector (proto.getClass (), "heatbugStep", false);/ H b L6 n' v" h' R* }/ F
actionForEach =
9 t- B1 R5 J8 ]6 e, f! B% g! @' W modelActions.createFActionForEachHomogeneous$call
6 N6 M$ s% r* t% A7 |$ X& I* Q' o (heatbugList,0 \6 \8 g/ ^' `
new FCallImpl (this, proto, sel,: a9 `' e! R# q0 I; h# j! ?1 w- r' C
new FArgumentsImpl (this, sel)));
! e4 D1 O6 j) M9 b% r" c } catch (Exception e) {3 p6 ~3 G" `( K. F
e.printStackTrace (System.err);
# v a; B- j* e( k }& D/ V6 k# h1 V
% ~" k) C3 ~8 l* n6 E T1 g syncUpdateOrder ();
4 A; E, t- j( B
% b' c. p# C! `+ |/ Q try {
: S0 y- y% E4 p) o# v( W* m modelActions.createActionTo$message
/ Q: t( ?& O! ~7 b, e (heat, new Selector (heat.getClass (), "updateLattice", false));, X! q! v" S) F
} catch (Exception e) {, B& Y u* w3 {; _( [. A' E0 y) A$ x
System.err.println("Exception updateLattice: " + e.getMessage ());& j2 A! j& G& i' _2 E' U, d$ N
}8 O9 Q. J+ F {# i5 Z' Q
8 g# W7 E% A6 k
// Then we create a schedule that executes the" q7 H% o& ?6 S9 C+ _, T. A( O
// modelActions. modelActions is an ActionGroup, by itself it3 w8 \& M) B1 B: Q5 q
// has no notion of time. In order to have it executed in ^7 a& ]+ h2 z) U
// time, we create a Schedule that says to use the/ C6 o: S" A, f6 L0 }8 `( d U5 U
// modelActions ActionGroup at particular times. This: g1 u {4 j( H8 k- l
// schedule has a repeat interval of 1, it will loop every
+ Z) m' b# W$ z! P. c: k O. n2 p2 L // time step. The action is executed at time 0 relative to$ X0 r( ?/ ^7 P: X
// the beginning of the loop.
# W. y, c, `0 o7 @7 b1 J K, u: H* G8 w8 ~
// This is a simple schedule, with only one action that is4 g5 T4 \ X( W" K' _' g
// just repeated every time. See jmousetrap for more# C5 n m3 C& [* b+ h% V
// complicated schedules.
3 F; D- K' e" C% e) o2 p; p4 q
, G2 S7 d9 K6 ?: |0 U( ], r/ E modelSchedule = new ScheduleImpl (getZone (), 1);
5 f4 h2 m, X+ f! ] modelSchedule.at$createAction (0, modelActions);: v; F) h0 j. e* G n& B
3 J4 ?& |: m: G1 B4 I$ ` return this;
# Q. K; n5 d) v3 v: o- b } |