HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' b% O" @& T, ^$ a/ {
8 [: M( ^* _& ? public Object buildActions () {
4 i% G0 _ N4 T1 c# x super.buildActions();2 C h" ]% [% w' G4 q. L8 ?1 X+ e
7 z0 f% [7 ^0 h" Q# M
// Create the list of simulation actions. We put these in
( L; Y# K% i* M0 p+ B6 h // an action group, because we want these actions to be
: @" P# h& e( B' D: y5 G( S! e // executed in a specific order, but these steps should8 b; M3 @0 }3 H' ?1 ^0 K @
// take no (simulated) time. The M(foo) means "The message
P8 W0 r" k( x: v // called <foo>". You can send a message To a particular+ _& E4 i* w6 p
// object, or ForEach object in a collection.- J& A O1 R: ]# O
) X/ ^9 G3 K9 j5 s" M2 m
// Note we update the heatspace in two phases: first run, j) t* h; Z" I7 a# u1 Y" ?; P
// diffusion, then run "updateWorld" to actually enact the9 H3 m& K; I2 @& w3 Z+ }- p4 c; L
// changes the heatbugs have made. The ordering here is
! x+ P3 G: O0 D8 j // significant!2 N% p- t9 T" n/ g3 M6 Z( V5 t
, k+ _4 p7 X* A // Note also, that with the additional
! M( p3 @. ^! f* n Z j- ]8 F1 t // `randomizeHeatbugUpdateOrder' Boolean flag we can
F B3 E: Y8 D: z& K2 q; N% J // randomize the order in which the bugs actually run
2 y( P0 ?- M4 T. Z // their step rule. This has the effect of removing any
3 `8 P8 B1 z5 U/ W& i- B7 ? // systematic bias in the iteration throught the heatbug0 D0 I' [" i8 Z8 E* v
// list from timestep to timestep
) g/ K$ I" I* d9 R7 {
$ g+ `7 w! W5 ?" }2 K3 A // By default, all `createActionForEach' modelActions have5 Y f) n2 y+ p0 P9 s( {8 C, g+ T
// a default order of `Sequential', which means that the
9 Y5 J: I6 P& J1 ~$ _ // order of iteration through the `heatbugList' will be
1 T6 y3 S* c! n) ]' i" ^ // identical (assuming the list order is not changed
; a1 W$ J `- d. m // indirectly by some other process).! ]. n6 m _+ C. W+ s, J
: z- e; M! } u; J+ `( v* T' H+ L7 [
modelActions = new ActionGroupImpl (getZone ());
+ \: e! N( O ]4 _% Z# E6 [
& Z2 a- F: G, v3 C- ~ try {
o: w/ R0 s& `' j$ P+ Z modelActions.createActionTo$message
. r0 R5 n ^6 f$ u8 N6 m* x (heat, new Selector (heat.getClass (), "stepRule", false));4 @( S) U% L- Q. ^& y/ u
} catch (Exception e) {
- Q8 b, |, Q6 y% C9 J* u. S System.err.println ("Exception stepRule: " + e.getMessage ());2 H2 z, e9 l: M
}+ G) p1 d, F1 {* o( I2 o4 \
& }& l: r b* M/ G7 K4 D( N( \0 h" [
try {$ B) S U; v: \: P. ^; [( d
Heatbug proto = (Heatbug) heatbugList.get (0);7 w! _$ I1 e* M6 h8 L
Selector sel = 3 P+ Z' J M2 r; h* x j v
new Selector (proto.getClass (), "heatbugStep", false);2 U. Q' i) s7 G; n d j
actionForEach =
3 f( `( R, c+ Z* q+ e5 B. m/ p modelActions.createFActionForEachHomogeneous$call
. l) o5 E8 `/ ~9 r* N* U* Q (heatbugList,6 v. q# d4 W. Y0 l) m, e4 f, u
new FCallImpl (this, proto, sel,9 S; R& T' I0 f% p
new FArgumentsImpl (this, sel)));
) |! R. m! V6 T! {$ f } catch (Exception e) {- ]3 ^* S E {; V
e.printStackTrace (System.err);
' B+ k$ Q1 n2 q8 l* l }0 I, t2 [9 R; g% P( }8 a9 E
) R# h3 o2 `: ^: u0 d( D1 R: ] syncUpdateOrder ();
* c. t2 a* q( c7 a: B; a
0 m$ A% [5 Q# @0 n7 Y! H; ~4 P" c try {. w0 Q I# i; }! h7 z' D2 f- j4 p
modelActions.createActionTo$message ) S6 Y" T3 W8 ^9 u! K$ O6 Q0 f
(heat, new Selector (heat.getClass (), "updateLattice", false));
! D5 ]/ i8 [ `% L7 e9 Y } catch (Exception e) {
/ ?0 b! |2 Y# J* R8 Z5 a System.err.println("Exception updateLattice: " + e.getMessage ());" A5 E( x( _5 d8 B' P
}1 G& d+ o* `' o& j. U* K/ }
5 P2 N/ p4 j4 [: V0 P* x( }
// Then we create a schedule that executes the
! Q% b2 f _/ {( I8 ^ // modelActions. modelActions is an ActionGroup, by itself it, `; H/ E& d F7 p0 F ^' m( Q
// has no notion of time. In order to have it executed in
! }2 z( X* [, F, W // time, we create a Schedule that says to use the
. @. r% u4 f z" [7 ^ // modelActions ActionGroup at particular times. This
) C( F3 D b$ }9 y7 [1 T# @ y // schedule has a repeat interval of 1, it will loop every+ Z/ u' V9 n9 _5 V
// time step. The action is executed at time 0 relative to! s1 Q( v) `9 p7 r t2 B
// the beginning of the loop.
4 v! W' H9 d. `1 T, l: P! e1 S- L) @
// This is a simple schedule, with only one action that is
4 y* o- {2 }5 D1 S7 x6 a // just repeated every time. See jmousetrap for more0 E. y+ y Z9 k
// complicated schedules.. R& V% q* U ?' j
$ s# k- L! U) y a4 o modelSchedule = new ScheduleImpl (getZone (), 1);
* G, P: ]4 t C% [( d* d0 Q5 s modelSchedule.at$createAction (0, modelActions);$ I, A- e- ]) \% w; V) T
! Z/ @7 P3 e# ]! M
return this; U2 c1 U d( f$ d
} |