HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 }( A5 G. k1 t. }6 E! b% Y
' a5 ^1 K6 d# i4 z; ~ public Object buildActions () {5 s5 N. c! k% Q
super.buildActions();
" r# k. k) E! o/ k5 j: G$ B ^ 3 F- m4 D6 c" l! j3 M! u; T/ A
// Create the list of simulation actions. We put these in# j* `! i' [2 ?: z3 W' S8 f
// an action group, because we want these actions to be
% o$ j5 r; Q" g( T4 `4 s+ S // executed in a specific order, but these steps should
) d) l/ N! x3 u# L/ n4 @- d! `4 b // take no (simulated) time. The M(foo) means "The message
! ~ _! U& R6 h8 P) x7 Q$ t // called <foo>". You can send a message To a particular" N+ s N5 ^# f
// object, or ForEach object in a collection.: t1 L2 l3 G4 ]" V5 B
3 g" ^5 e# A0 H" a# Y7 E // Note we update the heatspace in two phases: first run Z9 `+ f6 [2 y& j
// diffusion, then run "updateWorld" to actually enact the
/ R( u: X! S t" N( e: e // changes the heatbugs have made. The ordering here is
" S+ O6 J9 N; m. F$ @ // significant!8 f0 m5 @( j3 B6 e, j; `& x8 Q
+ A1 Y: G( ^' c' \' P // Note also, that with the additional
5 P. y. v, \' l) M1 u4 d- I4 x& w // `randomizeHeatbugUpdateOrder' Boolean flag we can3 R: f; |; D8 p3 x
// randomize the order in which the bugs actually run5 {; v2 i$ W/ _' o+ c
// their step rule. This has the effect of removing any
; n k7 l- T) g: K5 j // systematic bias in the iteration throught the heatbug1 W' N7 C+ x. _, b! w! b
// list from timestep to timestep) H) l: B/ U5 ^5 \$ @' ]& a" h- P
+ r( W3 U' t' F C. T: D2 C3 M
// By default, all `createActionForEach' modelActions have% b+ b0 [% e% s
// a default order of `Sequential', which means that the
3 H$ r: L) \9 X: L // order of iteration through the `heatbugList' will be/ ~: Y+ Y" x9 [, c5 r! e
// identical (assuming the list order is not changed
, r- u# c) E" }% x9 X* w- l // indirectly by some other process).
% H4 @1 z* S( m, \/ m' m
* D; c# N% x" Z% w0 V% d. |/ ?0 L modelActions = new ActionGroupImpl (getZone ());
* A- t4 X0 g, }8 n3 M( B
7 ~! w; E: ~4 F2 ^, e# { try {. B* D4 I4 v" k: V& R% C
modelActions.createActionTo$message1 C+ n% r: C) s3 h. ^7 r( l/ Q
(heat, new Selector (heat.getClass (), "stepRule", false));
' }& Z9 R6 s$ @ } catch (Exception e) {
8 `6 l' {. |: N) T3 d0 F# t2 L- T1 m System.err.println ("Exception stepRule: " + e.getMessage ());
4 |7 J# a1 M+ x% w1 F$ x+ M9 | }
0 Z8 G% ~! \% N- O9 I, M
2 x' \7 s$ H4 [9 B( v8 C try {2 c q, [& D6 P7 j$ p1 d; L; z
Heatbug proto = (Heatbug) heatbugList.get (0);# M& K5 U; y% |* n
Selector sel =
2 K1 l6 z, C: O$ F6 _- [ new Selector (proto.getClass (), "heatbugStep", false);8 }0 k4 I# o3 J( `& T. I- u
actionForEach =
; C# G' ?. J( U) Y1 O. A: v1 s modelActions.createFActionForEachHomogeneous$call
6 D% D5 q) R3 c0 H& h- V (heatbugList,9 v$ X. x9 o; H3 Z& h
new FCallImpl (this, proto, sel,
0 a1 K+ m, |7 }' O* j" W new FArgumentsImpl (this, sel)));
# t4 a/ I6 P6 ] } catch (Exception e) {! [( c+ T; k" k5 E, R0 I, B, m3 W
e.printStackTrace (System.err);
* _2 w% q- [( P! Z6 C0 ?; M }6 z: N% N0 f- N: e( k
. D; H3 O) Z2 u, V- k; e* o- U" f+ a syncUpdateOrder ();
9 ?8 y) }- l( G/ K( ~4 P+ J+ ? L- H0 x \5 O, W( Z8 c
try {
; ?# S) U. I, M5 \3 j modelActions.createActionTo$message
3 T. c; z j/ r5 q9 _1 q) x7 B (heat, new Selector (heat.getClass (), "updateLattice", false));
- N+ N, i7 @3 k; q } catch (Exception e) {6 M- o4 W- }6 K# w& i
System.err.println("Exception updateLattice: " + e.getMessage ());; S. a0 i* Y: [( D) n* M7 ~6 W
}4 E% W2 Z1 l4 R# }' o) Q( `
+ d) @0 M. X) k$ t2 S
// Then we create a schedule that executes the! X2 g3 n- M: H
// modelActions. modelActions is an ActionGroup, by itself it
6 ?7 M" E1 G$ ]9 a" N, Q0 u- v; k // has no notion of time. In order to have it executed in% ~; [' C6 l* d9 B
// time, we create a Schedule that says to use the
L$ i+ g9 z0 @3 {0 f# v: F // modelActions ActionGroup at particular times. This
6 k2 E4 d0 @5 M W // schedule has a repeat interval of 1, it will loop every
) j4 G! R- F! X // time step. The action is executed at time 0 relative to
8 w/ h9 h9 I- h // the beginning of the loop.
8 I/ a1 c- S; w$ U; r, ]5 }- J$ F, r# [ \
// This is a simple schedule, with only one action that is
6 f7 Q5 | K0 h* A& I& m$ Y // just repeated every time. See jmousetrap for more
4 W2 u3 f8 f- l7 X% X // complicated schedules.( Z8 o# b3 Y. ]; i' |' M% z
* a: K$ R1 C8 W V/ m3 Z2 g modelSchedule = new ScheduleImpl (getZone (), 1);, S! q% Z. t" z6 G2 O8 t; c
modelSchedule.at$createAction (0, modelActions);* p; |, M P6 ?) x5 g# c% L e
2 D" p6 p0 S1 G return this;
: ]+ A1 d# S5 v1 Y } |