HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' _. y6 J. D7 F" v* r6 Z$ r
+ ]: V5 `5 x8 n5 N$ g public Object buildActions () {3 F+ x* l- I! |' f( j; E- i D
super.buildActions();1 L- s+ B+ B8 z$ f! z
8 Y8 e8 r1 e. R // Create the list of simulation actions. We put these in
# y8 {; W) ], V p // an action group, because we want these actions to be
4 g3 U/ Y7 N, [; B // executed in a specific order, but these steps should
. j5 X4 H4 w9 X // take no (simulated) time. The M(foo) means "The message
' e6 O4 K" Q/ j; V" J) D // called <foo>". You can send a message To a particular/ D7 @0 P6 e* Y" P" X% X6 V' J4 Y8 {
// object, or ForEach object in a collection.
9 }. R2 e3 M9 {% Z2 I' g7 U8 h C " x6 A& K! g+ u. ]- y) i1 p
// Note we update the heatspace in two phases: first run* l3 U B, y; b4 {" G i
// diffusion, then run "updateWorld" to actually enact the: }1 l, J8 U& `/ y! C o
// changes the heatbugs have made. The ordering here is7 P+ h/ C+ h# ?/ O3 [; [6 ?, }
// significant!
) r p6 D, J& y9 ]1 T 0 S/ [/ \& B" d F6 R
// Note also, that with the additional
y- N4 M4 z5 }1 y4 ?( { // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 c3 m2 Z, O) _$ R; ^ // randomize the order in which the bugs actually run
, i) e3 u* Y0 T" m // their step rule. This has the effect of removing any) r! Y% H2 V9 v7 E% ~4 M. m
// systematic bias in the iteration throught the heatbug
0 o) z* \! ?9 ?& o1 x% C6 C // list from timestep to timestep
2 I/ k+ h$ p* G: m 1 C! D( A5 g, G8 k& R0 J7 u
// By default, all `createActionForEach' modelActions have
! h; z; b% {+ m [ // a default order of `Sequential', which means that the
, @' @4 @+ J8 C9 L* s // order of iteration through the `heatbugList' will be8 b: [: J: Y1 n
// identical (assuming the list order is not changed( Q) a( l4 X, r6 k& y
// indirectly by some other process).5 v6 j& R l. J- X; j, @' Q
+ {; _1 m6 K7 Z7 L
modelActions = new ActionGroupImpl (getZone ());
4 D- c1 Z9 N5 I& Z5 n9 |
: f. u2 i( N9 f* P4 ^6 t0 } try {' Z+ u; j* w$ F: a0 x% v- R* K
modelActions.createActionTo$message/ h. K/ t" c4 u+ {; l9 C# H" M
(heat, new Selector (heat.getClass (), "stepRule", false));3 k2 ^8 P$ E; {
} catch (Exception e) {3 H3 ]$ F* k4 _& q
System.err.println ("Exception stepRule: " + e.getMessage ());
; T6 B7 ]* ]7 `$ C: V: d }6 w0 q" D5 h# C6 c2 T
3 k- |! O4 j+ @2 U4 b* y
try {
2 t6 W" O, M' M2 q/ K' A1 e Heatbug proto = (Heatbug) heatbugList.get (0);8 e/ z+ J; S4 |! I' l* M* x# p' P# c2 D
Selector sel = ( T8 p: c$ d! Q2 `% x( q9 ]$ z
new Selector (proto.getClass (), "heatbugStep", false);! Y" W: o1 \: T. |% |# l; v" {
actionForEach =
( i2 T6 d: f4 i W" \1 d8 g' i( o: y modelActions.createFActionForEachHomogeneous$call! ^0 b3 ~; a( t/ D! {& {9 y& U1 S
(heatbugList,
+ j! E; O$ K) U X& [: o/ ?( @5 M new FCallImpl (this, proto, sel,5 c1 F1 g5 x" E
new FArgumentsImpl (this, sel)));/ u, p, F9 L0 f3 a9 P5 J& {# i
} catch (Exception e) {
, o r# G8 U0 \) |9 _ e.printStackTrace (System.err);8 w. ~* M: E6 Y8 \' H
}
4 T; f0 L; X3 `, D( l4 b ' m$ O+ F U- |# m, j* ~
syncUpdateOrder ();* h; o" n2 i+ f" `! P* _; j- ]
6 m/ M$ O6 E7 F8 \! i try {$ O1 `- T' y+ X5 U* G4 _' U8 ~0 E8 |
modelActions.createActionTo$message - \, `4 K% D1 Y( b
(heat, new Selector (heat.getClass (), "updateLattice", false));
# q7 v6 T4 W$ y3 g% T% H) J } catch (Exception e) {
# d7 P7 g1 b: ? l5 N) U1 ~ System.err.println("Exception updateLattice: " + e.getMessage ());
- O/ L7 z5 R- N+ Z+ U7 D" u8 L7 j }6 ]$ F* o# q0 [
* a L# s' }8 L' w, _& U // Then we create a schedule that executes the
! g, {6 x* u. |# P) E // modelActions. modelActions is an ActionGroup, by itself it
* V+ N, i0 E% ~4 ] j: `$ ` // has no notion of time. In order to have it executed in- x$ z9 r' s/ s0 D1 |& D
// time, we create a Schedule that says to use the" \# T) a; Z$ A( N7 v8 @1 b4 G2 T
// modelActions ActionGroup at particular times. This
8 p0 H3 k2 ~, ^$ _ B/ z& e% X // schedule has a repeat interval of 1, it will loop every
I# C; Q3 C+ o/ s7 q g // time step. The action is executed at time 0 relative to
( w. P# T3 s1 v6 K' `7 N' R5 ~ // the beginning of the loop.2 D, C+ ^4 X: V& `4 k
$ Y' ?7 e4 m5 Q // This is a simple schedule, with only one action that is' i1 B6 B8 @- V& Z' W6 e% h, f( H' w
// just repeated every time. See jmousetrap for more
( \. Y8 B0 ^3 ?9 A/ Z // complicated schedules.* N* F* t* {- z0 V- @& l
6 P3 I5 } q2 I/ q | modelSchedule = new ScheduleImpl (getZone (), 1);/ c S# D- e( X4 P V, Y( Y
modelSchedule.at$createAction (0, modelActions);
3 L- ]+ k! s1 t* z; Y% \" l0 W
9 ?, d+ i. J. C$ C# d' v% [ return this;) F" G, F# {, i3 ^# c5 p1 l
} |