HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. o9 X- q& b [* _1 L9 a, ?
& c% S/ N4 J0 K+ N public Object buildActions () {+ k3 B& L2 V( b, a0 ]
super.buildActions();
; g4 q' ~5 t+ J6 u. ^9 u* y w 9 p5 _& i2 f- H
// Create the list of simulation actions. We put these in9 g6 A5 f$ Q; N2 F X8 s
// an action group, because we want these actions to be
' p: V c2 v. Z0 b+ P/ Z; P // executed in a specific order, but these steps should' G8 {( @0 o+ ^# Q
// take no (simulated) time. The M(foo) means "The message9 m# T; v* x7 d- ], T# x9 y
// called <foo>". You can send a message To a particular
2 Q, V M1 k6 G+ I6 P+ N+ Y // object, or ForEach object in a collection.
( k1 @+ D. a* J5 J2 X, q2 u! ^
' ~- d1 b# m9 \' M // Note we update the heatspace in two phases: first run
1 a" }" n- [. _* \3 A // diffusion, then run "updateWorld" to actually enact the% [. p) s, q8 f4 |8 F1 S) Y9 r
// changes the heatbugs have made. The ordering here is
, d8 p/ w( H! H: N" ? // significant!5 M) l. ?+ H% |& T6 Y- J+ D# f
, F% K8 P7 t1 d& t# U0 P' d // Note also, that with the additional! {7 _0 g" ]3 s# ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 K' ^" a( ?& Q( T0 P6 J+ t$ V, h // randomize the order in which the bugs actually run
2 a4 t5 K8 Y+ m$ q // their step rule. This has the effect of removing any
. w3 [2 T+ M9 M, }0 q2 d5 H // systematic bias in the iteration throught the heatbug: K3 d9 [4 X# w
// list from timestep to timestep
- Q9 f# C# F2 O: X+ r5 R. n' K % s' a2 i0 v1 G) n" @6 z9 e* \8 ~) ~
// By default, all `createActionForEach' modelActions have
' P3 D- n+ p; z! {+ y. j/ z // a default order of `Sequential', which means that the+ C/ J, X+ ?8 N. i4 I. n# w
// order of iteration through the `heatbugList' will be3 `8 s* Q- n$ v) I" C9 N3 s& |6 f
// identical (assuming the list order is not changed0 s8 H, V$ |; E! @' d- H9 o7 E
// indirectly by some other process)., E& h* F9 K3 t$ c7 k
, H4 a, d8 I4 E5 c9 U
modelActions = new ActionGroupImpl (getZone ());! ^' |, r9 X' M% ]
3 ]( A! A2 m0 D$ P. X. ?
try {
0 ], \! U9 K( e$ C' y7 n( z u modelActions.createActionTo$message' |9 z# k& Z( @7 ]( l* k' k. T% `
(heat, new Selector (heat.getClass (), "stepRule", false));5 U" _% n% Q" a% I
} catch (Exception e) {
( V& j) q; X( ?# W y System.err.println ("Exception stepRule: " + e.getMessage ());
' z! a8 @* b7 r$ s6 v }/ H8 Z: S& T; z: k4 H' H& X+ n
$ R. J% i* I0 I1 n3 ^* P& V, c try {3 ~( J$ e- w4 F( S+ o7 ]- X
Heatbug proto = (Heatbug) heatbugList.get (0);
; F$ K7 ?+ N) r( Q3 a5 y: ?+ Q; y Selector sel = ' z# }$ J$ T6 V" @7 h
new Selector (proto.getClass (), "heatbugStep", false);
7 O% a+ O' m" p' u% A actionForEach =( U9 f3 ~8 H( W0 J) w. }+ ^- A
modelActions.createFActionForEachHomogeneous$call( y. S1 f9 k9 T
(heatbugList,3 e3 ?' A p/ t$ N* P0 e6 B. C1 X6 u
new FCallImpl (this, proto, sel,( t2 o: x; |% E
new FArgumentsImpl (this, sel)));
+ R9 S1 w( i- _- W } catch (Exception e) {
6 P" {1 r! e4 h e.printStackTrace (System.err);
$ I* Y' C( Z' `/ Y* T; I }
/ l- { T' I: x$ P3 F$ o$ x
* E" d# o, A+ \ syncUpdateOrder ();* X3 K9 ~, U2 |/ P/ Z+ W: [
% _: u6 G& a; X, m$ |1 h! N- u8 x2 _0 d! P try {
3 g/ [9 f9 k2 _# `3 n; z modelActions.createActionTo$message
- U9 }3 H; o$ S, c (heat, new Selector (heat.getClass (), "updateLattice", false));$ j! A1 N# a2 U' P4 p: X: ^
} catch (Exception e) {. r$ b' n4 @' M, o4 N9 I
System.err.println("Exception updateLattice: " + e.getMessage ());9 Z2 _, v, ]2 N5 ^
}6 O1 a" V0 G* m6 |& S2 n& b
( M2 Q) `. \" d, b5 ]0 R. T // Then we create a schedule that executes the) V) e- s: V* h N$ ~5 o: H
// modelActions. modelActions is an ActionGroup, by itself it
0 T) x' J) S: x) j1 k" m // has no notion of time. In order to have it executed in
( n+ h5 ?8 F/ L# u5 f7 P // time, we create a Schedule that says to use the
) O$ h4 i1 x' P/ F // modelActions ActionGroup at particular times. This
5 C! w% r8 H. T: E1 Q // schedule has a repeat interval of 1, it will loop every
! Y* S5 o @4 S* M // time step. The action is executed at time 0 relative to
% R' N/ B7 Y- S // the beginning of the loop.6 ^' H) r8 x& }; r3 ]3 f# N
7 y" _+ i C4 ~) q0 G% t. }8 ? // This is a simple schedule, with only one action that is
7 @9 ]9 W0 K7 b( X* G$ V& `) b // just repeated every time. See jmousetrap for more# j9 u3 \9 u9 s+ k& ^
// complicated schedules.9 ]$ I' c" g2 _3 b
( l0 e5 m+ i5 `* D5 b# | modelSchedule = new ScheduleImpl (getZone (), 1);% Y& `6 f4 p* R1 |# B- H$ T9 G) _" Q1 k
modelSchedule.at$createAction (0, modelActions);
4 O4 K) m/ w8 U
* b- p, B- `( \, a, f return this;
8 X3 f8 R8 e8 B5 z6 Q2 m6 ^$ B } |