HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; I* g6 X4 E9 t* f& V) M0 k' m; g: B* Y) e1 e; O, M
public Object buildActions () {, v& S ?# Q& h. k: G; ~! T
super.buildActions();
! r5 p( N" F! P9 G4 J ; s2 w7 p- V3 P; z
// Create the list of simulation actions. We put these in
) |# `! r/ w8 C; ?) ` u4 } // an action group, because we want these actions to be
, Q; i/ e7 Z1 w+ a5 @! D // executed in a specific order, but these steps should
$ ?0 U4 ?5 |- }6 j* j: C: j/ g // take no (simulated) time. The M(foo) means "The message
1 z2 ]9 O" c1 r7 Y // called <foo>". You can send a message To a particular
8 p. d' Z& B+ v // object, or ForEach object in a collection.. _: }) k3 y9 V \ u& C$ j: ^
& S/ y% {- {, I; u // Note we update the heatspace in two phases: first run* s h+ v$ F2 Q4 X& t* f
// diffusion, then run "updateWorld" to actually enact the8 l# d F7 W" u- e' z
// changes the heatbugs have made. The ordering here is
. N. i- ^0 T/ W8 U) J3 g( Z // significant!
3 Z; W# t. B+ Z t& [ + J5 D3 L& O; B: _
// Note also, that with the additional
8 V8 u' m% P& H+ g9 G5 G" v // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 J, x s! M% X$ } // randomize the order in which the bugs actually run
! Q" E8 I" _9 T' p$ H* P3 q; ]! ? // their step rule. This has the effect of removing any
( s- ^' a8 b' I& Z h; u) i // systematic bias in the iteration throught the heatbug3 Q0 h& x/ }* C9 O
// list from timestep to timestep
+ Y! a/ v0 m: v' K7 E- P0 z
2 o9 ]7 D. P9 u; Y5 ?$ P9 j // By default, all `createActionForEach' modelActions have1 R2 U1 m( G1 M- Q. e
// a default order of `Sequential', which means that the3 [/ _0 f# [5 g: [2 z" g4 C
// order of iteration through the `heatbugList' will be
0 l- D; C" ]+ v8 L+ u" |/ @ // identical (assuming the list order is not changed% ^: S5 I0 N8 W9 z. v9 d
// indirectly by some other process).
: o7 u% a/ x/ c8 }8 w+ m( C2 I $ \ k% I" f2 X: Q
modelActions = new ActionGroupImpl (getZone ());
" V* d/ _3 k2 g2 t7 @ q! d2 n1 P3 M* d
try {
8 F: u7 ^9 d* w modelActions.createActionTo$message
2 N' a" _! \) S7 z! \+ w4 I (heat, new Selector (heat.getClass (), "stepRule", false));( j0 j- C0 c# `8 |4 I
} catch (Exception e) {1 W c# a( e; {9 F' Y
System.err.println ("Exception stepRule: " + e.getMessage ());. Q3 Z' X2 W, \6 D; s! ^
} T2 \* m7 t" m: o# k: Z
9 n h% A1 @. @" f' A
try {
* S: t( N1 R, W7 @/ r Heatbug proto = (Heatbug) heatbugList.get (0);
& A5 j+ s5 W+ w" j% D. P! H Selector sel = : U; s N0 |# S- ~' d& E* ~
new Selector (proto.getClass (), "heatbugStep", false);
2 D% y3 r/ T) h3 W* [3 K actionForEach =
+ b2 ?# M' x) W/ K: n) i" O modelActions.createFActionForEachHomogeneous$call
! ?" N0 O4 w" W' a (heatbugList,
# O, y. t, z4 `, n1 x% P new FCallImpl (this, proto, sel,$ y6 J" J$ B! P/ I D4 ]) u
new FArgumentsImpl (this, sel)));2 k, h9 }' J; b! m8 ^$ \9 B( J
} catch (Exception e) {7 k' N) {3 |8 V" i& w$ p
e.printStackTrace (System.err);0 _) z% }3 B' M% k; u' `9 h, u
}) W s% f- A9 Q( \8 b4 X) l0 `9 M
. E! c4 U$ O: ?
syncUpdateOrder ();
1 U7 c& a* `+ E& Z+ R' e p! q R* _: D3 _
try {
. i* E3 J4 J/ ~+ b, C. Y modelActions.createActionTo$message 9 y# K' \' P) x( c8 n8 k
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 ?1 ^, t" W9 H# s# U. E1 V } catch (Exception e) {
4 {( a' X, f3 m, v3 k# b System.err.println("Exception updateLattice: " + e.getMessage ());
+ s1 K, V \# E4 Y }
0 v8 q7 B. {+ M 2 X2 |, r$ C/ `* |
// Then we create a schedule that executes the
6 T5 j' y+ W7 G0 @( e( D- R) R; b // modelActions. modelActions is an ActionGroup, by itself it$ |' Z/ D& W( s+ z$ u6 [
// has no notion of time. In order to have it executed in
, S: j, `: J9 F6 Q: r/ f% ]8 A // time, we create a Schedule that says to use the8 D3 Q, o% Z4 A" @$ \1 I) i1 W5 P$ y
// modelActions ActionGroup at particular times. This
; }$ U$ o, d: K9 G0 @ // schedule has a repeat interval of 1, it will loop every
* h3 U' J y6 `1 a1 u9 x: { // time step. The action is executed at time 0 relative to' e& S! Q, L9 r' D( w) N( W5 u! P
// the beginning of the loop.
" y6 q- c$ Z. A; j5 G- M( k" B) M. J% n5 h- K5 `# E$ ?! @1 x2 _
// This is a simple schedule, with only one action that is! H& H" n, @, |6 F
// just repeated every time. See jmousetrap for more$ [: d6 [% a8 P. g; J
// complicated schedules.
4 }2 E' G' ~( d, @9 m ) g( L9 m" t9 ^. u M- Q8 E! Y3 R/ n
modelSchedule = new ScheduleImpl (getZone (), 1);% v; y5 A# I9 ?3 D
modelSchedule.at$createAction (0, modelActions);6 H8 ~2 S8 R0 G
& V& O2 |: l$ S0 @
return this;" L+ w5 m9 Q! V" Z0 h0 q: ~
} |