HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* w/ Z( }" q) J# d& ~2 v8 K4 X* l( o! p( _' S- A, }
public Object buildActions () {
+ ~: d, \& |1 S% M3 n1 d super.buildActions();
4 U2 Q6 `' I4 q, }
6 g2 h8 |9 a+ [$ V6 d/ O* L+ l3 c // Create the list of simulation actions. We put these in
5 P/ [ H$ |1 E" v, f // an action group, because we want these actions to be
1 _, X4 H7 u8 K // executed in a specific order, but these steps should% a6 v- c" j8 x9 s7 j9 o0 k
// take no (simulated) time. The M(foo) means "The message6 Y& L- N8 Q0 j4 d" x
// called <foo>". You can send a message To a particular
7 H `- p& V) J9 e/ U // object, or ForEach object in a collection. c" j2 n l6 {0 E1 P( h
4 H# I& r1 q$ U" t- m // Note we update the heatspace in two phases: first run
7 ~7 j: }, i; w$ U, i6 G- H // diffusion, then run "updateWorld" to actually enact the( m+ v* h) q9 F7 t
// changes the heatbugs have made. The ordering here is4 N$ z# M) o* [
// significant!
2 N$ i% @+ I+ X8 b/ R
3 H$ d1 i7 ^- `8 G // Note also, that with the additional9 k! ~# w4 d' l7 J/ F
// `randomizeHeatbugUpdateOrder' Boolean flag we can
/ `' A( m. u# Q1 V: p // randomize the order in which the bugs actually run
4 d& c% _9 ^) }. ] // their step rule. This has the effect of removing any0 W7 F: M6 P1 W! h1 W; u) L) E$ b
// systematic bias in the iteration throught the heatbug# W4 D3 x6 O( q" J+ _" E. i8 ]
// list from timestep to timestep) x7 m; ^9 j, a# c( |- m9 k
' ^* T2 X- F# z1 P9 ?! c. `. X# O // By default, all `createActionForEach' modelActions have
& K1 N- e+ s7 @8 q# `# J6 D! t // a default order of `Sequential', which means that the/ `2 K# D/ t3 g
// order of iteration through the `heatbugList' will be7 z# N. M$ c" g6 N; @( B E
// identical (assuming the list order is not changed
* v% h- ^4 E- u; I // indirectly by some other process).
. K" X1 ^4 I" p
4 p) g: |( Q! b) A" C) b0 g2 X modelActions = new ActionGroupImpl (getZone ());0 k3 j+ ^- n: u6 N4 V: K+ Z
# F( l) u$ c1 r. n% T( L/ B try {
+ E0 G/ Y; N/ g! p9 _- C modelActions.createActionTo$message
' Y' p; i" {0 c8 [: O) _/ C (heat, new Selector (heat.getClass (), "stepRule", false));
5 _' I9 x4 u& S. v } catch (Exception e) {& i+ J- z3 t+ l4 ~
System.err.println ("Exception stepRule: " + e.getMessage ());; }4 c7 ^* C1 x8 V+ U
}9 ?1 ?; n- H, ?
4 g+ L% h) z' T) N- u4 P0 @1 R) A try {
8 h5 E: ~$ T5 ^7 s- T; Q! M9 ` Heatbug proto = (Heatbug) heatbugList.get (0); }3 g$ `' x$ n8 |- W2 i8 `6 B
Selector sel =
( L+ L( Q6 G/ a5 c new Selector (proto.getClass (), "heatbugStep", false);
1 _4 T" ^& d& A& Z actionForEach =
! ^. \7 X: [* u- k" C* g% D9 W modelActions.createFActionForEachHomogeneous$call# U! t! t1 R; s7 F+ U; e
(heatbugList,. {2 e- K% e4 _2 _, q
new FCallImpl (this, proto, sel,; Z9 C, w: w: J. |$ n1 V
new FArgumentsImpl (this, sel)));, t4 V' a8 ?! g6 B! ?* f# ~+ V- ~
} catch (Exception e) {
! `4 O' f+ P( B e.printStackTrace (System.err);
1 ^5 n0 O, `& f9 ? }
, s( z! o$ y2 n4 d: k7 L W
$ p8 p3 F r) J* Y syncUpdateOrder ();
* P" x' H5 }+ f; E! z7 Y7 G$ W! M6 `8 I/ e8 }( M& A
try {0 G% L( Y) f' Q2 H6 {+ W' e& R: H
modelActions.createActionTo$message
) [+ L1 H" f4 ? (heat, new Selector (heat.getClass (), "updateLattice", false)); X, Y: M {& K e( m
} catch (Exception e) {& h# _! n) e. R$ t3 v/ Q% _; m* L0 W
System.err.println("Exception updateLattice: " + e.getMessage ());; h- y4 F" w6 I; _- e s- Z" M
}
* T$ h! n8 D' C, H & x& ?, G3 m1 j f4 J: P( o
// Then we create a schedule that executes the- P; ~4 g) z+ B
// modelActions. modelActions is an ActionGroup, by itself it
9 p/ H1 r8 R5 z, F0 f% {6 R* T/ |. p // has no notion of time. In order to have it executed in' s" f+ y" z" W [1 E8 b
// time, we create a Schedule that says to use the* f1 S) Z+ F- a2 }$ X
// modelActions ActionGroup at particular times. This( h# v& T- O) e0 ?6 W6 W# x
// schedule has a repeat interval of 1, it will loop every0 n5 O; k/ H4 {9 m
// time step. The action is executed at time 0 relative to4 Q- b. _. G C& Y& z
// the beginning of the loop.
h3 [* V& }0 ?: O: D5 s% E6 ]
; h5 |/ s" v* n& g // This is a simple schedule, with only one action that is
+ n3 \+ Y( Q5 T& U6 r% O+ b1 i // just repeated every time. See jmousetrap for more
* y$ C+ b9 F. H1 n, V! k // complicated schedules.
. A5 z9 p3 g/ O, [
! t6 Z4 v3 n9 ?; a# q) y/ M modelSchedule = new ScheduleImpl (getZone (), 1);7 N Y: |: @$ ]* ]$ h
modelSchedule.at$createAction (0, modelActions);
% f: u! k/ X8 O2 u e1 |9 r; B% }+ F 0 x" I, {) T/ V3 I( B
return this;0 S/ v% K- t6 P2 @, f' f
} |