HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( P0 r& @! P! ]5 i/ _8 h1 q3 V2 J% C
3 K0 g8 \4 N, ]7 E/ y) q" z public Object buildActions () {9 N' {* B# k. n' ^- A" o
super.buildActions();
: r( a7 W; z3 P
7 U' k" P6 m9 @& N6 R" \ // Create the list of simulation actions. We put these in. Q: Y% J3 V& o* p% j- u2 S5 r
// an action group, because we want these actions to be
$ c4 M- D; d/ @5 n9 Y7 I/ ^7 n // executed in a specific order, but these steps should3 [: Z& J0 S5 D
// take no (simulated) time. The M(foo) means "The message
' I4 L0 i. O" Z! Q0 ^: L4 V // called <foo>". You can send a message To a particular
6 H' r, P2 k1 E5 A" N // object, or ForEach object in a collection.
, ~$ c, y2 [# { L; m 1 |- ]4 |' \ {- w% L
// Note we update the heatspace in two phases: first run
8 H2 h( q: }" |) \5 g // diffusion, then run "updateWorld" to actually enact the
5 G4 L/ J. Z1 B# r# `, ]5 e // changes the heatbugs have made. The ordering here is7 M4 Z1 Q" P- M$ u/ m
// significant!; E/ f2 e: C# v, k" v8 E
: O7 D7 ]! l/ i# `8 E
// Note also, that with the additional
7 v- J2 _+ U4 m5 q7 R // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 e& Z( I9 R4 B( j- f // randomize the order in which the bugs actually run8 L: h- m( g5 C' i1 ^
// their step rule. This has the effect of removing any- e' X: y# X: S( ~# e- s
// systematic bias in the iteration throught the heatbug
( Q/ B6 o' l2 z // list from timestep to timestep( U: J/ Q4 T+ Q. G+ A% P7 D5 |
2 J3 ^+ x# B2 E // By default, all `createActionForEach' modelActions have) L# w7 B$ j$ }9 _' G, p
// a default order of `Sequential', which means that the, M1 b9 ?- Q7 d9 k/ [. c2 O
// order of iteration through the `heatbugList' will be
0 j2 K( M H% w8 J& ]8 o/ P; h: N // identical (assuming the list order is not changed
. C1 l# R. v7 a* }: x1 _: t // indirectly by some other process)./ a, J" g6 k L1 ]( @% V
7 v7 ^" T$ k; j1 k8 K( y
modelActions = new ActionGroupImpl (getZone ());
( J* v# ]* J9 Z. w9 {) _
$ u7 p: k1 \$ @" b try {
4 ?& A% k" |. Q1 y2 _ modelActions.createActionTo$message
f# D# v" q( I (heat, new Selector (heat.getClass (), "stepRule", false));
$ f9 F5 B( X1 H6 i } catch (Exception e) {1 [4 U) {. w7 _/ c
System.err.println ("Exception stepRule: " + e.getMessage ());9 ]( K$ ~" `5 p' _+ U9 } t
}6 b% b3 {+ c0 q3 n$ X
6 F+ Z1 r) \4 V" _% K5 P i try {* e4 L2 V$ b8 V" P9 s# D& `
Heatbug proto = (Heatbug) heatbugList.get (0);# q! i0 P! J% Y6 ~" b- V# b0 z
Selector sel =
+ _" {! E, _: C6 f new Selector (proto.getClass (), "heatbugStep", false);
8 z' U) k1 w$ h+ K5 I3 [: |6 R( V1 ` actionForEach =% U5 D6 a/ N, ~( e1 o% D
modelActions.createFActionForEachHomogeneous$call
, n/ _ C% }; ^; Y5 v! _ (heatbugList,
$ y8 q9 j$ d5 P0 P( v7 _ new FCallImpl (this, proto, sel, A8 |% b2 [- Q/ U! l
new FArgumentsImpl (this, sel)));
$ y+ t r, D, `, G6 G3 D& d% e" Z4 B } catch (Exception e) {2 Y9 `& s& j7 v0 U1 a/ a
e.printStackTrace (System.err);
: ]! @1 g- J6 O6 s7 w }
6 y4 ?* L# h+ X& B |8 |3 q3 j ( x# h) ]3 F8 y8 z5 k @ q
syncUpdateOrder ();8 f0 Y' x! y9 N* l4 M( R1 @
% ?. W* b4 D8 p ~2 A" j7 W try {- w2 C; Y1 E8 [+ q5 x9 b
modelActions.createActionTo$message
' n/ @ y4 S/ H8 J (heat, new Selector (heat.getClass (), "updateLattice", false));
% \3 O5 U) L3 \/ W/ c } catch (Exception e) { k' S$ m5 j8 J& q6 Z3 z/ p5 ~
System.err.println("Exception updateLattice: " + e.getMessage ());) G9 a! b( |& n& B$ c' D. n
}% o" r7 S# @" g( l* K0 K; V
( @4 E+ @1 E8 T( ]5 k
// Then we create a schedule that executes the" h W4 ?( Z/ O- U/ v" i
// modelActions. modelActions is an ActionGroup, by itself it. f8 t O$ ^! i8 x+ b" @1 h
// has no notion of time. In order to have it executed in
; e. ?5 z6 } E // time, we create a Schedule that says to use the I9 P& s1 S4 t n, P( e
// modelActions ActionGroup at particular times. This3 M/ R4 X& m0 q' ]
// schedule has a repeat interval of 1, it will loop every
% w. D, a/ v0 l3 q // time step. The action is executed at time 0 relative to
+ ^9 N3 K' j3 a* U. w& `: x1 M // the beginning of the loop.2 m+ E' H- M2 ?7 Z7 S7 l& t4 K. F" }
- J7 h0 C; A/ {3 H. g: A // This is a simple schedule, with only one action that is
2 B/ r5 I% b5 l% n // just repeated every time. See jmousetrap for more+ W; P1 ` [1 o7 {& ]0 k6 {9 S
// complicated schedules." i: c+ t1 V) j. ~9 \4 G# e: @
D; P+ q: N) \7 Z9 U- V, L
modelSchedule = new ScheduleImpl (getZone (), 1);
/ r4 y) k. v8 C) O& }+ w- ^) _, Q4 f. ^ modelSchedule.at$createAction (0, modelActions);
3 _$ ]+ z# S7 y) i; W( C . I- \9 Y2 O( S. ]( x) e0 L
return this;
" a) ]; {! V; w% R } |