HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 o$ a; P' g" ]! W$ [% d. l4 W! S
/ G7 X( t2 n* j; N" O- h0 N public Object buildActions () { t7 {8 B8 M, u7 R3 v7 M J
super.buildActions();
! @# ~$ N6 G) A) w! w % j% T r1 O6 _1 A
// Create the list of simulation actions. We put these in$ n/ {- x( H8 O
// an action group, because we want these actions to be
8 b( P# N$ y; |# Y* [ // executed in a specific order, but these steps should
- A( J5 q* O, S% O, m5 E {' z // take no (simulated) time. The M(foo) means "The message1 Z+ ?+ z [' b! J+ h
// called <foo>". You can send a message To a particular
- `0 k; W1 \6 t) E0 [+ L // object, or ForEach object in a collection.
p P+ y' L$ D! h5 O% W ( x. P9 u2 ~! }# H8 d i; o
// Note we update the heatspace in two phases: first run3 j: b: T, T5 i( S# m+ A; A) X
// diffusion, then run "updateWorld" to actually enact the
+ E! |3 R7 u: G D, a0 b* s // changes the heatbugs have made. The ordering here is1 w) m7 n+ w- W( @: A% S
// significant!3 ]8 J; S* t- o/ `9 h- Z8 E
1 y8 r4 _1 h$ v. E // Note also, that with the additional
9 l( e; _! }; i. T9 D2 Y- D // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 n3 t+ J3 p' w2 r5 K7 J% d // randomize the order in which the bugs actually run
( @* h6 H" I% f) y h // their step rule. This has the effect of removing any( L6 \! t8 Y! k, \) D" @1 _
// systematic bias in the iteration throught the heatbug+ G) i4 v! f! J P; j; i
// list from timestep to timestep2 r5 b8 ?7 \4 U
1 V& j, ]% F4 v3 |6 m/ t1 l
// By default, all `createActionForEach' modelActions have# ? Y) P+ i, H8 {) N/ J7 Q
// a default order of `Sequential', which means that the
" [; d. z+ y/ ~2 X# d, j // order of iteration through the `heatbugList' will be
v# w" f& n2 Q7 Q // identical (assuming the list order is not changed7 i: S4 W1 v2 } u1 [0 b. h' h! U; @
// indirectly by some other process).' T9 P( N) f& v# h n
" L) `# d! q5 ~9 }6 m+ m modelActions = new ActionGroupImpl (getZone ());4 H0 [6 r6 [6 F! ?
1 n% B1 N9 h3 |) M9 ?' z
try {
0 O. l2 _$ q) S7 ` modelActions.createActionTo$message: S% k$ p, V0 C6 S- S) T
(heat, new Selector (heat.getClass (), "stepRule", false));
7 B* W6 m( k0 t% X9 r } catch (Exception e) {, G( `; k9 B% T% R
System.err.println ("Exception stepRule: " + e.getMessage ());, F0 x# n$ H+ n3 E. U0 F* U
}7 t5 l; O$ M7 m: `
1 N1 S; k; u3 s1 ~+ ]
try {
D/ j# T' J0 m( s0 n% Q) b Heatbug proto = (Heatbug) heatbugList.get (0);+ p4 P! ~) M0 p f5 w! W) X# k
Selector sel =
) b$ K! M- S8 ] new Selector (proto.getClass (), "heatbugStep", false);, W" v, {6 Z" M$ O) o! N7 E: q
actionForEach =
4 O Z- i0 A# i- W/ w modelActions.createFActionForEachHomogeneous$call& v$ H- R, p# {( Z- \( T' H& d
(heatbugList,% E. Z5 V+ r- G. e" ]% o# ~6 I/ b. y
new FCallImpl (this, proto, sel,
9 ]9 ^! b3 a3 `, p new FArgumentsImpl (this, sel)));& @, H. h# g8 l0 W( e; R9 M, b, H
} catch (Exception e) {
* c2 ?6 ^. N) u" `- n& E' j5 R8 g e.printStackTrace (System.err);7 Z, v, ]+ y: X% |- k
}! H9 x7 `( x5 b1 j4 Z% N* m3 a
3 X) }5 c4 d( X G& h1 s syncUpdateOrder ();
7 O# p8 w: o1 x) I# V& F' b2 r. v O, v
try {/ d; Q+ [7 I! c* s& m; B
modelActions.createActionTo$message # Z" s, G2 X( d1 J& }
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 F+ y8 F; v3 H/ F5 a# }) A } catch (Exception e) {
E/ \" S# j5 R8 W6 `5 D7 j, ~0 g System.err.println("Exception updateLattice: " + e.getMessage ());% g- S+ [5 Z5 u. s5 \4 C9 R
}
9 ]( K1 E; u' X" L% b y0 \ : p2 B" m" M4 e) z" `
// Then we create a schedule that executes the
j/ N4 g4 e/ s" s1 C8 W2 p) A% v // modelActions. modelActions is an ActionGroup, by itself it5 B( B0 g# ~$ B, V
// has no notion of time. In order to have it executed in
( H3 o: s! z, p! @. t // time, we create a Schedule that says to use the
- O: _9 [, h2 N // modelActions ActionGroup at particular times. This T% S2 U% E" o
// schedule has a repeat interval of 1, it will loop every
2 \0 s0 Y+ N0 v# p // time step. The action is executed at time 0 relative to. | _+ t# o/ B
// the beginning of the loop.
' O3 Z% Y7 o, Z) {
( {5 ^) O7 W/ }( H // This is a simple schedule, with only one action that is1 X" ]7 j) M& l. c5 H
// just repeated every time. See jmousetrap for more
( G+ K/ c0 r+ `) ?, i5 b( F9 ^ // complicated schedules.3 x. N# {! R& J" e
! l5 j0 D! G b; E, t) Q8 Y
modelSchedule = new ScheduleImpl (getZone (), 1);
( q3 d3 _$ L& V$ S( M. c" v! Y4 L- M modelSchedule.at$createAction (0, modelActions);
8 O% l1 k4 r( y0 h- ^. S/ V4 }: Z
; z( y2 F6 o7 B& q6 T+ H1 @ return this;6 z) }9 |, y* _
} |