HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. B' H% E! [" `" y" ~& A/ }
, [7 A2 G* }# O, G) g+ z
public Object buildActions () {, @6 X+ q) g( S$ \0 @. a
super.buildActions();9 T5 F( Q/ N6 n% K6 l; j
8 W3 |& m3 c9 X* G; N$ w
// Create the list of simulation actions. We put these in3 z0 z7 _* g z5 w) ~% h
// an action group, because we want these actions to be6 C4 l G$ `1 l: d& M& g* V2 D# K
// executed in a specific order, but these steps should
, v: g! \0 Y+ X; z* {& L) w // take no (simulated) time. The M(foo) means "The message
5 k% t% W3 |& \$ n3 X u0 z // called <foo>". You can send a message To a particular& M, K# I2 \% g8 p5 T2 a
// object, or ForEach object in a collection.
; F* b% Y% V, g2 V& c 2 y9 T! }. [9 W- K
// Note we update the heatspace in two phases: first run
0 s' q* a9 J; y A3 V2 e2 k+ X // diffusion, then run "updateWorld" to actually enact the: t* `# Y0 |2 |( I$ K
// changes the heatbugs have made. The ordering here is8 A" t [/ w, R1 J; f3 D
// significant!4 M/ z+ z) h) L6 Z! s
+ u9 c. c* g3 w7 a- m1 d: Z
// Note also, that with the additional1 h! o7 y5 V9 R) m- e
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ f; V8 G3 K# \: v1 ? U3 L* D
// randomize the order in which the bugs actually run
1 v* ^0 N# _9 O4 z( L // their step rule. This has the effect of removing any$ Q7 Y! e2 D4 X: V/ y6 l
// systematic bias in the iteration throught the heatbug
- p* R1 u& c5 a6 Q2 O. L' F! i // list from timestep to timestep q' ?) I5 U& Y" U0 d
7 r2 X. a# l& q
// By default, all `createActionForEach' modelActions have5 ?7 V+ m. t% b* R2 Y8 R
// a default order of `Sequential', which means that the
1 v+ w1 V9 m3 o) K! H // order of iteration through the `heatbugList' will be6 y; s, x% r1 s9 o: t
// identical (assuming the list order is not changed
8 |+ v6 c8 H# W# t // indirectly by some other process).& n% Z% @; N6 a2 G
4 {+ ^* z, t$ \: }% x5 U modelActions = new ActionGroupImpl (getZone ());
; m- m, P6 Q% b3 V6 O5 G
5 z6 x$ ~1 R- ]% A. O( {2 n2 j4 T try {
9 ?6 R" H1 M5 p$ ^( E modelActions.createActionTo$message, [) W: r2 z9 v" V+ j
(heat, new Selector (heat.getClass (), "stepRule", false));
5 P0 j% s F, g/ v } catch (Exception e) {/ m9 @' U+ L. D1 i! X/ O& ~+ \
System.err.println ("Exception stepRule: " + e.getMessage ());, q& G& ?. [* }* _7 `# q
}$ ]+ N& V- s! d. q- I1 F, k4 }* I
) U: Y6 g+ j: n) u! S try {
) p( Z4 N9 r" v Heatbug proto = (Heatbug) heatbugList.get (0);
& f9 w( v# x( z4 C Selector sel = - Y/ k% W& v4 d4 X% t6 X
new Selector (proto.getClass (), "heatbugStep", false);6 u( E3 m5 f+ P' H% F
actionForEach =
/ l0 ?$ G, k U1 M M modelActions.createFActionForEachHomogeneous$call8 p) ?5 Y( O6 e7 N' D! L
(heatbugList,/ c2 H( X1 ]: B' {, Q
new FCallImpl (this, proto, sel,
0 ^/ c. `) l1 Z( }2 |; M' ~& ^& C, [ new FArgumentsImpl (this, sel)));
9 @' t( ^; x2 j; i } catch (Exception e) {
0 M' a" s8 F8 J6 v& J9 x, b e.printStackTrace (System.err);
$ @" n! I6 m* z) j' S) a }
) ]7 ^+ r( m8 r; h2 @- l$ t) n 4 E, z8 G% [& H2 j3 a
syncUpdateOrder ();1 Y% C5 g w! Q2 G& D- u- J9 p
0 \- e8 f Z, e' ?8 d3 H+ T$ f5 ~ try {
* u' @8 w$ }5 F3 g' u' H modelActions.createActionTo$message
0 Z5 v4 C/ M5 k% O& i' q- L (heat, new Selector (heat.getClass (), "updateLattice", false));
7 H4 g# `, F8 i( ?: Y } catch (Exception e) {
9 _ ]( ]1 I7 z7 I& K" r System.err.println("Exception updateLattice: " + e.getMessage ()); K2 R! X4 J) @; c0 }. d8 \
}
2 W+ A ~' @* r9 T ' L0 V) I& r0 v1 D0 c& r. [7 h/ D
// Then we create a schedule that executes the+ G- f" F7 }8 z# j9 Q( f
// modelActions. modelActions is an ActionGroup, by itself it
5 S+ q, u5 F; N, ] // has no notion of time. In order to have it executed in) L* D8 y0 c+ C: }1 ^6 G( U2 n
// time, we create a Schedule that says to use the
: C: s3 ~! Q' M: d( `- d* [4 Z // modelActions ActionGroup at particular times. This
* h6 I6 Q3 ~8 ?- V+ H4 j // schedule has a repeat interval of 1, it will loop every$ N* B/ [3 T( Q" t, z
// time step. The action is executed at time 0 relative to& [, |0 V# z. C
// the beginning of the loop.
~' q. W X& [$ r A
; z( @* a4 R9 n6 J4 I" V" l$ ]3 F // This is a simple schedule, with only one action that is
# A0 X4 @+ F" h- P // just repeated every time. See jmousetrap for more
1 F2 A: y8 R. h0 v0 B+ h' g: ]# Z // complicated schedules.$ I( F2 d) _& D; T. T
% a4 h3 M0 m; A1 e7 w1 @ modelSchedule = new ScheduleImpl (getZone (), 1);
8 W" Z: J( O a' W: l' E modelSchedule.at$createAction (0, modelActions);* b( B; g! n R
: H" s4 F* g3 F) ~ return this;
6 r+ L8 N+ P- `. w6 h) \& I5 ]$ s } |