HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 O3 z. Q7 ~* `# k2 I5 g6 P1 j) F4 o, {& d; P
public Object buildActions () {2 X' h+ j$ x( B7 `/ B" d9 z/ S5 p
super.buildActions();( f' m; e( m# T* j7 O
; k/ z6 ?" O$ u6 I( F- n# k& X. ?0 y // Create the list of simulation actions. We put these in' j2 C. Q& ^6 |
// an action group, because we want these actions to be f0 A3 R3 W5 @* M7 G
// executed in a specific order, but these steps should9 A1 h% B/ G( V4 ]
// take no (simulated) time. The M(foo) means "The message
: ^+ J7 t$ @6 d7 p# ? // called <foo>". You can send a message To a particular Z2 I( g' ?3 _6 m& ~: K
// object, or ForEach object in a collection.- O' K. @/ l) c+ y H9 u' n
% A- Q$ u: p% I
// Note we update the heatspace in two phases: first run
( k- [! Z5 [8 Z$ i. } // diffusion, then run "updateWorld" to actually enact the2 i4 g, R# z2 }
// changes the heatbugs have made. The ordering here is1 m7 U$ ^/ |& o2 b4 @, V7 \
// significant!
, t" ^/ c7 n+ i* L+ R8 o3 v
: U7 W) E2 `1 |$ C2 K# t q // Note also, that with the additional+ s R7 H) B2 R( w
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: i A3 P* c3 d4 g0 r2 o // randomize the order in which the bugs actually run
6 e& N- Y- q2 q$ r // their step rule. This has the effect of removing any
/ B& c) N, v; `# X9 z; ~8 j6 b // systematic bias in the iteration throught the heatbug: }7 i6 ~) i2 j6 m$ Z
// list from timestep to timestep
" N% a: c: Z. q9 [ M8 u% ^; p6 I0 m5 P
// By default, all `createActionForEach' modelActions have
8 _7 g, D5 a. l0 v' ~7 c; _) A // a default order of `Sequential', which means that the. T9 ~: j, L: w& r4 v6 V
// order of iteration through the `heatbugList' will be
0 J, R3 i9 m' O1 R! R* ~# l // identical (assuming the list order is not changed: }) L/ v7 y7 c5 j( O, s* u3 C
// indirectly by some other process).& g1 w8 w' y' n9 Z: s! ~
- c: q: C9 z5 b) h( W; Z3 n, Y
modelActions = new ActionGroupImpl (getZone ());
6 M8 T) I8 z4 c7 ?( r: d
3 O& q' f( o" W7 v' _4 J8 O try {1 R+ d$ b, U# V; M$ a8 Q2 M
modelActions.createActionTo$message
^; D/ D* q$ U3 `% T" U8 d (heat, new Selector (heat.getClass (), "stepRule", false));: x+ h( X2 j3 V, `- b G9 `
} catch (Exception e) {
. P- d" h2 c3 N1 } System.err.println ("Exception stepRule: " + e.getMessage ());
( Q' ^5 p6 I! D }
b3 k3 P" s# F, c; Y
+ T2 b5 @3 a- L0 o( a5 o0 e: M try {
& I3 y# x6 @7 ~' I8 z9 Z. T Heatbug proto = (Heatbug) heatbugList.get (0);
6 J9 v2 w# Q% D X) y Selector sel =
' {- w4 S- w2 i& E new Selector (proto.getClass (), "heatbugStep", false);
, D# l0 q; [6 |7 l0 o+ k8 h8 F actionForEach =" N1 P+ [ g. |/ @) Y
modelActions.createFActionForEachHomogeneous$call# v n; q: o" f& {7 N6 J4 a% w
(heatbugList,
6 s' G5 _2 d y( c0 o new FCallImpl (this, proto, sel,
. J. F4 S6 J: x+ |( n& q7 `/ x5 O new FArgumentsImpl (this, sel)));8 ` f1 G n; z3 ]# A: v% a
} catch (Exception e) {4 A/ Y# ?7 e- [* x5 j" V6 {
e.printStackTrace (System.err);
0 m$ e* e4 h8 O }3 e6 `' Y0 Y- C5 b
9 x1 K& f3 L# u+ Y3 [. Y
syncUpdateOrder (); F, B7 z- c5 g5 l
: ? I! ~# D" d k try {2 j1 J/ ^5 @0 c) J& [. v6 i
modelActions.createActionTo$message , v# [$ y4 Q) K9 p
(heat, new Selector (heat.getClass (), "updateLattice", false));6 ]% ? j$ X: w( }0 g
} catch (Exception e) {( n9 x) k! Q4 w
System.err.println("Exception updateLattice: " + e.getMessage ());
* T+ A9 A V) w }5 c" a+ N1 S) [& z8 m6 h* a0 Q
2 D, u2 y6 n# P8 ?* ^
// Then we create a schedule that executes the1 Z1 {( Z/ ]3 u( V) {9 }7 |7 R
// modelActions. modelActions is an ActionGroup, by itself it
/ z2 w# G2 @" l6 }6 Q3 A4 p( Z- { // has no notion of time. In order to have it executed in
: O3 S* N8 x8 ^) F7 V, d // time, we create a Schedule that says to use the- @5 y6 D: O- S
// modelActions ActionGroup at particular times. This
' [' a/ V7 u9 P/ H& k" G/ P // schedule has a repeat interval of 1, it will loop every
- a6 N" s0 M# o0 E/ f0 X // time step. The action is executed at time 0 relative to
/ R+ E r8 r3 C7 |: z // the beginning of the loop.
, m4 O K O# { m: y
6 @* s( I4 m6 ?. @ // This is a simple schedule, with only one action that is' f+ j+ _, `+ {
// just repeated every time. See jmousetrap for more
5 G: _+ l+ o9 G // complicated schedules.! a& p9 r6 J1 s8 u2 Z# ?5 ~
% X. h. O6 T' S' |& G
modelSchedule = new ScheduleImpl (getZone (), 1);
' I4 x2 K0 ~# ?. D modelSchedule.at$createAction (0, modelActions);
j/ d% w1 m9 I7 y7 y" M 9 G' t# n6 h J
return this;
& z! G/ k8 X2 U' c. A" m6 Y } |