HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. ?6 ]. @$ s6 B1 M- b; K4 d
0 @# `2 k2 f# a+ C( I$ g/ F
public Object buildActions () {" q/ B( c; h: V8 l
super.buildActions();
2 i+ b0 I1 b; f6 G+ s6 N
- d5 m0 U: J! }" }6 u& n$ \ // Create the list of simulation actions. We put these in
& |% s: u: U+ f6 O // an action group, because we want these actions to be" {/ I* @8 f/ ?
// executed in a specific order, but these steps should% A% H( e+ |: L) h. r
// take no (simulated) time. The M(foo) means "The message
5 h* D1 ?' M1 b- V0 J0 F/ i1 P // called <foo>". You can send a message To a particular
% ^# S' a9 a& J9 c/ u$ ? // object, or ForEach object in a collection.2 k4 t7 _# N0 T9 P6 Q3 Y5 w
* ^ X/ Y0 B$ ]# S+ r
// Note we update the heatspace in two phases: first run; m% ]) r+ H( z6 H- r z$ X% o! d4 k
// diffusion, then run "updateWorld" to actually enact the$ Q" g l' k. R1 }* Y
// changes the heatbugs have made. The ordering here is
# b" x3 q) E# O& R' A- X. z5 D5 l // significant!
5 O. Z7 D+ W# D5 ] # v, O% O) z- ?5 M" e$ c
// Note also, that with the additional4 A- ~* c' w% Y* y% _
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. _, s5 {6 D* s0 U // randomize the order in which the bugs actually run
2 H% s& x, }, N // their step rule. This has the effect of removing any! J% `* w, p4 L R
// systematic bias in the iteration throught the heatbug: k0 X/ r1 n2 A( e3 z" J
// list from timestep to timestep7 [7 ^& G# q: u# a/ H3 f/ Q
6 N& Z$ I$ h7 y5 e. C3 e // By default, all `createActionForEach' modelActions have
7 R2 N! W& V" m" f, P* J // a default order of `Sequential', which means that the
; f3 }1 o7 b* o% w& {9 R5 U // order of iteration through the `heatbugList' will be: T# z x+ J. P+ @$ o
// identical (assuming the list order is not changed8 k; i! y c) u }- w
// indirectly by some other process).
4 |7 |- i$ `, C. x
4 F" l+ k8 H, y# Q modelActions = new ActionGroupImpl (getZone ());6 A$ Q+ ]/ e) ]* F3 h t
* W2 l) }6 q- ~, {* T# J0 G$ O
try {
$ b& i6 T( B- Q/ _; e8 F& _ modelActions.createActionTo$message/ `$ u! L8 B+ p5 T6 N" L) ~) l0 T
(heat, new Selector (heat.getClass (), "stepRule", false));
- z h5 ?! C; q } catch (Exception e) {2 \+ D8 S) X' c6 ~2 S B I
System.err.println ("Exception stepRule: " + e.getMessage ());
% m) z1 D% y+ g5 R, k9 P }8 o6 J! K3 ~, T7 X- Y/ F! m W
3 b9 V' V4 z* l$ Q; A
try {
- C2 k+ r) y) S. J! o3 d7 d Heatbug proto = (Heatbug) heatbugList.get (0);( v+ h0 ~4 U5 I
Selector sel = $ k) P0 Y9 Y9 F0 @, u
new Selector (proto.getClass (), "heatbugStep", false);
/ U" d3 I4 ^5 j6 n7 V- \ actionForEach =
1 c* `7 z3 C* S modelActions.createFActionForEachHomogeneous$call1 c5 j( r' t: X {- r
(heatbugList,
7 _; F$ [, @- ~; `- v new FCallImpl (this, proto, sel,
" Z3 A& E& Y, N2 c new FArgumentsImpl (this, sel)));
) r0 e4 r" E) N0 H } catch (Exception e) {6 K1 K2 W( s, z2 k
e.printStackTrace (System.err);; {% o) I; M* B
}
' r/ Q2 J# _0 ]. ?" z- L ; K8 ?( Y0 Y- S2 R) f
syncUpdateOrder ();
5 J( c8 ?" }" w" N V7 j. v0 {5 Q9 u: }3 e- c
try {
( e7 @1 ~/ {; ?6 s8 \ X, z- P modelActions.createActionTo$message
8 P# E4 X1 \$ C- O9 I+ ]3 ? (heat, new Selector (heat.getClass (), "updateLattice", false));
/ N7 M, K: L. p* L# L$ n; P B, ] } catch (Exception e) {
1 K r. }5 r- O8 |- |- h# X System.err.println("Exception updateLattice: " + e.getMessage ());
9 g* v4 }3 s1 l6 l* s; E( X( m7 D9 b }) X+ _) G1 {/ |, g$ v4 {0 R8 R B" }
# f, i" C7 c0 {4 y- | // Then we create a schedule that executes the
/ q8 P4 _' i3 w' ^+ Y3 k // modelActions. modelActions is an ActionGroup, by itself it4 _: |+ D d* `- O
// has no notion of time. In order to have it executed in
7 O$ _4 k# |; u/ t- D2 W& P) b // time, we create a Schedule that says to use the
2 \' Y+ w/ @# b9 y; v // modelActions ActionGroup at particular times. This
( m% T* j2 @' v7 _- Y) k // schedule has a repeat interval of 1, it will loop every& E; f2 u B' Y3 w. U
// time step. The action is executed at time 0 relative to
+ {% U4 o5 W1 c' Y/ B! a // the beginning of the loop.
! \1 k3 O7 B3 x6 v: r5 T
: g4 ^3 U* N4 y5 m7 I( o, Y // This is a simple schedule, with only one action that is2 }6 H6 _+ X2 ^) g
// just repeated every time. See jmousetrap for more
" A. T4 n3 b3 W, n5 f // complicated schedules.0 p- }9 Y) p- A2 `) D
1 \0 c' y* J- v( J: q modelSchedule = new ScheduleImpl (getZone (), 1);4 C! `3 R! {/ S
modelSchedule.at$createAction (0, modelActions);9 `4 w6 l/ N; V& A3 b. D# L1 l
4 g y3 v% q$ |% ?2 }# Q1 Y5 _ return this;
; Z) F3 x8 ?4 C( _1 k } |