HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. Z1 V: X& h. E- i/ b
6 @! J; ~/ U8 q. b8 m7 G public Object buildActions () {
2 t5 E6 F3 D- Z. b super.buildActions();: C/ m9 ~. T4 h: R1 {
/ E% w% J" J$ r! a5 W: y) [ // Create the list of simulation actions. We put these in7 S, H! H3 I) y& P# K$ }
// an action group, because we want these actions to be
; }1 S* z* R8 U" @ // executed in a specific order, but these steps should* g9 [5 F# c& B3 i6 N+ w
// take no (simulated) time. The M(foo) means "The message
0 _9 M: \( \0 K$ ?# r9 ]* S% H) A // called <foo>". You can send a message To a particular
6 }/ F* U+ _4 E // object, or ForEach object in a collection., G% Q4 K' w, q& P t; h! G5 e
2 M# C1 r: f% E' e/ H3 u // Note we update the heatspace in two phases: first run
* j8 n9 f @3 M // diffusion, then run "updateWorld" to actually enact the
# ~2 X. C7 U0 t: S; s" ^ // changes the heatbugs have made. The ordering here is5 k& [8 ]+ T7 a6 \
// significant!
B! u) q" N, m; |! M1 g) D1 e' \' |
/ A9 k* R8 F+ _# y2 S // Note also, that with the additional3 P1 W2 {9 m) [6 w- d
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, ]" X- l3 {' R; a: w // randomize the order in which the bugs actually run6 O8 V9 i$ i# j+ y2 s& e! O
// their step rule. This has the effect of removing any
3 Y; Y* y+ M0 m" i // systematic bias in the iteration throught the heatbug
: n O2 _+ {. f; n // list from timestep to timestep9 f* c' ]1 \& q. M7 q
2 b6 g! I5 V! w S; t% v // By default, all `createActionForEach' modelActions have
) f H& } }4 ~( f$ W // a default order of `Sequential', which means that the
5 P" W6 L" r' G% I2 {4 m+ E // order of iteration through the `heatbugList' will be
) T2 a& z, q8 ^+ n* ^ // identical (assuming the list order is not changed
: v. Z' r" ~/ N$ {% S // indirectly by some other process).
2 {& {4 r/ i0 s, q/ j' d! b
! w3 T/ u% `; H% Q modelActions = new ActionGroupImpl (getZone ());2 ~% F5 x. f X+ l
' i! M: u+ s; _# j& _
try {5 V( d7 s, I. |, B* \; `" |
modelActions.createActionTo$message
% z. B5 L5 q5 ]* M (heat, new Selector (heat.getClass (), "stepRule", false));7 v b0 b6 I( [
} catch (Exception e) {
# J1 R7 g' c: ^- F System.err.println ("Exception stepRule: " + e.getMessage ());
6 G9 o, a5 C- m( w9 P: j }
) Y: |9 P& e' v. g0 \( W5 u( l
# ~' a& N+ B* g( K1 J' g. q try {
7 Z* H$ F% M: c; L Heatbug proto = (Heatbug) heatbugList.get (0);1 b+ M* |+ ^4 ^
Selector sel =
$ w( W$ e1 T. S R3 C& m new Selector (proto.getClass (), "heatbugStep", false);
1 ?! ~! w* f4 S9 `1 o) o2 ` actionForEach =; D" a8 u- X$ ?3 N0 ~+ f* I+ ~0 Y
modelActions.createFActionForEachHomogeneous$call3 s( D2 |. [, S# W1 M
(heatbugList,
' }! H6 B! `+ x/ V) f. n7 G* T new FCallImpl (this, proto, sel,
. t% C4 O9 F( A* r' c7 d& Q9 T new FArgumentsImpl (this, sel)));
/ J5 E. j1 h2 }& A/ F } catch (Exception e) {4 k: F) R2 {! f/ D: K' B7 u
e.printStackTrace (System.err);# I9 u$ [0 n6 h! G3 _% }
}
# E) x5 m7 p/ @4 V2 F& d
6 V) S# i5 [& W0 e syncUpdateOrder ();
0 b' u4 ]; H5 @0 k1 D3 n$ W. d" ]: y. w$ o7 {& j" T
try { w1 L6 L& J) s" w$ B
modelActions.createActionTo$message & ~" S9 O7 a$ m, {. T8 n3 Z3 m
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 O. |2 q8 z" B; D" b } catch (Exception e) {
' H% n, W: p9 I: ?* y( R: y System.err.println("Exception updateLattice: " + e.getMessage ());
& ~ m6 L+ Z) z9 Y* _- i; n }
- V8 \) U% p6 Z9 C8 E: M. i ) U/ `+ b- T2 ~; q' ~2 l
// Then we create a schedule that executes the
& m, ` Y3 f, w // modelActions. modelActions is an ActionGroup, by itself it+ O/ M: G& S. G- i: u3 ?1 F
// has no notion of time. In order to have it executed in
q6 W4 |. q. l; _1 h // time, we create a Schedule that says to use the/ s" K& s. s1 B m% B
// modelActions ActionGroup at particular times. This
$ O/ y& P1 Y* [, q5 e9 D // schedule has a repeat interval of 1, it will loop every! d# ^# x Z$ H* k, A, e, M( O
// time step. The action is executed at time 0 relative to
8 }. o u8 U* ^" z, | // the beginning of the loop.
& p S9 I! x, U+ \! g( R2 ]% y8 n/ u
// This is a simple schedule, with only one action that is
, I1 I P" k( C$ n" q9 K- T. B) b // just repeated every time. See jmousetrap for more
& R0 I; ?* V9 S // complicated schedules.
: g9 q8 {1 x" v2 U$ n+ r+ O- D
4 W: o& w3 M1 Q: P) E& A modelSchedule = new ScheduleImpl (getZone (), 1);
' E/ S- f! ~7 l8 M4 z6 G' B modelSchedule.at$createAction (0, modelActions);) G' {+ ^* ~, ?2 T# Y1 {
2 s5 b4 i* u6 K# y4 S+ e return this;
/ R; S; k2 N. ~) P. u } |