HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* n$ N! R2 I# D* G
7 M8 V8 l" x. {! M0 T
public Object buildActions () {
6 ]0 K; ~: [. [6 O super.buildActions();
$ _; A! p, Y) ^2 J/ I8 n# J5 k ' @) a, y- P0 S1 i0 ^
// Create the list of simulation actions. We put these in ~- j/ T; ^" @+ f4 j i' ]! _
// an action group, because we want these actions to be
- \! I( f* x) m+ F Z: X // executed in a specific order, but these steps should
4 g" G3 P7 f0 p& U0 Z' D* Y // take no (simulated) time. The M(foo) means "The message% b( `5 W1 V X: ~
// called <foo>". You can send a message To a particular
& u3 Q; R0 u, c# | // object, or ForEach object in a collection.
1 O* H" x/ M- z% T: a s
, h$ e! Z1 ]; K5 v! m // Note we update the heatspace in two phases: first run! h( O/ Z K* }+ s1 @& ~
// diffusion, then run "updateWorld" to actually enact the, d5 ?; ]% }! t0 F) \/ f# ?: P* f" Z
// changes the heatbugs have made. The ordering here is3 p7 H' l6 |0 r: I5 P7 \9 H
// significant!* P. m3 S& W2 l: k
j2 t# {2 T# j5 U4 i, T4 D- g // Note also, that with the additional- {& g# B4 M1 P2 H2 J
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 s( P7 y8 d; _& h1 ?
// randomize the order in which the bugs actually run* v7 t% F0 m7 {' M
// their step rule. This has the effect of removing any* C( ^ M% R3 [8 {7 D. d; F
// systematic bias in the iteration throught the heatbug( U" g0 i; E# {4 h
// list from timestep to timestep
3 A$ X; a1 d n9 {( m. O4 P
' ~' A; s# O- W/ q/ |' z // By default, all `createActionForEach' modelActions have; E& `5 {8 `$ a# x3 u! a4 ^5 G
// a default order of `Sequential', which means that the
7 l( s5 Y* K+ b6 t4 @. I // order of iteration through the `heatbugList' will be
! Z) M, }# }( X9 V2 R4 X2 ` // identical (assuming the list order is not changed
( j# u4 Q4 t1 j- u0 F // indirectly by some other process).) L: k2 g3 W3 n% F( _* l- H
& U2 U, w) N: a2 N5 C! C modelActions = new ActionGroupImpl (getZone ());
& ^- n$ N/ u3 X9 L" H: d+ o+ l' D! v" A& \" b
try {% z% R6 [5 t5 c2 ~) }
modelActions.createActionTo$message- E3 U" g9 s' k8 i* G# o
(heat, new Selector (heat.getClass (), "stepRule", false));
5 m+ p$ A: d) R1 T) I } catch (Exception e) {& `0 d5 | T+ W. y; e' H @
System.err.println ("Exception stepRule: " + e.getMessage ());
1 o' F+ p2 c7 d' `% i4 l2 e }
( E" g+ G$ x M6 I/ J" j+ i2 A0 ?7 }. E0 B' v+ c0 [( L
try {
; f* v9 k: A( ~2 |( Z Heatbug proto = (Heatbug) heatbugList.get (0);% s9 X# E4 i; j# F9 J6 s: V$ w
Selector sel = 1 I# { q$ c8 T
new Selector (proto.getClass (), "heatbugStep", false);0 Z. T& X4 I9 e& y( T
actionForEach =( x& X; b5 Z, T. |" }) r9 c
modelActions.createFActionForEachHomogeneous$call) a1 |8 x( r/ ~
(heatbugList,( K0 [/ \8 f; K( R# }6 }
new FCallImpl (this, proto, sel,
5 k) q3 A0 F8 G% \( c% o* P1 m new FArgumentsImpl (this, sel)));: M1 w2 F5 a2 ?( r9 ^
} catch (Exception e) {$ N# E& w3 t5 d4 H7 j3 n8 |% @2 M) T
e.printStackTrace (System.err);
: y$ q# F& x- Q* X# ^- C }
{+ ?4 J4 n; {7 o* y 9 b i4 P& N R4 Q; o ~
syncUpdateOrder ();7 b# Q" ^% K* R( r' Q" A; m: f# J
6 I" h" _$ @9 o try {' v- J; M7 W; _7 J- J& }2 d$ x
modelActions.createActionTo$message " ^* b( Y4 }; x, Q0 Q
(heat, new Selector (heat.getClass (), "updateLattice", false));
- e! O( Z# b0 u7 w5 L- k } catch (Exception e) {$ U$ N' x6 e) g- Q
System.err.println("Exception updateLattice: " + e.getMessage ());8 G9 `* U$ K! a% y# J: t$ d" S, g
}
4 H/ r! h! o, w+ M % \0 ^9 V P- _
// Then we create a schedule that executes the
; r1 d# Y+ R2 I9 ? // modelActions. modelActions is an ActionGroup, by itself it
1 ~" l# m3 ^/ [/ s# ] G // has no notion of time. In order to have it executed in
5 N3 J( I# U+ {9 O$ Z // time, we create a Schedule that says to use the4 h+ j& h+ R; d+ I/ m7 x6 N: d
// modelActions ActionGroup at particular times. This
* w" M4 ?2 E! E4 ? // schedule has a repeat interval of 1, it will loop every; i5 @" m' c! ]( q& L
// time step. The action is executed at time 0 relative to
7 m& ^3 d" b7 A // the beginning of the loop.$ p( b: Z' D3 e. x4 \ ~
2 m% }1 G+ e; W' V( M // This is a simple schedule, with only one action that is
9 P8 Y- I! v7 _; R5 E5 `" k l6 S6 g" x // just repeated every time. See jmousetrap for more! S+ W0 @; O& x0 Z, f4 n, q, F
// complicated schedules.
6 P1 }" f' B+ n; e$ @, o / G$ k6 ?' w3 ?" _- f; N1 G! l
modelSchedule = new ScheduleImpl (getZone (), 1);
2 E1 m2 ?8 F. W' l+ y9 v3 Q( u% e modelSchedule.at$createAction (0, modelActions);. ^; e& \2 I; F9 K; T
# h. {) b2 E! ]: p return this;
% v$ a9 f, B+ h+ Z% S q' @/ v& N1 ? } |