HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ g6 p2 R$ c; k7 Q$ y* h: Q
- p {2 v& I, j. z' ~
public Object buildActions () {$ O/ n6 ^1 P; Y9 Y; K# ?
super.buildActions();
$ c: V5 ]- D' f4 @0 s' c - ~) [- T6 b% ~; |: y3 k
// Create the list of simulation actions. We put these in/ r, J' W. ^8 d* y8 C
// an action group, because we want these actions to be
8 O: d k; E" q, L7 r9 h6 r // executed in a specific order, but these steps should# z3 s3 a* B! b
// take no (simulated) time. The M(foo) means "The message
9 M* A4 y }4 T" G& t6 I // called <foo>". You can send a message To a particular5 l' }; V1 y; T9 H* ~ e- T; z
// object, or ForEach object in a collection.
9 {. M! Q( s; L. f! m
" V' a, L" L" J/ c% g1 v // Note we update the heatspace in two phases: first run
7 D. O5 c7 E4 S* t" K: U& n& y // diffusion, then run "updateWorld" to actually enact the8 X ^/ L$ T' v+ G2 D% J* L
// changes the heatbugs have made. The ordering here is6 a# b) K# F& c ~9 @$ D
// significant!
. L. c: z4 x9 g 0 y5 m: d& o$ p- |
// Note also, that with the additional
6 I# F1 X$ c9 T2 N% | // `randomizeHeatbugUpdateOrder' Boolean flag we can/ z4 S% |% X& D
// randomize the order in which the bugs actually run
( h2 j& Y7 O* _7 |6 K. v // their step rule. This has the effect of removing any; l9 b5 ]+ Y" V) r0 t, O
// systematic bias in the iteration throught the heatbug- @% p" T4 K. i
// list from timestep to timestep4 o" c: `! _- j6 ~) k! i
2 l6 h" k- a. E6 `6 ?$ C. R
// By default, all `createActionForEach' modelActions have' H1 L! J' M# C/ _0 t' m
// a default order of `Sequential', which means that the& h$ B' C( l2 {3 o' l4 h
// order of iteration through the `heatbugList' will be
' A4 |. ~. B7 G! } // identical (assuming the list order is not changed& J5 c$ z! [$ b# y3 k7 s
// indirectly by some other process).
' Q) p. c W I9 W0 ?6 k \. a ; g, O4 D+ b( s- c
modelActions = new ActionGroupImpl (getZone ());
, _% \) {% `# a4 H [$ W+ S: E5 a
8 g+ Q. f# \' d; T' _& n- | try {) D+ r& R- t" c$ d2 ]
modelActions.createActionTo$message/ ]2 a' ?9 P5 a, a; f
(heat, new Selector (heat.getClass (), "stepRule", false));
+ r5 c+ \1 v7 d- B" t2 z/ E; D. n } catch (Exception e) {# @* G! g' F& l, [- f, J
System.err.println ("Exception stepRule: " + e.getMessage ());
+ e3 d& u, \4 h* V2 v4 D }
6 Q6 Z9 f+ o2 v: u" S1 a: Q8 P
# u; B7 y* S' _- F$ ~1 g try {( ^8 v# ~% Y5 q8 f" L- o
Heatbug proto = (Heatbug) heatbugList.get (0);
6 m# s( c2 S+ t0 m2 @9 U' G& [ Selector sel = ) o+ t; A( A- \) m; ?
new Selector (proto.getClass (), "heatbugStep", false);
- p' n$ _! }% B: | actionForEach =3 s y E6 _' R+ t6 H* @# b3 h
modelActions.createFActionForEachHomogeneous$call
- i- e3 [# T6 F (heatbugList,
8 e) A0 l( ]9 O, v. ?0 ^" i3 f, Q new FCallImpl (this, proto, sel,
- h. w6 E6 ]7 R new FArgumentsImpl (this, sel)));
( J% ?6 E0 W, I } catch (Exception e) {$ x ?9 w4 W$ c+ {: e; n! y' H
e.printStackTrace (System.err);1 E: R( p3 S, o$ M
}+ l j, V. C% b! S- V5 f4 F* n
* b' _* k3 f* e4 L3 ^
syncUpdateOrder ();
( o6 M8 P7 N9 A! k# \2 \$ \- H' t- d, n# d0 b% }7 A& K4 y
try {
: I) V! F$ l+ w; @) P modelActions.createActionTo$message
) U% v4 K8 M" u (heat, new Selector (heat.getClass (), "updateLattice", false));! G% h5 g: m# Z9 F- _( D
} catch (Exception e) {* Z1 k% f7 b' M" W8 d
System.err.println("Exception updateLattice: " + e.getMessage ());! M: R+ ]0 t0 J! k
}* R! x1 R" j4 |! B# Y6 u/ l
' K" W1 }1 m9 f `7 S
// Then we create a schedule that executes the2 u0 W! ~% p3 m, ~) C
// modelActions. modelActions is an ActionGroup, by itself it
5 J' ^, O9 z+ i6 p0 A! m9 F4 F // has no notion of time. In order to have it executed in
+ M7 {& d) |! [4 D1 |, s // time, we create a Schedule that says to use the* G2 Z1 e; @8 H7 W" d2 H% B
// modelActions ActionGroup at particular times. This
$ J. o. X9 {, f; h) a7 F& o // schedule has a repeat interval of 1, it will loop every' C4 q: }, B& v; i2 C. Y
// time step. The action is executed at time 0 relative to
, v# n8 ^# u: [. F! E4 x. C // the beginning of the loop.
1 i& B, |- [$ Q; m) t: v2 o+ ~) `+ U' Y5 y" j$ S8 z
// This is a simple schedule, with only one action that is$ H8 N2 A9 m: J; R$ s1 E* x: H
// just repeated every time. See jmousetrap for more5 b c: n" _& n& J$ r! {* H, ~
// complicated schedules.
' z. [2 `1 u, d4 y% ]. m
2 U; {) p* g, z' w K2 G, Y5 c modelSchedule = new ScheduleImpl (getZone (), 1);2 ?! @4 d. k; ?+ Q: p( j
modelSchedule.at$createAction (0, modelActions);
; C6 U+ a8 L) a$ S, J
?, l6 Z& l* `. ^ return this;) E6 m+ S* q) t8 }
} |