HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# B" g% l4 E/ j0 G1 K# u3 \( D' E: J' K' c3 Y/ K
public Object buildActions () {, f3 p1 k0 K/ h6 i+ ~9 {% z# V
super.buildActions();6 @( l3 Y6 [) T1 f0 I y+ Y( W( L+ y
9 [: J7 i3 F* o, B4 p, U // Create the list of simulation actions. We put these in/ t7 {- V, K% ~. Q7 w
// an action group, because we want these actions to be' ~- l; q1 r( Q% J
// executed in a specific order, but these steps should
, [, X; v/ z5 E3 `' b // take no (simulated) time. The M(foo) means "The message2 P- F% Q+ R8 f# w
// called <foo>". You can send a message To a particular
1 i4 ?" K4 [) a5 w2 d9 R // object, or ForEach object in a collection.
7 l; ?8 z6 k- f+ s4 R: d
- H: z9 `2 Q, d, K // Note we update the heatspace in two phases: first run2 z8 e" @! K( q6 @, q7 ~
// diffusion, then run "updateWorld" to actually enact the6 S+ c$ f1 Y3 A2 _3 a, M6 F( n+ s
// changes the heatbugs have made. The ordering here is
; f1 I3 V, z" U5 o4 a! j // significant!
, `; D6 Z& N2 v& @! l0 X4 F4 C
: a) [- [! \% M7 @# m, q% [3 A // Note also, that with the additional
x3 o$ \2 D( M w // `randomizeHeatbugUpdateOrder' Boolean flag we can$ W+ i3 E6 R# p+ g3 \! A7 R# w w
// randomize the order in which the bugs actually run
: z' i6 k4 b% G3 k* L5 b( H; l* t // their step rule. This has the effect of removing any1 z9 d, [" x1 D# e
// systematic bias in the iteration throught the heatbug
( }! X5 Z" {8 y // list from timestep to timestep& t. l; i5 D- ~! d) I3 F5 d) n
, d% I2 L: h$ l0 U) @" l; e$ @ // By default, all `createActionForEach' modelActions have
1 Y3 P5 |& n" D6 v; K // a default order of `Sequential', which means that the
& n: C' U/ C8 Z) o2 b3 o // order of iteration through the `heatbugList' will be
) m. r& p0 X6 S4 g+ G& Y; B7 Z // identical (assuming the list order is not changed
4 M7 Z5 B( \8 \' X U" _0 f R/ J // indirectly by some other process).
7 O3 ?" h J" U% C# i& C
: W' r5 ]9 e" P9 H modelActions = new ActionGroupImpl (getZone ());- |! U7 Z$ h% S: k9 _6 g; k; y
; c0 u( F# G" t: [9 H* l* C
try {* {+ g. k7 Y5 V$ P: l, k
modelActions.createActionTo$message
0 @, H/ o7 P! A- F( a (heat, new Selector (heat.getClass (), "stepRule", false));
6 o- `7 Y2 Q; _ } catch (Exception e) {7 p6 v* ?; A, M7 p. Y
System.err.println ("Exception stepRule: " + e.getMessage ());) M1 j+ }! w* ~2 \/ \/ t
}
8 q% Y7 t4 V/ f5 [- j$ {( Q- j4 p
) M" o' x f" v9 O3 q' p try {
) a) K' B6 s4 ^* ?$ ^ L Heatbug proto = (Heatbug) heatbugList.get (0);
$ `( q- O. B9 ~% D4 o Selector sel = # D6 e# ~) @) t+ j6 _+ W
new Selector (proto.getClass (), "heatbugStep", false);
3 C' K; P& b% A+ Z actionForEach =
# z; w; H4 V. H' I' | g2 O modelActions.createFActionForEachHomogeneous$call6 f8 d4 q# y$ _1 \) q: v8 B8 X
(heatbugList,
. \ j4 f7 f2 o) E" ^0 ], S; u) v new FCallImpl (this, proto, sel,
' U& b5 ?( i; J* A5 x/ e' i. ?$ m new FArgumentsImpl (this, sel)));+ v8 C' }8 i% z ~5 p
} catch (Exception e) {$ u) t% Y. X% o( ~# B! u7 i
e.printStackTrace (System.err);
. g: f$ b* i6 |; T2 e* y }* l0 C- ~9 x) V3 Z" X* F3 U
* v( O5 j, w% |- Y syncUpdateOrder ();
9 X# i- m5 N$ O, p( r8 Z
; r" M3 f: G9 G/ Q" g: k try {. N. k! o8 A7 o* I+ ^
modelActions.createActionTo$message
7 s# I- C6 J5 u H/ }# U" H2 _2 L (heat, new Selector (heat.getClass (), "updateLattice", false));
: ~. ]: l7 P& s) { |- d } catch (Exception e) {: G4 `' _4 v2 H2 q8 O) q
System.err.println("Exception updateLattice: " + e.getMessage ());1 {& c9 _2 o& ~1 ?7 |
}
: `& q j! K: O6 }( O$ @/ c7 b & m, b3 g3 `5 ]. \1 w( e
// Then we create a schedule that executes the
' A4 L# @: [8 S$ x; b9 v. e4 q // modelActions. modelActions is an ActionGroup, by itself it
1 Z/ s% K6 t) N // has no notion of time. In order to have it executed in: ~" v% ]4 y" k3 v
// time, we create a Schedule that says to use the% f- S( R( k5 W7 C% }2 i! X
// modelActions ActionGroup at particular times. This
% G( y- |8 S! u // schedule has a repeat interval of 1, it will loop every
: T- T2 V: T \. U // time step. The action is executed at time 0 relative to
; B7 h$ E$ @3 j N // the beginning of the loop.
5 y2 @* ^! I( F% U: s6 N+ q% l' r" n6 l' f9 H- O3 ?4 F' | q
// This is a simple schedule, with only one action that is7 `1 l$ K2 c" k- f1 e
// just repeated every time. See jmousetrap for more V: j8 H ?) _* k
// complicated schedules. a: I0 j: s4 C# b0 {
4 t+ Q8 H) L! [ modelSchedule = new ScheduleImpl (getZone (), 1);
6 X% D$ \. e; g+ R7 ~1 c* z& F modelSchedule.at$createAction (0, modelActions);
5 R- \5 @6 u( w: C8 R- ~
0 j: v7 b" |' T) Y5 ~3 q: m( a return this;8 r7 s- v# m7 n; V
} |