HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( G2 ~& C8 W5 r& e0 c6 r
* p$ u; g0 U# r9 x ?% {3 d
public Object buildActions () {* i1 {/ S: x- S( {
super.buildActions();% z+ K+ H( Z$ v4 a
* p0 A8 `: h/ f2 T% b6 u
// Create the list of simulation actions. We put these in
) A8 l8 C: I' @1 F9 _ // an action group, because we want these actions to be. a6 K% c$ h9 n' u
// executed in a specific order, but these steps should6 L; F. |- g6 J
// take no (simulated) time. The M(foo) means "The message4 k Z8 a+ B8 M3 [. l4 C. Z1 x
// called <foo>". You can send a message To a particular2 ? Z/ z' z$ Q+ h
// object, or ForEach object in a collection.' j2 g9 O8 _' M9 \' ]& |5 d
3 W% Q1 g/ d* {9 q$ y // Note we update the heatspace in two phases: first run: r0 a8 [+ ]& z1 d8 m
// diffusion, then run "updateWorld" to actually enact the/ n! r, R/ M! `$ Q9 V9 u
// changes the heatbugs have made. The ordering here is) Q; S# K* e( a) q+ F
// significant!
% B9 o6 N' L9 G2 L
% }8 Y' D% P b: L* u& ^. v2 u2 t* n // Note also, that with the additional
4 _( @4 E4 Q6 @3 l# a // `randomizeHeatbugUpdateOrder' Boolean flag we can7 J: x4 x) b% F( L, t
// randomize the order in which the bugs actually run& D+ _( j$ i) ~2 |/ u
// their step rule. This has the effect of removing any
4 ?" l& w2 U+ E, U9 x$ G9 ` // systematic bias in the iteration throught the heatbug9 k# n) }2 m5 y- t6 k* U
// list from timestep to timestep
1 |$ N: \ t# L' \
# F( n! w% ^ y, ] // By default, all `createActionForEach' modelActions have
* q2 y8 e2 F q* ?; w // a default order of `Sequential', which means that the
i. @$ j* d, w/ H5 C' {8 J, n // order of iteration through the `heatbugList' will be1 T' \$ t3 V4 z) v# X5 C" i
// identical (assuming the list order is not changed
2 q0 s: Q3 V( H. `# j7 P // indirectly by some other process).
! V. o4 f: q- X* r# B
3 G1 j I% t" U. R0 Z modelActions = new ActionGroupImpl (getZone ());+ }2 C+ O. o& x
/ r/ X6 ~+ x/ [4 [
try {/ `) b J+ d0 ?) d/ C0 P4 l/ O$ N
modelActions.createActionTo$message: I1 |) J% n6 ^7 J: h
(heat, new Selector (heat.getClass (), "stepRule", false));
% T5 G- j4 G! @: s$ Y( W7 } } catch (Exception e) {5 p1 \2 Z/ H) _0 d n
System.err.println ("Exception stepRule: " + e.getMessage ());
0 }, Y& U: }7 @, q }6 d" F% ^ J" A2 [: S
5 t2 p! \( ~ y. M+ T( z/ E6 j, |" {
try {
* R$ m3 N" w4 X3 L4 K$ y Heatbug proto = (Heatbug) heatbugList.get (0);, _/ [3 c' }7 u+ i
Selector sel =
* j2 W4 k( c* k new Selector (proto.getClass (), "heatbugStep", false);
5 ?, [3 P, v/ O: m; ^ actionForEach = `/ _) M% C8 {% ^
modelActions.createFActionForEachHomogeneous$call6 n2 _4 o- @" W' W% S
(heatbugList,
9 E$ `: ?, _6 `6 I( |* i7 F( R new FCallImpl (this, proto, sel,) s+ H3 B0 O8 a o4 I2 S
new FArgumentsImpl (this, sel)));1 E2 W9 T/ O8 W! J* ?
} catch (Exception e) {
; b3 r9 [9 z1 k9 E6 | e.printStackTrace (System.err);
+ x( \: d3 r0 R- C. O# T6 C }. O; m7 B) v6 @0 Q" F
; @" h+ [. p6 X0 Z1 x( U. {5 l syncUpdateOrder ();2 u2 n2 R# U( z' F5 L5 m5 \" [4 ?
, g$ i( M% d9 N5 \3 W) `" n: _5 J try {, ]0 C# E' e8 ~' B5 u9 h
modelActions.createActionTo$message - p1 T7 u; y, q4 X/ U2 P: t( f* s
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 V3 G4 K9 h' b: }& {, V } catch (Exception e) {
4 }% v: a2 }" w F g1 n System.err.println("Exception updateLattice: " + e.getMessage ());* ~- m- Z. y5 E4 \, t# x& Q
}7 |3 w- l0 n- D8 } B& D4 n
7 o' m$ i7 E0 D
// Then we create a schedule that executes the
. z- U" X1 c7 b% Y7 y2 ~ // modelActions. modelActions is an ActionGroup, by itself it
% B1 E5 j1 w, A/ r2 I! q+ D // has no notion of time. In order to have it executed in( Q3 |# t, P( E! K6 w4 Y4 i7 F. x
// time, we create a Schedule that says to use the
6 D! {6 M* g7 O, ~8 o# h3 P // modelActions ActionGroup at particular times. This
- O* D i+ `6 y* `3 u // schedule has a repeat interval of 1, it will loop every$ q1 f' Z8 I8 E
// time step. The action is executed at time 0 relative to* B% d6 g: c0 x) ~
// the beginning of the loop., b9 v+ ^3 K$ `& L. ~
! ~- E4 ^8 o& c; p/ t
// This is a simple schedule, with only one action that is
7 C- o: ]2 \6 f8 r) y) X // just repeated every time. See jmousetrap for more
" |7 B4 I! E# k+ N3 n* { // complicated schedules.! @' B$ d1 U: D; K* I
* C* @5 H4 L6 p# }& ?$ b" A) q" ]# m modelSchedule = new ScheduleImpl (getZone (), 1);
& ]& I: M: F5 }8 z: |' p% l: i9 F _ modelSchedule.at$createAction (0, modelActions);
9 G. I' k7 h# g1 ~; o6 x! g
& s0 _3 b8 H3 Z: V& k* ]! W return this;
7 Z2 _$ r E" G! ]7 L) ^1 F- i3 F2 ~ } |