HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) |: A" l8 h i- f- p* ~7 y4 P1 @! M0 r+ U" p6 Q
public Object buildActions () {
+ l! e) S( k' h/ _$ N; b1 O) g super.buildActions();1 I: F0 J9 F r6 B4 k/ W# W
: W! s+ Z9 f3 ]9 K0 A7 G- s+ h* [
// Create the list of simulation actions. We put these in
" O1 L/ b U- V$ J2 C // an action group, because we want these actions to be& k' C( E# C, G& @5 T
// executed in a specific order, but these steps should
$ |' e! K+ o7 ?/ ^ // take no (simulated) time. The M(foo) means "The message
+ C. H4 x* \ b& W$ ~+ A2 N1 t // called <foo>". You can send a message To a particular
) ~; x1 b+ H0 N5 c // object, or ForEach object in a collection.
, U+ j# q1 R$ P0 W5 C3 n5 g+ r " ^7 T, x! H+ i5 f! P
// Note we update the heatspace in two phases: first run7 Y! b( k* A) v
// diffusion, then run "updateWorld" to actually enact the
, s6 v% D, t; q5 c3 B+ _7 W // changes the heatbugs have made. The ordering here is, f" V# R9 Z& O% y1 G+ J; N0 ~
// significant!
. [' x6 m9 m5 A
+ D. P3 c+ y: k7 o( |, _ // Note also, that with the additional# u( E+ x( m9 r
// `randomizeHeatbugUpdateOrder' Boolean flag we can( s- R1 S) ?/ q' O+ H# e. H+ J# a
// randomize the order in which the bugs actually run
2 @* G7 s b/ S; ?' c- S // their step rule. This has the effect of removing any% j) ?3 L/ J% d2 ^! H
// systematic bias in the iteration throught the heatbug
3 e6 e9 y T8 v9 J g1 _, L5 Y* N9 h // list from timestep to timestep
$ x7 O7 U5 t5 V 6 ^7 E* H; Q- ~/ _+ Z( k
// By default, all `createActionForEach' modelActions have0 z) [% F- O/ q: F: Z5 h- K
// a default order of `Sequential', which means that the
, G2 l$ C2 q' o8 C$ Z // order of iteration through the `heatbugList' will be
$ q, Z: @. M7 ?# q // identical (assuming the list order is not changed# I6 O/ r2 e' Q/ y% K
// indirectly by some other process).
( N- M9 ?0 h( f& U3 D ( ?* z: _# @1 c9 ^/ d3 J( B
modelActions = new ActionGroupImpl (getZone ());" @/ b* P6 x1 M6 B1 j* q; _
o- e( Z1 A. v! ~3 y% s% B
try {0 I6 h( V9 G: c/ t4 |) X" ?
modelActions.createActionTo$message
5 ^. {/ y! x4 I r- V4 a: c1 N (heat, new Selector (heat.getClass (), "stepRule", false));
( r' t, U" m! N g3 ^1 B } catch (Exception e) {9 T( I- ~" H8 B A! X& S$ g
System.err.println ("Exception stepRule: " + e.getMessage ());4 ^% M# s. `( g! K% p9 W' L9 M
}
2 H# a5 | j( Y! g! K, r- d0 X" q/ \9 A1 A( ^: y# f' [) F
try {
6 b" V# B$ ~# h/ {7 z: S Heatbug proto = (Heatbug) heatbugList.get (0);
& G7 P% o0 m1 [. x Selector sel = + I% N% e9 R* F
new Selector (proto.getClass (), "heatbugStep", false);
6 {" b4 X. B6 c( m actionForEach =8 E; J3 \6 Z" X, f) S1 `9 I5 b
modelActions.createFActionForEachHomogeneous$call
3 `+ o# f% t8 _) ]3 ] (heatbugList,
[. R6 O$ m; N; Y$ X6 w new FCallImpl (this, proto, sel,
. o% U1 R; k! y new FArgumentsImpl (this, sel)));' S# f, a! k* A( [
} catch (Exception e) {+ w) I$ }8 Z9 W+ ?6 \
e.printStackTrace (System.err);
! `, J1 b, x8 N; o% v }
: r6 S/ h5 v0 K" X# G ) w; t, i8 [, \$ U* p8 |
syncUpdateOrder ();( i# W8 i9 l. m: l( W6 N
4 w$ g! y. {! I4 ~: ~( E2 J* {# R try {
. f2 I: F9 y/ I; N' o" B modelActions.createActionTo$message : ?' A5 ]% U) s5 q
(heat, new Selector (heat.getClass (), "updateLattice", false));% x1 u5 Z; G. Z) l6 v' U7 Z6 \1 H
} catch (Exception e) {
5 e; T( r' ?$ X+ E" x& @ System.err.println("Exception updateLattice: " + e.getMessage ());& x2 }8 U! x- }" `
}) @. r# {, B. x! r) V+ H& _
* {0 s3 d- {! B7 J$ Y: F8 | // Then we create a schedule that executes the
' T' X4 A7 z0 |+ x3 s6 X" p; d // modelActions. modelActions is an ActionGroup, by itself it1 {2 z# i, T' v/ K
// has no notion of time. In order to have it executed in
1 ~" D: d" b& W* n8 B // time, we create a Schedule that says to use the# D, ~: @, F. y7 @) A) ~/ {" G
// modelActions ActionGroup at particular times. This
' ?# ?" _4 T1 d7 B' t // schedule has a repeat interval of 1, it will loop every# m! K, c [/ A, z; O
// time step. The action is executed at time 0 relative to* ~4 X( H1 i4 |( `
// the beginning of the loop. g- t- O8 }4 I0 A) g$ Z9 g6 }5 |
1 t! i4 h" U% ~6 b* q5 U // This is a simple schedule, with only one action that is
7 a% V. m9 q7 X" J- r // just repeated every time. See jmousetrap for more
7 |% A+ S5 U7 y9 `- B9 r! h+ L // complicated schedules.; E I* b0 `! v9 s. x# B! U
: i' E9 O1 ^( H$ m3 m
modelSchedule = new ScheduleImpl (getZone (), 1);) U' b% H/ l3 E1 K1 v& ~5 ~
modelSchedule.at$createAction (0, modelActions);
% d2 M( r1 @ ~$ P U0 m8 I. J! M: O$ G' w
return this;( Z: I$ R* l$ j& P' B
} |