HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) ^0 \- l: j- G: Q& h
, ?; | S# L1 C8 i public Object buildActions () {$ j8 y( [- @0 |0 u
super.buildActions();5 ]" m) u; ^/ I" ]" J) C
4 f; h* t$ ]8 c* L$ t
// Create the list of simulation actions. We put these in/ Z4 C$ x' f( _# v% e
// an action group, because we want these actions to be0 Y2 r/ F5 T- A% J+ ~) q
// executed in a specific order, but these steps should4 L6 F2 o' _! a6 |
// take no (simulated) time. The M(foo) means "The message+ w9 d& [0 B$ c4 l; J- [, V. E
// called <foo>". You can send a message To a particular
- H3 Q7 P( h+ I // object, or ForEach object in a collection.
$ v5 z1 O" P' |( f! z. P0 P) ~' \
6 J6 [4 c! W0 k" g! u // Note we update the heatspace in two phases: first run- N0 b8 Y6 `5 {) K% {/ _( p
// diffusion, then run "updateWorld" to actually enact the
/ b9 u( a; i" p U$ i: @# x, y // changes the heatbugs have made. The ordering here is/ v9 z! D: s/ l8 K
// significant!
8 l1 d ~; V+ N1 [) I% {; | \ & w& K# }3 Z3 k# c. w
// Note also, that with the additional4 [. d {* w& o$ G1 _5 D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. Z5 m8 o9 L7 A" `% m // randomize the order in which the bugs actually run8 H- i0 E, x" o! _4 R9 T" p, `0 r
// their step rule. This has the effect of removing any
0 B( U. C* |' a8 k3 M4 L // systematic bias in the iteration throught the heatbug
: `& e7 E& R$ l6 V2 K' w // list from timestep to timestep1 f/ Q h/ k& {6 ~; F! c/ {; y6 m
1 a( C) x; K* L* s, O( @( ^6 M
// By default, all `createActionForEach' modelActions have
% F( _; t* o5 H- ~0 \ // a default order of `Sequential', which means that the* r; y2 K) b) j& m. I
// order of iteration through the `heatbugList' will be+ P/ N$ r% H9 Z5 T2 X
// identical (assuming the list order is not changed( L; E5 u! U6 b1 d
// indirectly by some other process).+ i# L, b9 G6 R, \/ n+ v
) n! l t+ F) I- e0 m
modelActions = new ActionGroupImpl (getZone ());
. n( \0 D" D) N4 R3 R. _8 O1 U
5 H! t$ o: W& X! P. I try {3 P, m) x& K4 _; Q; a
modelActions.createActionTo$message# g9 n" h/ F6 k( C2 E: [3 H
(heat, new Selector (heat.getClass (), "stepRule", false));+ L" i& ^( I' v* \
} catch (Exception e) {
, w: Y& u8 c& s4 ^ System.err.println ("Exception stepRule: " + e.getMessage ());/ g. t* U' W( o+ ~
}
) ?, a! q* Z# x) u, G4 a
$ \& T7 Y" i' M0 _! u0 B4 [, A try {- Z6 @4 K" N" n6 w
Heatbug proto = (Heatbug) heatbugList.get (0);
7 K& U/ t- R: [ Selector sel =
5 L1 N6 S# p) M# R new Selector (proto.getClass (), "heatbugStep", false);; d A5 }/ {: ^0 B) E
actionForEach =) z+ m9 h( N! ~6 V$ y
modelActions.createFActionForEachHomogeneous$call
1 k+ {" {$ f; L7 \- j1 _ (heatbugList,1 T$ i% S& \7 |) e; ]$ F
new FCallImpl (this, proto, sel,7 `- g: _/ X: S1 w' ]; B; T) u
new FArgumentsImpl (this, sel)));
; M% C* m6 l1 u' ~. R! T) j- j9 A } catch (Exception e) {
: {7 i2 q& P3 P1 P; {3 N e.printStackTrace (System.err);
, ^- O/ z7 s# Z0 R: C% f) ^ }
! J* g, w) \, _- w, @1 q2 D9 Y' C 5 r) ^1 I( E% f- o" W; I# k
syncUpdateOrder ();
, I" p% A0 S8 R' _+ q
4 V5 ?7 a6 u6 K9 E" Z+ n/ B! R try {" A6 ]4 v% V2 j o3 R4 w) D
modelActions.createActionTo$message
9 i- L( `& d# C: ?2 ` _4 c' j0 O (heat, new Selector (heat.getClass (), "updateLattice", false));
( B/ |/ [9 j( d- Q/ r! w: @& x } catch (Exception e) {
* x' x7 W0 D% P* [7 J" {+ { System.err.println("Exception updateLattice: " + e.getMessage ());, y, _0 s# e$ z2 \" q
}
3 Z- {. a0 m% @3 t 1 _$ h1 ]( y l5 T5 ^4 b+ {2 v/ r
// Then we create a schedule that executes the" c! l' V4 i% _" _& D! ^0 e
// modelActions. modelActions is an ActionGroup, by itself it7 u. I$ L" e, I7 U$ [. S9 A7 V
// has no notion of time. In order to have it executed in
( N; r" p0 u4 F& h1 c8 @ // time, we create a Schedule that says to use the8 P" w. i/ V# E; ^2 b" d1 ]7 `
// modelActions ActionGroup at particular times. This
( W7 W- o6 L* r1 J! M% c // schedule has a repeat interval of 1, it will loop every2 {. F. `+ ^: f' K; b* `
// time step. The action is executed at time 0 relative to4 i4 A6 m% {3 @& W, S6 Q- Q1 O
// the beginning of the loop.
/ T! j1 {! t7 n. Z
) n7 q7 v9 e3 k8 v" e8 a$ ` // This is a simple schedule, with only one action that is
8 c1 o: i5 B F' p1 e# u2 u // just repeated every time. See jmousetrap for more
|# A- Q& m( {9 t3 w9 `% K // complicated schedules.
4 f/ y# v! c% P5 p! u7 v / g# d5 b0 f; S9 O* H
modelSchedule = new ScheduleImpl (getZone (), 1);
" N' R0 \( H! L3 Z" n/ e; U modelSchedule.at$createAction (0, modelActions);
2 x, ~9 |' X; Y% }. A4 s; p + U$ d" @+ v% w
return this;
, r3 p& t7 W3 `" U! E } |