HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! m+ D3 ]9 E8 v0 X' Z( v3 }" D4 f8 x6 J# Y
public Object buildActions () {
' d* V2 q9 f, k7 M6 X super.buildActions();
+ ~! _- s% A* k. h 3 p2 Y/ b/ S m% C5 c- R9 `+ h' _
// Create the list of simulation actions. We put these in: i; |3 E' P7 q4 U$ R. Z3 N9 Z2 C
// an action group, because we want these actions to be* ?; w) U2 t# `1 `9 g8 a' `
// executed in a specific order, but these steps should
. ~- q f' V3 Q9 T) ] // take no (simulated) time. The M(foo) means "The message
1 Y2 L' p4 M6 J# s6 W+ Z4 ` // called <foo>". You can send a message To a particular G4 I1 o1 ]/ d+ A8 a( I7 L4 m) p! E
// object, or ForEach object in a collection.
* A. z) t+ |& i% B
9 c; J: `2 T: G) ?* w1 e // Note we update the heatspace in two phases: first run
. B/ ]+ k- n' W- [ // diffusion, then run "updateWorld" to actually enact the
7 [& V! ` z5 m$ K4 }0 Q // changes the heatbugs have made. The ordering here is3 o: S8 A, O- ^
// significant! U, _8 F. t; ?' U2 X1 I8 ^2 C
: q% T6 b, d* n9 X L // Note also, that with the additional
% D1 ~2 X* C6 i+ ^7 q // `randomizeHeatbugUpdateOrder' Boolean flag we can+ P/ z- f; {& h: \+ f4 u
// randomize the order in which the bugs actually run
" x6 `, n, ]/ a: y // their step rule. This has the effect of removing any, a+ z. a1 h5 g
// systematic bias in the iteration throught the heatbug
, `6 ~$ Y# t7 [8 [, l) ]+ M // list from timestep to timestep
( O6 G0 n$ z3 X- |6 f0 d8 \4 W
6 d: h+ J8 M& h0 X" R9 Z // By default, all `createActionForEach' modelActions have
5 q- C Q2 |8 @$ L // a default order of `Sequential', which means that the/ G6 p3 Q/ I. ^- h1 `! X
// order of iteration through the `heatbugList' will be
; @ t( l+ g& M& J: O' [ // identical (assuming the list order is not changed
9 i& Z7 `& B8 p8 [! X" I( i( [ // indirectly by some other process).
' x9 i3 e; u: n$ [/ Q G i: P, N
( d* ^6 H2 W O t3 S modelActions = new ActionGroupImpl (getZone ());
; ]( L& o+ f0 a
; `) }7 g0 o& u$ R: r+ e try {% N( m* `8 e7 ~1 y& Z" A: X9 N
modelActions.createActionTo$message: p5 q) g% g/ T5 T$ j+ l& E. o [
(heat, new Selector (heat.getClass (), "stepRule", false));
( ] V' s; \8 R } catch (Exception e) {# T; \$ y4 d/ @8 m/ U
System.err.println ("Exception stepRule: " + e.getMessage ());4 w" L% b. p, T, _4 g+ C. a5 Z) f
}* e* g3 d- A) i, Z) Z2 I1 @
2 o( C8 V- j% s# z" k& _, ] try {
/ p) t! I4 `0 f4 ^# { Heatbug proto = (Heatbug) heatbugList.get (0);/ V E8 y" y* b
Selector sel = ' f0 L" g$ E6 g2 J
new Selector (proto.getClass (), "heatbugStep", false);
" @# H2 D- V' B% |9 P5 N; w( F1 Z actionForEach =
& O0 ]1 ^8 A& ^, s9 T' t$ \ modelActions.createFActionForEachHomogeneous$call7 {8 v7 E; t2 w3 A' F# k2 T$ K! X
(heatbugList,: A7 I# r* `" ?$ `
new FCallImpl (this, proto, sel,
& D) C- @4 Z$ p3 ~' u new FArgumentsImpl (this, sel)));
. g" G1 T, E9 w+ b" T } catch (Exception e) {
- i* g# x# f/ S8 n e.printStackTrace (System.err);
, a6 S4 [$ O& u6 N0 Q* `2 i0 v/ i+ @ }
2 D+ t0 \, _0 n0 [$ F" k) h
' b9 I, l+ K7 g$ i* G& ~ syncUpdateOrder ();0 I; n0 |: p- A( q! b
3 |- N# L0 E4 E3 A8 D
try {0 e' H9 t/ r {* ~* N7 ?" G: f: j
modelActions.createActionTo$message
, T. i* Y6 l) A- J5 J3 N0 \ (heat, new Selector (heat.getClass (), "updateLattice", false));
: x, l3 @' o7 Y8 ~1 O2 T2 g } catch (Exception e) {
7 n" m* {: C: ~ x System.err.println("Exception updateLattice: " + e.getMessage ());
2 \ N; m( Q- m% q: q# m }
# C3 s4 I: m6 @4 g
. |3 b3 L$ g5 P# G( J // Then we create a schedule that executes the7 V+ w3 X' c* c, \3 Q" D
// modelActions. modelActions is an ActionGroup, by itself it
4 u5 b8 I' _& l7 I r // has no notion of time. In order to have it executed in0 q" r" k- r$ Z5 E* U
// time, we create a Schedule that says to use the' Q( u( _: B) S& z
// modelActions ActionGroup at particular times. This# L( B: J' e) z" S9 s7 m
// schedule has a repeat interval of 1, it will loop every
3 I* |+ N. y+ c3 c& V, O, m // time step. The action is executed at time 0 relative to
* o& [% a5 s" l9 T: e0 q4 P+ g! a // the beginning of the loop.
4 e! d# X$ i1 ?& X Q' ?
, A) n: u) {, ^8 J5 K* q // This is a simple schedule, with only one action that is
3 _2 w. `7 P. S& z8 D& R // just repeated every time. See jmousetrap for more% ~/ V# ?/ q9 r. ]* t, r9 _
// complicated schedules.
& x; f, j6 a' ^+ ^% w & v, `8 J9 N {- B" f8 {& r
modelSchedule = new ScheduleImpl (getZone (), 1);2 e( g$ j5 X8 r1 G1 H# M9 A; T2 @
modelSchedule.at$createAction (0, modelActions);
- H# R- _+ `& c7 Y$ o
+ e% z# z. w* ]$ S, q& H return this;
- u- g" \% ?; R2 a# r } |