HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 K- T9 r4 |, B% D( z; e
) O1 ]) t: |8 b2 R2 P
public Object buildActions () {. ^# b0 G* w7 g+ U0 ^4 x8 N
super.buildActions();
, M9 K6 A. `: r3 ] ! }, X4 _9 B) N, S: g
// Create the list of simulation actions. We put these in% [+ P; y2 a" s: Q
// an action group, because we want these actions to be
: g& c% z6 b6 ^9 [. O M // executed in a specific order, but these steps should S/ [$ F+ r& R) D
// take no (simulated) time. The M(foo) means "The message& _" }" l" a/ w! G- W6 S6 _
// called <foo>". You can send a message To a particular2 ^5 g* f+ d- W2 I
// object, or ForEach object in a collection.
& b3 C' U& t3 x( U+ n* F 3 [ |1 M7 Z0 h' Q2 I" x
// Note we update the heatspace in two phases: first run) o0 `0 s' n0 s2 C0 |& J! E7 F
// diffusion, then run "updateWorld" to actually enact the
1 e9 Y8 M% a, k; {# b7 e+ g: d // changes the heatbugs have made. The ordering here is
~. J! R1 x; a) ~ // significant!- D/ |0 g6 T* w' f( ]6 g5 f$ a& N
2 q9 `, k7 [/ t1 _% j6 I // Note also, that with the additional6 a) K" N; a, \/ h8 Z! o
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 f h' E3 \) `4 \: D+ i: P0 S6 @
// randomize the order in which the bugs actually run) H) i$ z% |& E& s
// their step rule. This has the effect of removing any
i. z1 c+ G4 O8 J8 q* y6 g // systematic bias in the iteration throught the heatbug! f% u @( l( G* u6 }, p
// list from timestep to timestep" n; M. ^) V4 I6 h8 h
4 J# j; H" z. C+ C8 \
// By default, all `createActionForEach' modelActions have
2 ]8 v; [' @' B3 r; F6 M9 G8 m a // a default order of `Sequential', which means that the
! @+ C6 N0 E: G+ U k // order of iteration through the `heatbugList' will be/ ~6 h }$ _7 F& O4 u5 ^4 C
// identical (assuming the list order is not changed6 y0 ]* x1 c6 z9 f$ }; S
// indirectly by some other process)., u+ q# x v/ w, z T
. Q& Y* s/ q3 t: L; c$ }0 _ modelActions = new ActionGroupImpl (getZone ());" B1 {5 G3 d/ p: K, g- t
! [/ q* t* `: k# { try {
' B8 J( J! s4 c' c1 E3 h% d1 V9 w modelActions.createActionTo$message! [5 T L6 q6 |' ^
(heat, new Selector (heat.getClass (), "stepRule", false));
; U* }; Z" x$ `) M } catch (Exception e) {
) l% ~* p5 T& Y5 O System.err.println ("Exception stepRule: " + e.getMessage ());
, [. C6 W8 C6 u9 r2 b }5 t+ ?' K- c r9 I* ?: ?1 G
) Y$ d8 N9 F! P0 s$ Z, b6 t' t
try {- M* H5 E' a1 K! X4 D- v
Heatbug proto = (Heatbug) heatbugList.get (0);% }; M t+ O0 T2 {: v
Selector sel =
{: p: m* O% M0 h new Selector (proto.getClass (), "heatbugStep", false);
9 \: Z) b4 i) J actionForEach =
, R$ V" N# E( {! F' ] modelActions.createFActionForEachHomogeneous$call
& ^/ p7 O5 h7 s9 m1 O5 C3 } (heatbugList,
5 ?0 h7 B+ o0 d new FCallImpl (this, proto, sel,
4 `, H O$ z5 n' }! b5 @$ ? new FArgumentsImpl (this, sel)));& X; \& o( e5 `$ k) t
} catch (Exception e) {. k! i4 R( A$ V- O# m4 T( s( L
e.printStackTrace (System.err);
' E' Z$ C7 j+ f7 S6 ~ }. ?* e5 F; ~, Q8 j. }: f5 O9 d* i
$ s; C+ I6 [; p
syncUpdateOrder ();# \) C9 b7 i* \* r
) O6 Y; N" F# u4 @' J+ ^% B try {9 k9 @, h7 `. ?3 [; k4 s
modelActions.createActionTo$message ' t( r" a& h: b$ y
(heat, new Selector (heat.getClass (), "updateLattice", false));4 R& g6 N1 M o
} catch (Exception e) {
$ S8 H5 m0 u* H2 x System.err.println("Exception updateLattice: " + e.getMessage ());
6 h/ t/ a% H8 D, Z }
& h9 n; y! Q- J2 z0 O
- u( g# S/ }; r- m; | // Then we create a schedule that executes the
Q/ J% V$ s! h4 U5 m+ @+ d6 D# ` // modelActions. modelActions is an ActionGroup, by itself it; n$ a) D5 q& a6 N
// has no notion of time. In order to have it executed in/ a) F O9 j: _ f- D
// time, we create a Schedule that says to use the
2 g, y" t' m' M$ Q2 r( V+ y# O // modelActions ActionGroup at particular times. This+ S5 [$ C5 B) r( Y0 ]
// schedule has a repeat interval of 1, it will loop every
3 q; h* J& u9 V$ | // time step. The action is executed at time 0 relative to: _$ ^8 K' T, ?+ [: i
// the beginning of the loop.
1 P% r9 t# |1 T+ A2 }" J. n( i8 g9 f% q+ E3 |. L
// This is a simple schedule, with only one action that is
' s7 b: k- y+ C5 k // just repeated every time. See jmousetrap for more
* l: O2 K- y, T; ]% [& C // complicated schedules." U7 p9 d8 s3 x, Y0 A* `- y
/ W9 G* R; k: Z2 c1 b modelSchedule = new ScheduleImpl (getZone (), 1);$ z I1 C8 B u* r/ U7 q
modelSchedule.at$createAction (0, modelActions);( v( s9 V6 T1 Z5 h! E' x5 M) [6 u
1 n+ \& |# y0 V, @8 h* ]( z return this;
( x- s! G: Z, W. w* q- c } |