HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: Z" Q9 j: a. D4 l$ Y" b
0 [' y4 E4 J7 Y5 _+ i0 D- R! w9 N! b i: B public Object buildActions () {
, u3 ^+ @8 x5 {/ ] H! ]2 O% B super.buildActions(); q* I; c& K4 t; [
" M1 X2 S; U) v6 p+ ] // Create the list of simulation actions. We put these in8 S Z; G- }3 }" J' H
// an action group, because we want these actions to be
: {; W; V; J' K9 ~8 m. _. a5 r // executed in a specific order, but these steps should
+ s: c/ `% S2 U; r+ M3 U- n0 E // take no (simulated) time. The M(foo) means "The message
) R- y) {, ~: _* S! V- F // called <foo>". You can send a message To a particular( [! K4 X+ O0 y# e9 J' N* r
// object, or ForEach object in a collection.
' f0 e" z1 J# M, Q
7 i# G& ]: f" k' i3 R, I9 {4 e( D // Note we update the heatspace in two phases: first run; W7 l' x ^' q4 _
// diffusion, then run "updateWorld" to actually enact the
, w$ p* e- @, w1 p8 b // changes the heatbugs have made. The ordering here is
$ N) F( s: d( k" r& J+ {; z* ^* q // significant!
$ Z8 e* M. D7 U2 ]) Z2 ]* U
+ O ~1 m9 P3 F1 P9 ]* d4 u& f // Note also, that with the additional) k8 z/ C7 L0 `' n9 A# `1 ?& V
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 p$ d9 } P! p& F* \$ Q4 i
// randomize the order in which the bugs actually run
5 K/ u% u" ^8 F) P3 s( Q [" M // their step rule. This has the effect of removing any7 x. W. Y) Z$ B
// systematic bias in the iteration throught the heatbug& u0 k) f& Y) H( |- N
// list from timestep to timestep
( i; p) {; {, |* p3 f- I/ k8 o ) ~0 I) n h8 Z0 Z7 e0 i9 I+ Q
// By default, all `createActionForEach' modelActions have2 A ~1 W$ k/ G0 |# ^% c0 i
// a default order of `Sequential', which means that the9 j9 [3 k- _4 j4 `
// order of iteration through the `heatbugList' will be- W8 m0 W8 L# f" P7 x9 [
// identical (assuming the list order is not changed% l! u+ _1 y2 x- X- B
// indirectly by some other process).5 [ J) U3 s$ D
! D! c& _8 c: d0 \; I9 O5 } modelActions = new ActionGroupImpl (getZone ());4 p) t) A. e0 G8 b
4 g% h$ A. X% @2 W8 I+ B try {" ^0 F. F" f- A) Q
modelActions.createActionTo$message8 ?& |# o2 @& J: \$ S
(heat, new Selector (heat.getClass (), "stepRule", false));3 ]# b, Z: Y- x
} catch (Exception e) {( z' n; k. @& z
System.err.println ("Exception stepRule: " + e.getMessage ());
6 R* { ?7 y: K9 c }
0 u% q* C) R6 a+ s# `
! L0 O) p2 D; E6 s4 |- u$ g try {
- w9 \- s: d) O& w( F3 j Heatbug proto = (Heatbug) heatbugList.get (0);
- k4 P' N+ \9 K w) y3 x W: e Selector sel =
' J4 V, w5 ~6 r2 h+ W& A/ H: V new Selector (proto.getClass (), "heatbugStep", false);3 t& J) [6 K( ?2 l7 ^) ?; P! a9 `
actionForEach =
! ]8 ^4 f6 ^1 R modelActions.createFActionForEachHomogeneous$call
& C" ^ F) W6 ~5 e/ c+ | (heatbugList,7 r- j" D( ~( N, b& U
new FCallImpl (this, proto, sel,' _! D# i) V( T9 h* T
new FArgumentsImpl (this, sel)));" O2 v7 k- Q2 S" ]$ N; X4 R7 n( \
} catch (Exception e) {" y+ f5 w: m5 X" E& ~
e.printStackTrace (System.err);! s, B' O G2 d w# R* c$ X+ }
}
3 V k2 q$ g8 W ) |2 \% c& D' ~! @
syncUpdateOrder ();
% K$ q4 D( K$ E; r- q( u2 @% s9 [4 [$ W5 J
try {
& @0 Z9 E; T4 U modelActions.createActionTo$message # Q, z) Z4 F4 N0 \6 X
(heat, new Selector (heat.getClass (), "updateLattice", false));# {/ G& D8 D6 A( @1 E8 ]% Q {( q
} catch (Exception e) {
* B) u6 e- @2 v8 K& K/ S System.err.println("Exception updateLattice: " + e.getMessage ());# R( a9 j+ |3 q \0 f4 V
}) B- d4 C: z3 h
8 k4 O! q. n% o& }; v) ~5 |: V, k
// Then we create a schedule that executes the
4 n7 `# M" O% H: G // modelActions. modelActions is an ActionGroup, by itself it4 \" k$ b# a! S1 S- v. c0 I
// has no notion of time. In order to have it executed in& i6 e/ Y7 M6 h" V; X- [4 H
// time, we create a Schedule that says to use the0 z- @- I. N- J! Y* a- s# s9 w0 u" x
// modelActions ActionGroup at particular times. This, v0 t' E* C; K
// schedule has a repeat interval of 1, it will loop every: ^5 F. T. z& q8 \, i* O; P6 d
// time step. The action is executed at time 0 relative to
& h/ k6 R) f3 f( V. O: q // the beginning of the loop.( q* t8 W' `# m' L8 E
4 o7 k1 d1 ?- q" o1 l: p2 d$ Q8 y // This is a simple schedule, with only one action that is) B5 m# {! K0 p- t/ B4 S
// just repeated every time. See jmousetrap for more
( I# a; j4 O0 [2 u ^1 c' b2 g // complicated schedules.
' G+ b* I% F0 C& {4 r; @. b
4 ?0 h. v! Y2 H) T$ Y modelSchedule = new ScheduleImpl (getZone (), 1);
! H: `# I- P" X" |" `; S5 M modelSchedule.at$createAction (0, modelActions);
. v9 T" x t1 M9 X; ^ & a3 X2 m2 q* M5 f& n O/ b- V. w
return this;3 [7 @0 _2 L' X7 n$ T2 y4 l
} |