HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: F; I. L- `7 `# \/ ^+ u% v
, M2 I* N* ?8 G6 P public Object buildActions () {; ?- [2 w* \" {# Y8 y! x! g, v/ i9 x
super.buildActions();
3 O7 O2 A9 J6 E& L+ k d W: ] ! a2 |+ ? I5 T9 K+ h1 _2 \# u
// Create the list of simulation actions. We put these in/ w P4 U9 \7 o. Q. h; o; b
// an action group, because we want these actions to be
0 u. V# p2 l2 F' k // executed in a specific order, but these steps should) j; V2 ?/ U% b8 A$ |9 e. @
// take no (simulated) time. The M(foo) means "The message& k7 K7 _' o. g" J! S+ N1 M
// called <foo>". You can send a message To a particular: L, r1 ~% s, s$ y6 i; Y/ n* r
// object, or ForEach object in a collection.
9 M8 z* U; S3 t2 j( ^ / c0 F4 x3 u* @$ s0 m9 S k0 U
// Note we update the heatspace in two phases: first run) D" H9 [- }9 S* t* n3 X$ r
// diffusion, then run "updateWorld" to actually enact the3 ~% h6 K) { @$ A8 i
// changes the heatbugs have made. The ordering here is
! D4 o8 E9 L/ T, ]" u // significant!. q7 B/ ]- q# l: X. R8 a( A
8 B6 s, o9 y# ]8 G: K$ c
// Note also, that with the additional
! J2 y9 v$ ~, F& f3 [ // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 w' D5 m; R+ J' G4 W& V% c // randomize the order in which the bugs actually run1 @* \8 o" ^6 G3 \1 D9 Y
// their step rule. This has the effect of removing any( e& a% b }# ~
// systematic bias in the iteration throught the heatbug
6 j1 {7 a( g% J9 h: E# _ // list from timestep to timestep0 S9 z, L' }, u
8 E8 _* u3 T; B6 \# D% c
// By default, all `createActionForEach' modelActions have4 N1 L3 K' ?+ S( m# Q
// a default order of `Sequential', which means that the
6 W0 s, ?4 t9 {7 U k1 C8 a3 F // order of iteration through the `heatbugList' will be
0 b2 ?! ?5 P$ Q, V7 {! {# {' Q* c Q // identical (assuming the list order is not changed, T& D4 \1 C/ s" D! N% z
// indirectly by some other process)., b# F: y+ X) a6 r* t
* r4 K* v I. E+ B- P+ F6 z2 `
modelActions = new ActionGroupImpl (getZone ());9 h6 G6 t: o0 ]! O
" Y1 W1 C- P% A6 n+ \7 q: ?8 ~" S
try {
# }: F0 T( U0 [6 D' G modelActions.createActionTo$message
0 [, m- H; y* V; i+ A (heat, new Selector (heat.getClass (), "stepRule", false));; F* T; U: }: Q9 a; x& N- u M
} catch (Exception e) {+ y" n5 ]4 ^7 X& {* d% @4 B
System.err.println ("Exception stepRule: " + e.getMessage ());! D9 D5 E9 v ] A" ` A
}/ \, O. e# B$ o4 ^
@& S; s& n& d5 N4 B4 `. {+ j try {
$ e! b- x2 F S, r Heatbug proto = (Heatbug) heatbugList.get (0);! ]# {; m( v2 |7 w7 V2 g
Selector sel = ' B9 y6 o8 v/ i/ B2 Z. {
new Selector (proto.getClass (), "heatbugStep", false);2 D4 v/ n# J/ ~4 p% a- w' `
actionForEach =
$ m: g- O/ B7 H: n% t! d modelActions.createFActionForEachHomogeneous$call
: }5 o" g, v) K (heatbugList,
8 k, m% }- J/ K, }. c. R5 k new FCallImpl (this, proto, sel,
# z, j/ I, j! M new FArgumentsImpl (this, sel)));
; H) j1 u! x5 R9 c% [& W% S( J$ } } catch (Exception e) {; I; K' u% O+ R* Q6 F* Q
e.printStackTrace (System.err);
+ ]- m# t9 O: ~: U3 Q# R( h2 } }
7 l1 w4 h; w: b7 D" L 6 d( R: Z% [* n; p: Q0 r
syncUpdateOrder ();$ P3 k+ ?" h4 N1 q7 d7 F
" j/ g3 Z P6 Z# o9 |; I$ v
try {
& I1 I. x4 L2 ~/ t4 {0 y3 Z modelActions.createActionTo$message ; b7 Q/ r8 C8 u* H3 ]6 C4 w
(heat, new Selector (heat.getClass (), "updateLattice", false));1 i: r9 I% c1 q% B0 s
} catch (Exception e) {
% J/ @6 r2 l+ j& {- S7 E System.err.println("Exception updateLattice: " + e.getMessage ());" S1 T: ^) G3 E/ E3 Q, r' @4 A
}
6 L" G1 @3 O" G1 T; P" @ 7 o- q8 W; h: i0 `* D& n
// Then we create a schedule that executes the! O9 {9 ]% i9 n0 \* }9 w6 w8 ?
// modelActions. modelActions is an ActionGroup, by itself it- v1 h. ^ j3 K$ ^
// has no notion of time. In order to have it executed in/ J4 \5 k4 c n8 N; E
// time, we create a Schedule that says to use the# m/ j6 I, a# F* J- C+ ^- H
// modelActions ActionGroup at particular times. This( B) o7 L4 [) a- L! P8 E4 K
// schedule has a repeat interval of 1, it will loop every
& ]* [2 b4 _, D: O T1 _; ?9 ] // time step. The action is executed at time 0 relative to
0 P( g. _& X5 H" ] N) d // the beginning of the loop.( P& z4 B o! g
* v4 }0 ?- n5 h0 [/ [; E
// This is a simple schedule, with only one action that is
# }& _: b4 G/ \ g" F4 J+ o( Y // just repeated every time. See jmousetrap for more1 `, {7 N+ I3 c* Y. `6 Q
// complicated schedules.4 Y4 o1 p8 T, ^
- m5 m4 ]4 S( C& \) a) ?1 b modelSchedule = new ScheduleImpl (getZone (), 1);4 }0 F( d3 q5 A* D' P
modelSchedule.at$createAction (0, modelActions);
9 j! B$ ?% c3 R& L0 K8 p' r* u ' t- K- b; w! o; V% c. a
return this;
: Q0 T% p" t4 p, K: e8 m } |