HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 K* z) A' r6 V4 H0 y* z1 R. q7 c; s4 A( F. l
public Object buildActions () {
' m3 y% a8 z: h super.buildActions();
* z% W m* d) Q& G( H, N 3 ^" U9 f! E) i- V- v
// Create the list of simulation actions. We put these in6 B {7 D, o4 Z& k
// an action group, because we want these actions to be
1 w" v$ k3 X) s6 c, v+ C // executed in a specific order, but these steps should
: M- D5 X, L- S2 ~ // take no (simulated) time. The M(foo) means "The message
$ _+ }2 q0 c' ?4 g // called <foo>". You can send a message To a particular- e n- R8 S$ S7 Y
// object, or ForEach object in a collection.; f$ Q) M/ p- _0 L5 E; I5 d
7 g) q( P- B+ g. W0 v; m- Y
// Note we update the heatspace in two phases: first run
3 y. T x/ x1 T) f6 Z7 I9 _ // diffusion, then run "updateWorld" to actually enact the
* f; L8 l: U) t t // changes the heatbugs have made. The ordering here is) i1 N' a: G; \2 Q
// significant!
- y. I# t! d/ r, _* M$ [) f G
" E$ I* Q" }8 [1 W# R6 e // Note also, that with the additional
9 Y( P4 g/ u1 t- b; c6 [ // `randomizeHeatbugUpdateOrder' Boolean flag we can
" _. O4 v; l7 e! C" c! H // randomize the order in which the bugs actually run: [& B4 f& z7 L' c. H
// their step rule. This has the effect of removing any$ }4 S% M9 G5 H1 ^# _! Z0 Q: E
// systematic bias in the iteration throught the heatbug) \" g" J7 `: P. u A5 D
// list from timestep to timestep
/ u9 E% J- k+ P
) Z2 W+ K- S6 q4 i6 X# ~8 h/ y! g // By default, all `createActionForEach' modelActions have
& j' f* n: b" R6 W$ \) D$ H' [ // a default order of `Sequential', which means that the( f6 I* {+ V0 E7 r! w% V
// order of iteration through the `heatbugList' will be' F( l* G6 P# ]/ H. e6 @
// identical (assuming the list order is not changed
|+ j- I+ N% |0 y' l: I \ n7 @ // indirectly by some other process).
! k5 }( s" V5 t* r% P7 o$ {3 X
$ {. K9 l& N/ h( t9 z modelActions = new ActionGroupImpl (getZone ());/ r! P0 Q* g$ Z c) K$ g
& M0 y8 q7 f! I2 | try {
9 q) f# s% J; H; F S modelActions.createActionTo$message! Q5 O/ B0 g* q: Q' I
(heat, new Selector (heat.getClass (), "stepRule", false));
; ~3 R. d. t* p1 [5 W, \; h } catch (Exception e) {
, Z% x0 Y+ N" \2 B# J System.err.println ("Exception stepRule: " + e.getMessage ());
7 @- w: i9 o* h4 X- y+ S1 J. c }, F: D# A: A8 e# t! H
, \ X! {9 ~5 v; P8 Y0 A
try {, W8 [3 z; e8 v9 E, x$ T
Heatbug proto = (Heatbug) heatbugList.get (0);
, H4 A H; Z3 c5 b1 A Selector sel =
`4 x9 T/ U8 A2 q$ S8 n new Selector (proto.getClass (), "heatbugStep", false);1 { K9 n* [/ j/ b. L
actionForEach =* ]" T( _( [: n
modelActions.createFActionForEachHomogeneous$call
9 \5 ~7 N$ t5 M, ?. d% J+ h2 M$ P (heatbugList,
8 {4 V" r$ T/ w$ j3 n new FCallImpl (this, proto, sel,4 c; U4 z; V0 D- o
new FArgumentsImpl (this, sel)));& b/ w* X2 w. }" T
} catch (Exception e) {
5 G6 D1 s( k( ~3 M e.printStackTrace (System.err);
: b; B; `1 R1 i% J' z, H) g r }
! K j+ b. W/ ^. a/ G
7 {* M# @3 U4 W; I+ o- m$ E syncUpdateOrder ();: e4 R% l% @+ C% y" U5 g. s, e; L
9 E) J4 g& p) N# o# t: |
try {% l, @- i" D# f [4 i- S4 Q
modelActions.createActionTo$message ; O) b" q3 X) O! [
(heat, new Selector (heat.getClass (), "updateLattice", false));$ b% v2 {2 a ?4 h& N
} catch (Exception e) {
0 |. x9 r$ |% Q/ y% L9 s System.err.println("Exception updateLattice: " + e.getMessage ());
+ X1 I9 f5 J8 B7 N* L( m' r8 W }& t8 y( K( p0 ~. K, a- d+ a
0 V! v6 y- k x8 g
// Then we create a schedule that executes the' T0 D9 B5 @* l5 H/ W" K: x
// modelActions. modelActions is an ActionGroup, by itself it9 r( K* T' d! R) r9 z& |7 v* {
// has no notion of time. In order to have it executed in
' ?5 S% v" v1 r* W: A/ t // time, we create a Schedule that says to use the
. h8 z" h: M( N: Y2 h- D3 e! U // modelActions ActionGroup at particular times. This6 Y; j8 C: C4 m( [
// schedule has a repeat interval of 1, it will loop every1 R R& A9 q6 ?9 T9 g, J5 e
// time step. The action is executed at time 0 relative to
) Q( L7 j$ g- d% P // the beginning of the loop.9 c, ~/ ?' ]+ O+ a4 o
" E2 c) `( |) q! D7 |# f
// This is a simple schedule, with only one action that is
0 U( N% w5 }/ L" b8 [+ f, v9 A // just repeated every time. See jmousetrap for more) O& t0 D6 \$ H5 [ O5 _
// complicated schedules.& q& n% R2 H5 g: P
8 Y! ?9 ~: q) p5 l4 p, m modelSchedule = new ScheduleImpl (getZone (), 1);8 [- n) M' O" t7 v/ U
modelSchedule.at$createAction (0, modelActions);2 k7 M0 {2 F" {/ ], ^+ S
6 e. ~8 o: A# K* a. I
return this;
% i7 f( r0 T& B' _) A } |