HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ V' Q o$ _1 T) @2 j8 h" O1 T% N5 r7 ~" v$ h4 i# R# b
public Object buildActions () {
/ S9 x1 B0 i9 F super.buildActions();
4 ~% I2 S" n3 Q/ _
N9 n" @' b% | // Create the list of simulation actions. We put these in: V8 b: u$ W9 w3 F
// an action group, because we want these actions to be2 Z2 K# p7 L; T' y* X
// executed in a specific order, but these steps should
1 _) G3 M: M; P // take no (simulated) time. The M(foo) means "The message
2 m; P! ?, ?) T" I- E$ c* J // called <foo>". You can send a message To a particular
2 C, Z8 X1 g: {+ P+ J7 t/ o1 l // object, or ForEach object in a collection.
7 {8 d3 W* |5 R4 {, d6 x 3 m' {4 e. G4 M p, N) ?
// Note we update the heatspace in two phases: first run
- l6 O: q5 G. V8 r" W // diffusion, then run "updateWorld" to actually enact the) ?, w G3 C# ~- S6 n& G+ l: \
// changes the heatbugs have made. The ordering here is( ^6 W. F% O1 Z4 K5 g: w
// significant!" s! Q- a& F( L
7 X) H, Y0 G U) P! ? // Note also, that with the additional* i/ ]- {$ i4 _: p
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 }8 j# _8 e* X' @; Y
// randomize the order in which the bugs actually run
) U. E' T2 y' m% E8 Y0 o // their step rule. This has the effect of removing any0 q f" B- b# _: ]; u( _7 q& W
// systematic bias in the iteration throught the heatbug
% K# Z3 v- H) [/ z5 P // list from timestep to timestep& [. O3 x: t4 X$ p
. e7 h$ M5 d( b- r // By default, all `createActionForEach' modelActions have
( q: ~. Z0 J3 c3 ] // a default order of `Sequential', which means that the
* {9 e/ I7 E& A // order of iteration through the `heatbugList' will be# z" Z) O* `' x" e& u3 y
// identical (assuming the list order is not changed" a/ Z- m G: g/ K
// indirectly by some other process).
6 F; V1 t" u) b7 h$ E7 ~
. h1 h' A8 d& [, o6 n9 o3 @ modelActions = new ActionGroupImpl (getZone ());) A8 \9 V3 E8 V% J5 w0 x1 I7 _
; x8 A- X- _6 I+ h: s, s. a try {
! m7 ~3 y& R5 n( ~: u1 u& Q modelActions.createActionTo$message
! B# S3 j) w/ T, \3 B; o (heat, new Selector (heat.getClass (), "stepRule", false));
6 g+ L2 `( a7 ?7 Z } catch (Exception e) {
`$ ]7 o( N4 i6 O8 Z! ` System.err.println ("Exception stepRule: " + e.getMessage ());
0 W! ~0 Z( R* v1 p5 A" V* x }0 t5 V! m p) a! w3 @5 Q' Z
8 Q9 I0 q4 G# i: D( r& H
try {6 p% s' m7 N2 C( P2 u; Z
Heatbug proto = (Heatbug) heatbugList.get (0);( [ ~8 Q; r. J4 ~2 Q# x- M- z
Selector sel = / n% ^2 L0 @3 _# K6 n: I- s
new Selector (proto.getClass (), "heatbugStep", false);: L8 N. }5 L$ H; P
actionForEach =! t& p! X8 h' N( h( p
modelActions.createFActionForEachHomogeneous$call
5 b* |, Q9 ?1 c (heatbugList,( }& F3 d' M* {& _( l; n
new FCallImpl (this, proto, sel,2 w. v* ^9 |' M* @3 d
new FArgumentsImpl (this, sel)));0 u( L/ m2 ~. q; p: W
} catch (Exception e) {
2 }6 ]: F% i0 Q e.printStackTrace (System.err);/ L$ N& Q0 v& I
}6 m- Q7 \* h3 {
l" q$ e+ {3 n1 C
syncUpdateOrder ();
) \/ l; s' D+ i7 J3 l6 _
$ t V5 Z" q, Q: e0 z i4 ^1 T3 _% M try {* Z! O4 V0 z7 ], _, n" _! l& Y7 ?
modelActions.createActionTo$message
3 V! K5 ^. S, W! g+ u; i& \+ O$ C (heat, new Selector (heat.getClass (), "updateLattice", false));
( r$ [1 G" R+ _2 l; x' x) Q0 k } catch (Exception e) {' E/ X, T3 a- Y. }, J
System.err.println("Exception updateLattice: " + e.getMessage ());- S" e5 g+ b% k- w: h
}5 }; ?* n8 h$ B: S' k- Y
; c8 I7 e& C4 T3 k
// Then we create a schedule that executes the* B" h" {( k* n& T; R4 |/ C
// modelActions. modelActions is an ActionGroup, by itself it
* ?( W6 H' G2 g' b Z6 j // has no notion of time. In order to have it executed in
s; s: N) Q7 B# q, m // time, we create a Schedule that says to use the, W* C4 x3 K# d" Q* y0 E0 |4 V
// modelActions ActionGroup at particular times. This/ \: G: ]! ?: v0 @& b
// schedule has a repeat interval of 1, it will loop every
& |( V" L9 d* `$ C$ X; H, a // time step. The action is executed at time 0 relative to; d" M8 m, Y% ~" p
// the beginning of the loop.
0 H0 k; ?' l' Y/ C
}: J/ f9 ?0 ]! w8 z // This is a simple schedule, with only one action that is- B$ b' K. q+ R; M
// just repeated every time. See jmousetrap for more S1 @( Z0 U. n6 D7 [
// complicated schedules.) a* @- J) J Y3 Y6 r
" b# g A9 Y! h, x6 R4 s3 q! e
modelSchedule = new ScheduleImpl (getZone (), 1);
2 M; q1 D0 z6 h modelSchedule.at$createAction (0, modelActions);
1 T+ r. {# R+ K3 M: W( w * q1 r& v D" c& @: M
return this;
4 Q- y" H' O' O* B% @& M, g4 z } |