HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. ~; z7 y/ @, J. E
9 z# a; Y! @2 n4 r public Object buildActions () {
! d/ h i, o7 C! l* c super.buildActions();3 u. C0 J4 ]0 i* ?) w: b# ^
+ F* o ?3 v, L {7 g
// Create the list of simulation actions. We put these in1 g$ q6 O( @4 l. d% ~) q# X! l
// an action group, because we want these actions to be
0 ]( t. W/ y/ z0 H; L // executed in a specific order, but these steps should; l& m) l- L* ]% Y) G9 A+ ~( m
// take no (simulated) time. The M(foo) means "The message9 S' W& H3 N2 f6 A; p0 {3 j
// called <foo>". You can send a message To a particular
. N" O6 \1 K: Q/ m+ `5 P5 b // object, or ForEach object in a collection." }9 u; J$ X& ~7 O6 F, f
3 a" |3 X z l8 J0 L // Note we update the heatspace in two phases: first run' t6 k- C! |; m) I1 P' D
// diffusion, then run "updateWorld" to actually enact the4 y6 W; F3 m% q# K9 f6 j1 i
// changes the heatbugs have made. The ordering here is
/ f0 O4 |9 `+ \, ` // significant!
; @2 S0 J1 K( N) m: i P# R . M2 c& J H' w* k9 X2 i) R% ~
// Note also, that with the additional, I `4 C/ J7 x4 T- N+ p
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. w/ f$ |, m, l+ }7 o! _$ C // randomize the order in which the bugs actually run
$ s* K% f) y5 F( f( M! @ // their step rule. This has the effect of removing any4 X6 V& i: ]# k' x* I N
// systematic bias in the iteration throught the heatbug2 o8 Q$ x8 b4 @( S
// list from timestep to timestep+ e/ z- C3 I; T6 i
9 R. ^8 Z9 S0 Q/ @" r6 C/ l: n
// By default, all `createActionForEach' modelActions have) j, i( X! D. H& C3 f. J4 @5 q
// a default order of `Sequential', which means that the( b, G4 i$ R& q C5 M: P" _
// order of iteration through the `heatbugList' will be
6 d8 d# T- M* A8 G: A; @ // identical (assuming the list order is not changed8 ?5 v X/ P7 E) m" ?1 x- O0 r
// indirectly by some other process).
9 a- E7 v' u) }) b$ m# L7 v: i
3 \' k- j' f2 r modelActions = new ActionGroupImpl (getZone ());
' t1 S$ T6 F, k- P$ V, z6 K3 @* V# Z! i- n9 f
try {
( M7 V7 S+ |0 A5 m+ o/ F4 ?. H n modelActions.createActionTo$message
) u6 S1 ~4 F5 J( O* |) o- f (heat, new Selector (heat.getClass (), "stepRule", false));& G/ L6 b1 Z R2 f. l* l
} catch (Exception e) {& Z5 ~. t" m6 ]8 }8 |+ {& u' I' b
System.err.println ("Exception stepRule: " + e.getMessage ());% Y* v6 B. k7 ]! H6 g9 \
}
, S, r" A' \" J5 v7 Y
% h: _: t6 H* b2 s9 | try {
: \. p4 M3 C2 i9 T2 A0 V- U5 N' y Heatbug proto = (Heatbug) heatbugList.get (0);
1 o' `! h1 \& i# v( h4 T5 W( f Selector sel =
5 o3 ?6 D" R3 L1 B1 e- \ new Selector (proto.getClass (), "heatbugStep", false);
- |6 f& Y, `0 p/ T( k actionForEach =2 Y- Q9 m, g& \9 k& R% K: S
modelActions.createFActionForEachHomogeneous$call
7 N- u& ]% U: T; F/ [$ x (heatbugList,- F* N6 B+ V! g, N- v( m* B. u
new FCallImpl (this, proto, sel,
0 O5 V: Z. S5 D$ s new FArgumentsImpl (this, sel)));
5 Q3 E, d) E) \ P# \ S8 Y7 R4 m9 i } catch (Exception e) {
, t N% c+ m+ \% |' F: s e.printStackTrace (System.err);
0 F) T! S7 H5 O' H$ t }- g4 u+ ~3 b* r' `2 P9 ~3 T
3 U i: u* g! c1 D syncUpdateOrder ();
8 y1 k& C: P( x: v
& D* M3 n* `) W; b% H5 q: P+ s try {
6 g) F. m. E" m; w/ {% Z modelActions.createActionTo$message
4 V/ O/ [/ E2 ^- h4 W& \6 t (heat, new Selector (heat.getClass (), "updateLattice", false));. j5 s, x: i; T$ ^& V
} catch (Exception e) {
! s: o" c0 B2 g9 Y+ b& }9 x% ~ System.err.println("Exception updateLattice: " + e.getMessage ());9 x" Y: k: V- a' e, e
}
# G5 z5 {& i6 L- C8 T( r& |' W2 D1 I ( y; P/ }3 a7 O( S4 l g
// Then we create a schedule that executes the
; u$ [: K7 V9 q" x2 w8 O; H! X // modelActions. modelActions is an ActionGroup, by itself it, n3 C) f( C2 H p
// has no notion of time. In order to have it executed in- M* m9 n w- ], m7 x
// time, we create a Schedule that says to use the5 ^! s" ^* ~4 b8 ^1 a
// modelActions ActionGroup at particular times. This+ h& Q+ V' Z7 |( x ?
// schedule has a repeat interval of 1, it will loop every2 K$ a/ \; A; A+ \
// time step. The action is executed at time 0 relative to
- F" W' k- D6 I" y, M$ x. }. S // the beginning of the loop.
, T6 \2 g, i( c: c4 n& g' m/ X% w8 U
// This is a simple schedule, with only one action that is
: h2 g6 J- b% X# C% r- k // just repeated every time. See jmousetrap for more
' ~: u0 V5 d( H* U) I& A$ F // complicated schedules.1 r5 d k! V9 B4 E; A% U0 \/ K* a0 Y
$ j; D) N1 Q9 P4 A
modelSchedule = new ScheduleImpl (getZone (), 1);
: Z7 M5 E3 z5 E N modelSchedule.at$createAction (0, modelActions);+ F6 i5 D6 T, W. d
! ]' b5 v! E0 d, ]
return this;
3 K: z2 K z. k } |