HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# `+ p5 C. A& ^3 F. m: |( X8 j% E
8 D3 r7 l' x1 x! d: e% W
public Object buildActions () {
9 E7 q$ @& i7 Q2 ? super.buildActions();9 P1 }0 E, e/ w$ o. w
- B* n( C+ `) l
// Create the list of simulation actions. We put these in* N4 w/ B2 J- e& N9 o f) x
// an action group, because we want these actions to be
% o* G1 i' p/ R9 b( a // executed in a specific order, but these steps should
" v( q/ R0 B! {; q, k // take no (simulated) time. The M(foo) means "The message/ }, ^! `- A3 L' w2 ^: }. U5 K
// called <foo>". You can send a message To a particular
8 g: B& ~- m, k } // object, or ForEach object in a collection.2 O, Z4 I) K9 I3 F
$ o; c4 j: m, l' H; s/ J
// Note we update the heatspace in two phases: first run
' [! f, o5 h3 F8 i; b // diffusion, then run "updateWorld" to actually enact the9 _2 a* ~) h. x/ E3 p6 @
// changes the heatbugs have made. The ordering here is
9 q A! W+ `% A3 R. q; f! O! H+ f // significant!
* \, ^% i. u5 {% T/ ?4 A' V% E 8 G2 g' n+ i# T. P; z8 ^
// Note also, that with the additional/ o! m1 e2 B# q6 i a
// `randomizeHeatbugUpdateOrder' Boolean flag we can
% D5 z3 ^+ s! b* P* P; | n // randomize the order in which the bugs actually run
4 B3 i0 S/ ^7 j6 u, F i // their step rule. This has the effect of removing any
- r! R! i6 O/ q8 @ // systematic bias in the iteration throught the heatbug
& V( R" j; }' M7 E4 R; z+ W) n* f) P // list from timestep to timestep" K3 R+ [) u5 l& ^
" ]+ B7 R) a3 K# p& B
// By default, all `createActionForEach' modelActions have+ A, d2 @, [0 W0 E6 h8 T
// a default order of `Sequential', which means that the
# f$ l# [) D8 l6 y, ]$ h1 i8 S- N // order of iteration through the `heatbugList' will be
, c! d6 K( F9 _( w // identical (assuming the list order is not changed9 W! z* d4 {# ?; w
// indirectly by some other process).- @8 r$ H" w: [8 k w: ?- L
# ~% N$ a4 W. s1 y5 p$ b
modelActions = new ActionGroupImpl (getZone ());
' k8 l# n# x. m* x( ^8 C2 P
- [: f8 w" `# {1 J. Y; _5 A try {' X3 ?2 o- D5 \: B
modelActions.createActionTo$message1 w; f8 ~, J& `; R4 \
(heat, new Selector (heat.getClass (), "stepRule", false));
[4 @ d3 I" S5 l } catch (Exception e) {
Y9 s$ L* @. ^ System.err.println ("Exception stepRule: " + e.getMessage ());
8 Y' S" {9 v8 V5 R2 O2 {( @/ R; n }" W: U: L. m. y6 W. e x' F" m
$ y9 D8 f. L; E3 e2 q try {
4 V9 j% ?' a& U Heatbug proto = (Heatbug) heatbugList.get (0);
1 _" _- U% z) v+ }2 G% w2 m5 h ? Selector sel = ; U& Q" U) z( Q; N
new Selector (proto.getClass (), "heatbugStep", false);, j+ H0 [! B4 C9 |; U
actionForEach =$ T. A p9 d# A2 p& ~
modelActions.createFActionForEachHomogeneous$call4 M0 i0 _; i+ x! p% P- u: g
(heatbugList,
. \" K( A% I# {+ K2 F R new FCallImpl (this, proto, sel,& G% N3 {) @0 H; k7 r1 |: n( Y L' Z1 H
new FArgumentsImpl (this, sel)));" ~. E9 x5 r4 G5 T, N
} catch (Exception e) { y' e8 D& R3 |. }4 @2 q8 U
e.printStackTrace (System.err);
: [; k0 Z8 e3 t) _* D/ H4 S }
9 V; Y; X5 t9 y8 S
8 O% @/ k& {5 g syncUpdateOrder ();
) p$ j* ^$ l# O* b5 Z) V2 W% t3 D( d% s3 d
try {0 X9 ~% d T- ?9 }
modelActions.createActionTo$message , e% l& O& Z5 ^8 \
(heat, new Selector (heat.getClass (), "updateLattice", false));3 W. K/ v7 n* S6 F
} catch (Exception e) {) P6 i% s8 ^, A! f0 I; |
System.err.println("Exception updateLattice: " + e.getMessage ());6 u, `3 y8 \. h) K% [+ h; _2 D
}& s y- D6 G9 M7 L9 A B3 w+ J7 ~
# \2 d; u1 k) V. H& U1 O, f) D // Then we create a schedule that executes the# o9 X5 Y1 n& z: P& x
// modelActions. modelActions is an ActionGroup, by itself it
; L7 H% B3 B9 I // has no notion of time. In order to have it executed in
5 F/ c9 D3 ^/ P. U: X" @# A( F // time, we create a Schedule that says to use the! `" j; Y3 r$ }3 H+ [- W8 K
// modelActions ActionGroup at particular times. This+ ?2 S% {& \; J
// schedule has a repeat interval of 1, it will loop every7 V2 Y& P w9 @6 U
// time step. The action is executed at time 0 relative to
) E9 s- F2 t! ~& i% t // the beginning of the loop.2 n: n# K% U4 n8 L9 d
/ w( S/ O" M% c
// This is a simple schedule, with only one action that is, w* t& v6 d5 J6 B5 I: o5 z
// just repeated every time. See jmousetrap for more. x4 Y& N- I7 h' U+ F
// complicated schedules.; |* S. d. u& I9 V3 d5 |5 X! g- b
( K9 `( y% l6 x4 w; x1 P& D7 l6 W modelSchedule = new ScheduleImpl (getZone (), 1);
0 e8 {: y/ r) N1 [( P, H modelSchedule.at$createAction (0, modelActions);, {( m2 g5 M' U' F5 J7 W' T
5 o4 q, a! ^5 j3 r
return this;: K, R$ x# w# r \1 n7 A8 E
} |