HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: F1 z( p# ?: l' a6 H" ]
- u# c$ j4 p/ N- a& `, H public Object buildActions () {- s# s5 X' ^; q
super.buildActions();
0 K% x6 g& |% `1 y" ~: m ' D3 W3 R5 n& O* \0 t+ k6 O4 E8 g
// Create the list of simulation actions. We put these in2 o2 ~6 t( Y' Z& v
// an action group, because we want these actions to be
5 i$ q' Q" p0 K1 m // executed in a specific order, but these steps should/ C0 G4 @! n& w/ S" ?
// take no (simulated) time. The M(foo) means "The message
; ]7 _) P8 @; S- d! t // called <foo>". You can send a message To a particular- b/ y" V& `& g# T, o' N0 j5 @7 x
// object, or ForEach object in a collection./ \& V* n0 c! v! R1 f/ ]+ W
2 G5 o$ ]0 c6 \$ a. O
// Note we update the heatspace in two phases: first run
0 i! V' s) y) J; ~# t; O // diffusion, then run "updateWorld" to actually enact the
+ S; f9 K3 r6 C2 t5 l // changes the heatbugs have made. The ordering here is; I3 s# L) d: ]( F& T7 V6 \2 \0 R
// significant!
# g- |7 q# m0 D. |1 L
2 { }/ `) a8 T) h& y // Note also, that with the additional% t5 x) V I; e4 l
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 B; D" T( m/ I+ W
// randomize the order in which the bugs actually run" u' r9 t8 i7 J- z/ D
// their step rule. This has the effect of removing any
8 \5 ^3 U. [! h C. x( _+ I // systematic bias in the iteration throught the heatbug( Z: R; Z2 [" m9 |6 \ }
// list from timestep to timestep4 \, U; y0 H5 u. I
! o4 J5 T1 O+ `; P* f, Q( I# y
// By default, all `createActionForEach' modelActions have: ]8 R4 }; [0 I w1 y; v
// a default order of `Sequential', which means that the8 P% k0 s& k, S$ B
// order of iteration through the `heatbugList' will be$ ^! W# ?8 \1 k ?
// identical (assuming the list order is not changed
% s$ S) F) r8 ^4 F) T // indirectly by some other process).
) R& b4 J8 z: p $ ]8 h1 h) M, O+ ?
modelActions = new ActionGroupImpl (getZone ());2 p7 Z- E* b9 p$ _7 |
) m" ~7 s0 V% q( O9 W
try {
; U& h& I2 R) w$ D: i$ S: \$ F modelActions.createActionTo$message
/ Z7 S7 g% U' t; w% o' i% X (heat, new Selector (heat.getClass (), "stepRule", false));- r4 Z0 c; f- _/ A1 {
} catch (Exception e) {4 Q9 l- k$ |9 |( P2 H$ \( k1 g
System.err.println ("Exception stepRule: " + e.getMessage ());8 A. o! Z; g# v6 Y
}
7 o n, R2 Y! Z! G* J( E& Z
U8 D( J% A8 n, I" B) Y try {. c( n' k& K+ `" K$ y* y
Heatbug proto = (Heatbug) heatbugList.get (0);1 @6 C: W" [* `, l, N% c
Selector sel =
g6 q* V# y3 n3 l: d" D. ? new Selector (proto.getClass (), "heatbugStep", false);
7 n. f' l2 ~- H actionForEach =
7 `: a4 F3 _4 }6 S" }1 g- S1 c modelActions.createFActionForEachHomogeneous$call
, ?9 \7 o5 i7 O/ s- z6 E (heatbugList,8 k/ T4 e/ H+ s3 W
new FCallImpl (this, proto, sel,
2 e: Q; i( R. F. [- R( T new FArgumentsImpl (this, sel))); K: T. m0 X( Z
} catch (Exception e) {" _/ D' ~7 V P S) K
e.printStackTrace (System.err);
* b0 W7 B1 w) p7 ] }! Z4 o( R2 {- z8 Q) v& _% x
5 L6 ^0 M3 B3 I0 b syncUpdateOrder ();
2 l7 m' x8 {. H3 ]" S( m3 S [, f2 u$ F. y2 @
try {
# J3 E2 ^2 H/ T+ A, E modelActions.createActionTo$message
3 o9 O# S* ?7 \/ {" m, G (heat, new Selector (heat.getClass (), "updateLattice", false));
& f' M6 F( N6 p } catch (Exception e) {
7 `9 Y! L7 O+ G; `0 p System.err.println("Exception updateLattice: " + e.getMessage ());
M l4 y: O/ L+ h }
: a: A% e' e) F% t
1 l" g! A2 [8 N( ?- B8 U // Then we create a schedule that executes the
) ]9 T$ _1 n& q8 p5 {8 p4 h // modelActions. modelActions is an ActionGroup, by itself it
1 j: K; c8 Q) |- A+ M // has no notion of time. In order to have it executed in
3 R+ q% e- W4 N, K8 J; j // time, we create a Schedule that says to use the6 H& {' b" w& B/ L( _6 k
// modelActions ActionGroup at particular times. This
1 k- P' m- w* U; C& P4 G" W1 c4 S // schedule has a repeat interval of 1, it will loop every5 C( x' G. I: h4 Y3 D! l+ r
// time step. The action is executed at time 0 relative to
1 a* K+ T0 ~1 r* R" i! ~* v# ` // the beginning of the loop.1 S6 t! t' L, w' I& x0 k
/ Y8 U) `! X" n, C+ g: S I // This is a simple schedule, with only one action that is5 d3 r- B. p5 B3 o
// just repeated every time. See jmousetrap for more
5 X. _3 E# q1 d& [" f& e // complicated schedules.
7 G9 l" y/ b( h$ O4 D' ?6 Z . \9 `+ @& R! p
modelSchedule = new ScheduleImpl (getZone (), 1);+ L1 p: w. Q5 s8 t: z
modelSchedule.at$createAction (0, modelActions);% e g. ]# l% l! L
4 p) n- N9 P# t+ H o: _ return this;
) E8 m. J/ M5 P, u( W } |