HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: f R6 E9 d- d; O9 ~3 ]" Z' e# i3 Z9 p) A8 k
public Object buildActions () {
) s' W0 H( H7 o) i4 s super.buildActions();
. B% \ D4 ]9 H! L/ {/ H$ }
% Y& S6 B% \2 K4 X // Create the list of simulation actions. We put these in U& v3 c0 M" V B
// an action group, because we want these actions to be
% Y; q# n9 H' L( R // executed in a specific order, but these steps should
1 B! n+ \, K: i4 [ // take no (simulated) time. The M(foo) means "The message0 [, w$ s" R8 u* {) k% w
// called <foo>". You can send a message To a particular X) s. g4 v2 c/ @$ T0 _& h. X
// object, or ForEach object in a collection.- o" e% p. z; x# ] z1 E* M- t! J
8 l3 W# p# I5 h: m
// Note we update the heatspace in two phases: first run: c5 x `) k3 q) }2 l; m$ z
// diffusion, then run "updateWorld" to actually enact the9 G3 @6 B* X8 L. }! g: V
// changes the heatbugs have made. The ordering here is4 M/ L1 T' i4 j
// significant!
2 J+ x+ j4 |" R6 L
6 [" y% e+ ?4 J+ X1 f // Note also, that with the additional
- b+ b0 K& J* U! E+ f% E. \ // `randomizeHeatbugUpdateOrder' Boolean flag we can
) m7 R! r4 ^$ K4 ~: t0 b // randomize the order in which the bugs actually run2 Q3 K5 ^ K' Z2 Z3 z9 i. `' s/ }
// their step rule. This has the effect of removing any
: U9 X6 B( D- u9 E( ?: e4 B* E* l // systematic bias in the iteration throught the heatbug& c, S9 b% g6 `4 Z+ V* z
// list from timestep to timestep
- }6 n; o- w" a. ~- o" ^ 1 i( d- h4 m" V- c _1 W+ F; ^( d
// By default, all `createActionForEach' modelActions have& s7 t$ N- U- N) K2 c
// a default order of `Sequential', which means that the0 Z4 J3 l2 o7 a0 G6 f
// order of iteration through the `heatbugList' will be! ?8 n0 v; _7 w# w5 C* _" P. ?
// identical (assuming the list order is not changed0 K# z- o+ ^7 {( A7 @5 D( u
// indirectly by some other process).) j* i" v2 ?7 `
; f* v- U4 x c4 ?5 U% E
modelActions = new ActionGroupImpl (getZone ());
' n k0 f# O& s' q* B* n% i" s" ^0 l0 |( o( Y& l: U" r' r0 C
try {
: f) p& E3 h5 a) N9 w4 } modelActions.createActionTo$message
) w( P& J9 L! S' j0 I' E* M (heat, new Selector (heat.getClass (), "stepRule", false));' L5 y. o( }$ r( V; U' a& `5 y# w
} catch (Exception e) {. `6 M0 e! U6 h6 a
System.err.println ("Exception stepRule: " + e.getMessage ());
( C7 M' w: ~0 ]% @ }
) l$ X7 B( f. j6 m: h; ?/ R
+ ?+ k( g- I2 m* K2 U) E try {
3 q! r$ k$ }( C5 d Heatbug proto = (Heatbug) heatbugList.get (0);
! [( N4 y1 Y4 w/ y Selector sel =
! `, Y5 |: W. r1 E new Selector (proto.getClass (), "heatbugStep", false);
v7 A" Z6 L0 a! ?0 h$ n6 g# ^: N actionForEach =
4 l% _' d& g- e modelActions.createFActionForEachHomogeneous$call: u. U. ~6 u/ j2 X
(heatbugList,
3 p* v' l$ P+ E( t% ~3 a new FCallImpl (this, proto, sel,: J: P- X% U: a( l- t
new FArgumentsImpl (this, sel)));4 u [) R8 b% D @0 I: `/ u' }) N* `
} catch (Exception e) {
- R3 v! @ `2 w" ]- E! P, v e.printStackTrace (System.err);
0 ]- F! R; _4 Q0 J: s* l1 ? }' ?2 R* W. N! ^) D3 F: k7 W& c
6 F1 p" U9 M9 `( o! ?* H2 l syncUpdateOrder ();
! [( J1 A+ i P( g; f0 S# w' {0 z# U v& c5 ]( ]3 r" h+ d& O* o+ Q
try {! m; u8 V5 z+ g) Q
modelActions.createActionTo$message & D) |0 @! s, s, }& x+ k" A
(heat, new Selector (heat.getClass (), "updateLattice", false));$ k% u& `+ l+ s1 W5 v
} catch (Exception e) {
$ O7 v9 Y5 j2 ?/ d& f6 F System.err.println("Exception updateLattice: " + e.getMessage ());
1 O) P8 O7 K% V& G. U* S }0 Y0 P5 L: J3 `& D6 D+ F& h* _3 i
8 J0 n3 ]0 e2 U' X) o0 |4 P
// Then we create a schedule that executes the
0 e& ~( _) q( t; d7 \% h. ?) ~ // modelActions. modelActions is an ActionGroup, by itself it+ w; M; j3 L8 p, X
// has no notion of time. In order to have it executed in
' p& o# H9 A Y // time, we create a Schedule that says to use the
! w& Q1 K* G4 h // modelActions ActionGroup at particular times. This
: i+ N: A Y3 |! h% P& ] // schedule has a repeat interval of 1, it will loop every
7 ^: {. r+ J% r% E3 O // time step. The action is executed at time 0 relative to) X4 @7 \; c6 s6 a3 o& X5 I
// the beginning of the loop.2 c) K) M) u5 I. o. H( T8 R% B
- O k( I' \* _7 p' f2 S. A // This is a simple schedule, with only one action that is
% ?1 T) U: B( A# p) o // just repeated every time. See jmousetrap for more
4 V* d, J8 Y M // complicated schedules.
$ e3 Z; f. v1 i0 y- r5 A* @; g* Q& I
; ^& F5 `/ ~% ~! A9 A- O modelSchedule = new ScheduleImpl (getZone (), 1);
+ m9 |6 Z8 ?: V$ I+ m, w, D modelSchedule.at$createAction (0, modelActions);! \+ Q6 {, S$ M+ j
/ M5 D) [( s5 k1 p) c+ A7 ]4 E. i4 A
return this;) \. @3 E: Q+ ?' [, x% p9 K
} |