HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ ]: q: |( @9 @# J( D
D* `' q; K( B; _
public Object buildActions () {
4 b! f8 g; p+ F8 B. [: W( \ super.buildActions();
' m5 P7 ~9 l m. K( q; n4 P / L- d9 g0 C5 y6 N6 h! s
// Create the list of simulation actions. We put these in3 g6 V9 ^& I$ _6 q
// an action group, because we want these actions to be
- ?- ^3 ~( e# E // executed in a specific order, but these steps should
7 D- y+ V( w% A' x+ o // take no (simulated) time. The M(foo) means "The message4 g, k1 }! V6 M8 u
// called <foo>". You can send a message To a particular+ \/ S; V) ?! X7 S
// object, or ForEach object in a collection.. c* w8 ~8 y9 P
' ~6 T8 z4 |3 C; X+ O4 _$ p // Note we update the heatspace in two phases: first run
5 S4 P8 Y* u' Q w K+ k // diffusion, then run "updateWorld" to actually enact the
4 Z: G& M! |2 T4 c8 J4 K // changes the heatbugs have made. The ordering here is
0 U# _7 ?9 r0 n) r; R: r // significant!
' g: k$ J4 |( X7 V0 Y) d7 S5 M # A6 U8 v" Y! F9 P, M5 y5 D
// Note also, that with the additional( P. G3 c$ E% }0 q
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 ~# c* O5 U0 \7 A1 m, ]) T // randomize the order in which the bugs actually run
; G. j2 F& V: a7 }0 |1 |/ ]& W, \3 ] // their step rule. This has the effect of removing any
6 W. _$ [( j) y m* o // systematic bias in the iteration throught the heatbug3 P$ Q& r2 y4 z" @0 Q5 F1 I
// list from timestep to timestep
/ P9 a- j+ d. y. m4 {
# b) N2 y9 h5 I" |9 Z. e! L // By default, all `createActionForEach' modelActions have
: O0 k! b; K( M0 [- i' w // a default order of `Sequential', which means that the
8 |, P) o; W) M* m6 u/ q // order of iteration through the `heatbugList' will be' o3 V1 n. R/ D3 c1 e0 Y
// identical (assuming the list order is not changed U! B' w5 L. B: c1 u1 M2 _
// indirectly by some other process).
8 Z+ {' j& H* x$ K( ]+ w: E& E ) g T9 i1 p: W% O0 a
modelActions = new ActionGroupImpl (getZone ());
6 |1 R4 v3 ]5 I" t. T8 w; h0 h4 m5 @8 [) f! L. A
try {
: I* D6 n, d/ K; V( O( h modelActions.createActionTo$message+ |* Q' Y9 o! R; A. S# z9 w- v
(heat, new Selector (heat.getClass (), "stepRule", false));* k$ |% M) c! F* F
} catch (Exception e) {
- o: p2 Y/ b; w' q' A$ c5 P5 f System.err.println ("Exception stepRule: " + e.getMessage ());3 V9 r' ]* I* Y% j
}2 D6 O2 g+ |7 r4 m9 t% |' H
; `2 ` s) O- u1 D
try {+ T7 v' m% z* s! T% u1 Z
Heatbug proto = (Heatbug) heatbugList.get (0);
* n$ V/ v2 D" n Selector sel = 5 n5 p! e1 D+ Y. l- b
new Selector (proto.getClass (), "heatbugStep", false);: r& \7 V# C: l* S
actionForEach =1 [% x( I9 S* ~4 B8 | N, [
modelActions.createFActionForEachHomogeneous$call- |) T! Z# w' g f/ c& t
(heatbugList,
7 Z' s+ p( s0 @* b7 S new FCallImpl (this, proto, sel,4 D8 c7 o# i/ G2 _5 R6 Z
new FArgumentsImpl (this, sel)));
: \3 y, T* s4 _ } catch (Exception e) {. t3 r& h. B S
e.printStackTrace (System.err);
- O1 B# m2 N: L, ?1 x }
! t0 K3 L4 w5 P) y- u) v0 O& k
& d& }7 n d! H5 V syncUpdateOrder ();
9 ~# U8 d7 z5 m d, j$ `" r3 _9 E8 K6 X5 C0 Z
try {6 ]& Q3 s: F- u! j
modelActions.createActionTo$message
2 T- o3 N0 G) J+ T# Q) R0 w (heat, new Selector (heat.getClass (), "updateLattice", false));
3 z6 i- Y3 n& ? } catch (Exception e) {0 ~8 F- M5 N+ } Q/ L3 G j5 E* y3 U
System.err.println("Exception updateLattice: " + e.getMessage ());& }8 C* w& _1 ]; M$ i; S" S
}
& v1 G0 M, \( j ; [( _' C7 K4 p+ p
// Then we create a schedule that executes the
' G6 N2 d% F' {5 K* \7 L9 e6 f3 B! q // modelActions. modelActions is an ActionGroup, by itself it. Y2 ^7 e1 s$ c
// has no notion of time. In order to have it executed in
% r& S5 c+ d$ ]3 @( U# N" T( G // time, we create a Schedule that says to use the- S- I& L% d% e9 R7 B
// modelActions ActionGroup at particular times. This7 m# F/ r! w; z& {
// schedule has a repeat interval of 1, it will loop every8 x# F+ A$ N: f# h2 g: _4 j5 \
// time step. The action is executed at time 0 relative to
4 j/ f8 Q5 o& P# j$ B$ L // the beginning of the loop.
' Z ^7 {+ Y. R* Z$ x% Q: ]) U7 e7 L( [6 l' w
// This is a simple schedule, with only one action that is5 P) |( X( I8 ^# a8 f5 |8 e' ~2 M
// just repeated every time. See jmousetrap for more. r# c: j1 L. O+ a3 F. S) c
// complicated schedules.
* s9 \ }5 `" F/ ~) @* A
2 c0 O! k: v* z$ q modelSchedule = new ScheduleImpl (getZone (), 1);
" @* L& y( \# h" o3 C. d modelSchedule.at$createAction (0, modelActions);. T8 y. Y. a& f; P
8 A9 T% W( v5 K: t. p! r2 l return this;
# d& x* F6 d: V* T8 X } |