HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! H, M) V) S& q" U3 V* @3 w8 x( ?9 M# q8 _, Z' [! j
public Object buildActions () {. {1 X8 [- t/ {* Y* p
super.buildActions();
- C e, A! I7 {" {: ?* O 4 \( P' `. Q* S( Z
// Create the list of simulation actions. We put these in3 K; s1 y# j1 @* A
// an action group, because we want these actions to be
7 I* r, v! e( }# _- a // executed in a specific order, but these steps should
" u4 e$ T; r# C2 _ // take no (simulated) time. The M(foo) means "The message
. ^7 t7 W+ @& { i+ J0 M" p // called <foo>". You can send a message To a particular
$ P# u& E$ K6 ~: W // object, or ForEach object in a collection.
4 }: j1 ?0 y, ` E7 x3 U 1 P7 U( l/ A% L; V8 s, O# T* _- {
// Note we update the heatspace in two phases: first run
$ i N; ^4 z0 B( T( a( S2 L( F // diffusion, then run "updateWorld" to actually enact the
/ M% i5 w* |, g/ } // changes the heatbugs have made. The ordering here is1 \* u9 ]4 L( y
// significant!! H4 h; b0 D5 w% { N5 a8 j/ Z
' g2 {: h1 y" ?7 }$ d/ m
// Note also, that with the additional
" [1 z0 q# N0 p0 ] // `randomizeHeatbugUpdateOrder' Boolean flag we can5 ^; U+ F) c1 L* V$ ~
// randomize the order in which the bugs actually run
! X9 q- y5 ?, @: \4 P // their step rule. This has the effect of removing any
8 t B. b. O+ c* N5 _6 I/ p // systematic bias in the iteration throught the heatbug+ {( M1 P8 h& v* C5 t3 F0 }5 ^
// list from timestep to timestep8 h9 l: O/ r J% o# K9 \
0 W: Q8 U) U) p // By default, all `createActionForEach' modelActions have
7 C. W& H- {8 U/ `! F/ I4 X8 t1 Q // a default order of `Sequential', which means that the! r2 V/ o2 A0 U( ~: _
// order of iteration through the `heatbugList' will be
% q1 @" g' t7 }. R$ p // identical (assuming the list order is not changed1 {# v# g8 k2 I' A J
// indirectly by some other process).4 P: _8 F/ R; i7 e
# J- H2 K `6 O) ]3 n: a
modelActions = new ActionGroupImpl (getZone ());3 h, i6 c& J9 k& J7 o! L3 ~2 f% D; c, `
x7 ~! a& z6 T8 O* A1 J7 f- ^+ V try {
. Z5 @8 L& O: r; J modelActions.createActionTo$message+ n; y& ^; [& R& r0 ?/ _% r
(heat, new Selector (heat.getClass (), "stepRule", false));' U+ z4 u* I# G) O: Y
} catch (Exception e) {
5 B) ]- H2 v+ Z" N; a# ^: o5 V" k5 H' Q System.err.println ("Exception stepRule: " + e.getMessage ());3 E) A# F0 i) D- M. V
}
& K- C6 k; ?( N* L. Z& l3 @- y
+ b, |/ ~1 m- v8 W try {- L9 p2 Q! m& e/ }% }
Heatbug proto = (Heatbug) heatbugList.get (0);6 z: n9 P5 t; R. e- J9 a
Selector sel =
$ p6 G: o; m0 m% U new Selector (proto.getClass (), "heatbugStep", false);' o) [% M! f! \- {0 `2 J# a
actionForEach =2 E" H# q2 J: h/ W& \ x8 I
modelActions.createFActionForEachHomogeneous$call
/ d0 _0 m) }7 H (heatbugList,
5 B) f1 a! d P5 @ new FCallImpl (this, proto, sel,
/ `: j- L! Z/ ^ new FArgumentsImpl (this, sel)));
" ?! o- o- d+ V } catch (Exception e) {
8 r3 ]0 M- T: J e.printStackTrace (System.err);
* O* U8 p7 @" B }7 C# j: x3 I+ j9 D- r2 c; \
2 W0 P7 f. C( W9 M* m8 y
syncUpdateOrder ();
( a+ _$ q1 k2 n# i6 f+ G) x6 j: W* F3 j# s5 a
try {
1 N: ], Z6 i' P4 J modelActions.createActionTo$message
+ W( A! i3 a& E (heat, new Selector (heat.getClass (), "updateLattice", false));
4 r8 N. q/ u2 e0 ~9 _ } catch (Exception e) {- t# M. u7 @$ W: @& k$ A
System.err.println("Exception updateLattice: " + e.getMessage ());* c. l- @* `" T1 I6 m, I5 o3 P
}
$ S1 a+ x7 Q" R2 h; J% x% g6 Q1 r 3 ^3 B7 H% |4 ~! D; ^
// Then we create a schedule that executes the& Z! j, r% G" ^$ b
// modelActions. modelActions is an ActionGroup, by itself it
' R) e! D& g3 u) b ? // has no notion of time. In order to have it executed in, T- `1 |- S& J& a
// time, we create a Schedule that says to use the
& ~4 \6 [% }( ]1 \, m3 o0 C7 B // modelActions ActionGroup at particular times. This
0 B( E5 B( r& U2 a // schedule has a repeat interval of 1, it will loop every) T. B4 v6 J( V* w# P! t7 Q/ f
// time step. The action is executed at time 0 relative to! P4 ?, ~/ b5 i- m2 ]
// the beginning of the loop. G( j0 O- S$ \4 v- o
9 O3 ~, A7 |( z1 I: b7 F // This is a simple schedule, with only one action that is
7 u1 y- k0 ?$ V% t* i // just repeated every time. See jmousetrap for more
5 G2 c2 i% D1 A) b; @% U // complicated schedules.
& R; s% L1 @' w7 d+ h/ J 8 ~- ]5 b8 }; {4 y7 D
modelSchedule = new ScheduleImpl (getZone (), 1);1 f8 C' I- T, G- d* J
modelSchedule.at$createAction (0, modelActions);
( n% G# \ |6 k5 N1 x6 ~
( x2 O* y+ n# _9 |( M& q return this;
$ D& v( U; O' p } |