HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 b% `( N. f0 T" v3 g( d& @/ W$ B- ^+ v0 R5 e3 @0 D
public Object buildActions () {- A: b8 x4 s. E/ H3 a* F
super.buildActions();
7 S# w: |- f# X" G* _8 f ) K& J" j5 p) [+ M
// Create the list of simulation actions. We put these in' D* j1 c3 Q) j6 I0 r
// an action group, because we want these actions to be
* \7 m2 V- t' ^8 R0 @ // executed in a specific order, but these steps should1 X n* C5 N/ v
// take no (simulated) time. The M(foo) means "The message% H( Y( j! M0 x
// called <foo>". You can send a message To a particular) I3 X% U, H5 v: S% v! h
// object, or ForEach object in a collection.
' _& b$ \& z2 Z* j- x( {
9 a# E3 q4 j7 S7 Z K // Note we update the heatspace in two phases: first run0 b; a+ ]' n# A' ~/ R9 I
// diffusion, then run "updateWorld" to actually enact the1 R' g* }" K6 n3 `
// changes the heatbugs have made. The ordering here is
, {/ F8 W0 P) @ // significant!
6 D* _7 U4 l9 f, N5 n
6 r, E4 ^, D- }, Q/ U- U' o' ~ // Note also, that with the additional6 s8 _( P" f0 s3 O, x9 \% }
// `randomizeHeatbugUpdateOrder' Boolean flag we can( z; Z# s& {5 e J2 Q2 p5 Z
// randomize the order in which the bugs actually run4 H: r8 {! F# v6 b5 K
// their step rule. This has the effect of removing any" w7 R! O1 Z, _* b6 W
// systematic bias in the iteration throught the heatbug: B8 P9 D' C8 F3 x
// list from timestep to timestep" Z7 I: Z: s1 F/ M) `/ X
. l' F+ H: x5 @ // By default, all `createActionForEach' modelActions have
2 n! \' e$ a5 j# w! q // a default order of `Sequential', which means that the8 f. b$ a6 ^, ]1 e( }, {
// order of iteration through the `heatbugList' will be
& }0 u* f* }7 x. `& o9 q // identical (assuming the list order is not changed
* K" f4 `/ d/ g7 P! A& ] // indirectly by some other process).
3 P% l( d1 m/ X% F% ~
( {2 A3 R+ s( V0 h+ ~' f modelActions = new ActionGroupImpl (getZone ());' ?7 v. H2 g: U* B6 y6 {
6 S, s% i# |; G& b/ h) |* ]& y3 r4 C
try {5 \$ i; K/ u" G! q. D: G" \
modelActions.createActionTo$message
5 [/ A( W4 f' B* }" F (heat, new Selector (heat.getClass (), "stepRule", false));
# B, S# Y& l2 o$ O2 P8 f4 R; P } catch (Exception e) {
+ P! `1 |/ }6 S/ M, @8 n( T System.err.println ("Exception stepRule: " + e.getMessage ());
# M% ~ v2 E* l) ]9 A7 d8 Y) g }
' A% ~' M$ c$ }( H( V9 ?4 D$ ? J& I3 c: |8 ], t# g, K
try {2 @- l# |* f# X {6 S6 S2 W
Heatbug proto = (Heatbug) heatbugList.get (0);
5 o" V+ b. B2 n9 z. e6 l1 r Selector sel =
" Z2 g- D6 u7 Z new Selector (proto.getClass (), "heatbugStep", false);0 z& t' v. I! @1 Q; }9 H
actionForEach =9 Y f5 D* p! K1 F- j% ?0 a; g
modelActions.createFActionForEachHomogeneous$call5 b% F; }/ y* p
(heatbugList,
+ F% x0 l& U0 @: u new FCallImpl (this, proto, sel,
! l1 l+ p: \- l new FArgumentsImpl (this, sel)));
+ f$ F4 o+ V4 C' k z: B } catch (Exception e) {
" c j3 \* X5 W4 _5 `+ J& _2 J e.printStackTrace (System.err);
8 C& S* N- B5 W+ M3 m5 q, e. A; } }+ u7 C: f1 O8 B2 S- U
6 Z! |7 j6 q$ i# T" x
syncUpdateOrder ();
: ?; H J( a* N: p+ |3 e5 C; D' W5 t4 N# J) i+ c, c
try {2 r! f$ t; C# m, d: p; a+ }
modelActions.createActionTo$message 7 n( ]; y; u) t% Q
(heat, new Selector (heat.getClass (), "updateLattice", false));
" T9 ~8 W+ e: x6 x6 R' M+ {/ c2 O } catch (Exception e) {
4 y8 b; O7 }+ I* y System.err.println("Exception updateLattice: " + e.getMessage ());
- f3 x5 O+ T, f9 g D }
* B& f+ y- K# p7 c; Z ( _/ l2 E/ I# y/ Z+ v+ W
// Then we create a schedule that executes the
' a# ?6 @$ P/ l) e+ K5 d/ H // modelActions. modelActions is an ActionGroup, by itself it- G! i' a9 t$ f5 R3 s0 b
// has no notion of time. In order to have it executed in
3 ^/ t$ L4 L# u3 S E2 U // time, we create a Schedule that says to use the
- v* @1 \+ y8 S7 p0 C // modelActions ActionGroup at particular times. This
) x, Z7 M' w; G6 e% Z; U // schedule has a repeat interval of 1, it will loop every
. o$ P7 \ k! v4 C4 \# g // time step. The action is executed at time 0 relative to
5 o! }& v+ S% a, [: G8 |& c0 Z% D# n // the beginning of the loop.
/ F! m% O- V% y. ]" ~" e' ~$ } r
9 F1 m, K- {. l1 _; z // This is a simple schedule, with only one action that is1 D/ Z$ s( ~. {, S* y/ k" J
// just repeated every time. See jmousetrap for more. A/ V( m3 X. P: n( b4 [, B% A
// complicated schedules.5 X2 _4 ^0 f- x
; K$ E# [9 q" u! g S k
modelSchedule = new ScheduleImpl (getZone (), 1);
; ?% X1 l( [" ^& w; e* j modelSchedule.at$createAction (0, modelActions);
: g; [" X" [" K( w% t( s
0 t4 g* H) z5 g x" r4 V return this;
+ O' |0 a) \; N: t4 d8 }# q" E6 H } |