HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. ?) a z) v/ ~, \
& t- y4 w) x* b0 k" n) U public Object buildActions () {
+ v/ P m( O R4 n9 C super.buildActions();
$ Q$ T5 `# c* j0 Q7 s! _ ; V( d2 k8 @9 M
// Create the list of simulation actions. We put these in
U" e. H8 @' ]8 b I // an action group, because we want these actions to be
# w! `* k6 p8 N8 S5 {* Z // executed in a specific order, but these steps should
. G7 D( l* t8 W% H // take no (simulated) time. The M(foo) means "The message
& Q& Z$ o& l% v3 |5 B8 d& V // called <foo>". You can send a message To a particular
5 X }$ a$ x: v) D, m) Q! b! H1 d. U // object, or ForEach object in a collection.0 D3 C# j; y- M0 h+ B' U% h
( n5 n3 R1 ^5 A6 G& E7 N; a // Note we update the heatspace in two phases: first run
7 a3 X& `% h) S0 x2 d% s1 | // diffusion, then run "updateWorld" to actually enact the! l, Q5 Z* q5 _8 i& ?
// changes the heatbugs have made. The ordering here is
, ^+ z( r) ~9 e, J' P, r // significant!; n0 I) Z; |8 ?& z+ E
4 P5 }2 u, X7 [2 H3 N% N$ F7 H$ ^. E( O) W
// Note also, that with the additional F3 F! z) |# N3 w$ N
// `randomizeHeatbugUpdateOrder' Boolean flag we can) S! ^: C5 Z6 d! {5 }( h$ ]
// randomize the order in which the bugs actually run
8 K% t" U4 n8 U) m // their step rule. This has the effect of removing any2 `" B* }/ J6 I8 |- ~7 V S" w
// systematic bias in the iteration throught the heatbug4 P! z$ I. j1 r3 X0 L6 W
// list from timestep to timestep
! U1 W3 n8 {8 K* j* g; m$ A $ @1 o9 l7 I5 W' P& {" }
// By default, all `createActionForEach' modelActions have
! d% K+ w& w% f' H. S) j // a default order of `Sequential', which means that the
0 { O3 {( i4 a$ A' @/ s // order of iteration through the `heatbugList' will be
2 o* D; `, Z0 G m // identical (assuming the list order is not changed. a/ y1 [: B* |; `6 @2 l
// indirectly by some other process).
- Y2 Q& l' J) i' {1 S
5 [$ ?) e) B- R, e modelActions = new ActionGroupImpl (getZone ());7 s+ l9 W2 W0 c/ c- z
/ a6 @, ~3 o; ~7 w- H* v
try {
5 g* |/ h) {; Y' B4 c3 h) `: ~ modelActions.createActionTo$message1 W/ \3 ?8 t/ q
(heat, new Selector (heat.getClass (), "stepRule", false));
! m: T- @- L, X } catch (Exception e) {
/ Z9 H) [2 h, o# N- O2 G0 W System.err.println ("Exception stepRule: " + e.getMessage ());
; e: d9 q( j" S% Z* Z }0 b4 e$ s4 N8 B, S0 b/ d1 ~
: A( Y/ f; F+ r }7 y. \$ ]+ S try {" R& G9 d" v& f+ v/ A ~
Heatbug proto = (Heatbug) heatbugList.get (0);
% B. n R" N3 h7 s. `" s Selector sel = / j! `( A% ~5 W2 K% u7 T5 A0 z# q
new Selector (proto.getClass (), "heatbugStep", false);6 p1 O! J4 h1 C# {5 e, U
actionForEach =
5 {' O; x! w8 n# z" T modelActions.createFActionForEachHomogeneous$call# q, D! h: H( ]
(heatbugList,+ `+ v/ K0 D- S" W5 w) O/ _
new FCallImpl (this, proto, sel,
0 l. K# f0 t3 \( [4 W new FArgumentsImpl (this, sel)));- V) W; o7 t* N! f
} catch (Exception e) {- Y% y+ i, P% {) T' i( D6 R
e.printStackTrace (System.err);# m* R3 `: X9 [" L
}
( v! `5 u/ u7 B' u
! B5 P1 F Q6 ]" l syncUpdateOrder ();
, n7 M+ w( p6 q* r& T- c6 C
: L% i6 x" R/ Q D try {3 u4 k7 x* I' x- K% J* }
modelActions.createActionTo$message 9 g6 @) m0 ]: F
(heat, new Selector (heat.getClass (), "updateLattice", false));) U8 k3 v2 A2 T8 W
} catch (Exception e) {! l# \ q; E% d' f2 W. G
System.err.println("Exception updateLattice: " + e.getMessage ());# P1 Q2 I# X) g8 X9 q( d
}
) x- x, ?4 p8 u0 G7 h! @ , i4 }, Q) N# f( y! A9 H
// Then we create a schedule that executes the. j K) K, c# X# [" J+ Q. `: ]
// modelActions. modelActions is an ActionGroup, by itself it' K% w1 I z7 Z3 I2 D4 V6 }& u
// has no notion of time. In order to have it executed in' s" g3 A) J4 J. c$ F
// time, we create a Schedule that says to use the
( @& E& ^* G4 S( z# M // modelActions ActionGroup at particular times. This
5 }( [/ y+ W/ M // schedule has a repeat interval of 1, it will loop every3 ~2 u+ u4 L; ~
// time step. The action is executed at time 0 relative to8 p# K5 O; o6 d3 @8 }$ ~ X
// the beginning of the loop.
! L+ _) q4 @& Q+ b; n2 \/ |8 h4 r/ }# ^
// This is a simple schedule, with only one action that is! D0 m/ Y+ x1 i0 S0 e6 h1 A
// just repeated every time. See jmousetrap for more
2 z. Y$ R6 _! `9 p! m // complicated schedules.* `9 ^3 T8 X/ F* l, p
- P; c8 ]: X; A. B
modelSchedule = new ScheduleImpl (getZone (), 1);. K" L$ Z9 \0 F. w
modelSchedule.at$createAction (0, modelActions);0 [( M: {1 L: j
% I, g9 |0 V, p8 P1 C: i" Y: p
return this;
' o" \6 e0 y/ ^% H+ g } |