HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 Q7 p" _: {$ b+ }+ d6 i- W3 {; ~# L7 E
3 G, C' U3 M. I4 T0 _ public Object buildActions () {
/ s: [$ T4 @' m$ O6 ]& ? super.buildActions();; u2 [3 M1 d& Y- u
- X7 {" n* E" t( y
// Create the list of simulation actions. We put these in
- X; y& B' u. w3 W9 K( c# k7 K // an action group, because we want these actions to be
- i6 j$ ?$ P P, Y, N9 d // executed in a specific order, but these steps should
: h& D- J0 N' l" t% _: T // take no (simulated) time. The M(foo) means "The message1 g, j* D$ z8 A
// called <foo>". You can send a message To a particular2 g5 {# n$ j0 z& W5 |
// object, or ForEach object in a collection.
2 K; R4 F. K" n1 C4 w/ `( M
# h% u9 Z ~( J- N& i) b% v7 j // Note we update the heatspace in two phases: first run- L( q& p& u# g9 i) r
// diffusion, then run "updateWorld" to actually enact the
: f! J6 o' }' G6 D1 P // changes the heatbugs have made. The ordering here is
/ G0 N& o7 Z0 R // significant!
2 o/ V# v% Z. y8 b: g5 E) y
2 d2 }! Y1 z z' O, w7 k. P8 z // Note also, that with the additional! N( c- ]& H9 A. K* b. h9 G
// `randomizeHeatbugUpdateOrder' Boolean flag we can# v# B$ U F8 [5 W
// randomize the order in which the bugs actually run3 k; G7 h. N$ F: e
// their step rule. This has the effect of removing any
4 T# F8 F4 T8 R9 H1 B5 j // systematic bias in the iteration throught the heatbug- q$ O+ y3 m6 V) h
// list from timestep to timestep
2 M: q3 [9 U3 x6 W8 A / K! S7 R- B, |+ {, ~
// By default, all `createActionForEach' modelActions have+ z' @! E( J i
// a default order of `Sequential', which means that the+ l8 A2 S! r, F6 _ p6 T' R
// order of iteration through the `heatbugList' will be& c6 q+ J# L5 @/ B( }% X
// identical (assuming the list order is not changed" _# ?. a8 ~- { D& J) F
// indirectly by some other process).
0 a, R x# H! ~& t6 u J! Q( h! W1 @; E- a
modelActions = new ActionGroupImpl (getZone ());- J$ [( j, @. |& y
$ B2 I! p" H2 T8 @- ], Z try {
+ c: @( a% t3 S# M0 y modelActions.createActionTo$message
' C4 L, a* n! |- e, w ?* l3 O (heat, new Selector (heat.getClass (), "stepRule", false));! U3 z& b! z" V2 r3 U1 O6 s
} catch (Exception e) {
3 U" K# u9 P) M7 e* t1 e. |$ h System.err.println ("Exception stepRule: " + e.getMessage ());
4 G& z0 d, y$ w* L% G }3 c) g* d3 \, c( A( ?) L, {
5 B( x" v3 _1 ^1 S try {- v1 G2 o1 B# L" e
Heatbug proto = (Heatbug) heatbugList.get (0);/ |. l+ @1 Q5 Z) _- G( [2 `0 g, K
Selector sel = % X+ z( ]4 [8 `, U0 Z* q8 j+ C' n
new Selector (proto.getClass (), "heatbugStep", false);
" L3 b0 Q0 h- w$ X5 f( @$ F# U actionForEach =+ g8 {) G/ l! I7 S+ _
modelActions.createFActionForEachHomogeneous$call
) A; _, }! f( z% P, Q& X (heatbugList,- z) p. O' Y* V2 U. q+ O
new FCallImpl (this, proto, sel,
`# v& z; ?% v/ Z' R new FArgumentsImpl (this, sel)));
* k1 E8 a6 Q# E( ?- ~ } catch (Exception e) {
/ L6 C- `0 q2 N# h7 {/ y9 e3 [ f) c5 s e.printStackTrace (System.err);" B1 u; _" H; j/ d+ f8 C$ C3 k
}
7 v: x" h( _* i& |% X, X - Z% a. z5 H) e* u: m5 i& n: X b: H
syncUpdateOrder ();
6 x! L/ c$ }/ N
% `4 O8 V# R7 s3 \+ `# Z try {; A, [7 k. u- L5 a
modelActions.createActionTo$message 4 f8 n$ R2 c3 _0 g# V7 L
(heat, new Selector (heat.getClass (), "updateLattice", false));+ c/ Q! M# h0 C- v4 t; t
} catch (Exception e) {
/ D- f5 e9 M. e5 } System.err.println("Exception updateLattice: " + e.getMessage ());
* I( a! E) I1 b }' _2 V6 Z2 N! @3 |2 l) V# R
1 E9 b: y! j3 i# i% y" C6 W. X& b // Then we create a schedule that executes the
5 l! r9 _' A& K5 T; q // modelActions. modelActions is an ActionGroup, by itself it5 b+ R' V5 j Y. `
// has no notion of time. In order to have it executed in8 ]' E0 }" w( P6 z: j
// time, we create a Schedule that says to use the* E- h' N: e6 o) c3 D
// modelActions ActionGroup at particular times. This5 \" I( o* J" F' v5 {' B$ y9 Y
// schedule has a repeat interval of 1, it will loop every
' j- G ?* _7 B1 a: ~. s" C // time step. The action is executed at time 0 relative to+ z8 u" e0 h6 a& J. R2 `) V8 N9 K
// the beginning of the loop.
+ r! `4 h4 D& C9 W) t2 K* C! {4 a, q- r1 |
// This is a simple schedule, with only one action that is7 i- K& U) l2 Y, W6 K+ c
// just repeated every time. See jmousetrap for more
# z$ {8 n/ T6 U. Y5 `+ _0 n1 I. Z: E // complicated schedules.
6 v# y8 V- m; C0 B- j# i b3 u2 ?1 \# ~1 ]0 X* z# x+ }
modelSchedule = new ScheduleImpl (getZone (), 1);
+ M% l q$ q5 l% a" Q modelSchedule.at$createAction (0, modelActions); u3 b" n5 Y, i
3 l4 i6 }; @9 k' y
return this;+ W/ K/ s- Z2 b
} |