HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! P$ V- u# `3 f n
* D/ ~) I, ^, Y/ H7 c$ l
public Object buildActions () {
" ?$ s+ P! z8 B# |5 ?+ z super.buildActions();% C# S* ^1 l, P! k% }
8 G. S+ Z; u# I. v% W% Y) j( k" A
// Create the list of simulation actions. We put these in) X& q7 p+ i; o3 O. k$ K$ R
// an action group, because we want these actions to be3 U) v; q6 |' L ]: B5 `
// executed in a specific order, but these steps should
# C* W0 D; g4 Q( c3 a // take no (simulated) time. The M(foo) means "The message
$ C0 E) `% ^$ u6 F // called <foo>". You can send a message To a particular
) U( U, D$ F- e) Y/ D# B ~ // object, or ForEach object in a collection.+ u$ w# o; `! ^2 m/ [3 _
# H: V7 u5 q3 g! m! f% F
// Note we update the heatspace in two phases: first run
. P* j; k: D' ~* w4 P) F! O // diffusion, then run "updateWorld" to actually enact the
% Y/ Q3 _; L r3 [' s5 @ // changes the heatbugs have made. The ordering here is) t. F& }: A1 S1 w! ?
// significant!
3 }% y2 B! D" P! w/ X) T) W
; ~1 i' ?) g* b7 p // Note also, that with the additional
* d) u# ]3 ?+ c) {+ ]0 M // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 ]' _5 v# O6 I/ U4 l // randomize the order in which the bugs actually run
$ i6 {/ U" e+ @9 O5 p // their step rule. This has the effect of removing any
' S ^3 n0 i& c5 O7 S* H7 M. } // systematic bias in the iteration throught the heatbug
6 T+ p! ]/ f' w1 C // list from timestep to timestep
4 l; z$ a. I2 k7 v2 S" g" y
. u' I# J! }, q/ j5 D // By default, all `createActionForEach' modelActions have* G7 m( \% k2 m% Q' I
// a default order of `Sequential', which means that the$ M( c: o; r% ?% R _" {4 X+ _
// order of iteration through the `heatbugList' will be
6 G1 z; j+ d' S1 k( T // identical (assuming the list order is not changed
: v7 O+ @2 s" h! m. {/ r# s // indirectly by some other process).$ ^) F$ Q. b. y8 ]5 I
; J" X0 z1 F, t1 ?2 ?+ T( z modelActions = new ActionGroupImpl (getZone ());, |5 a0 v) [- M$ N# h7 u
2 i2 Z9 }; x$ A8 e( P# G/ Q
try {# G, I7 b0 O% D
modelActions.createActionTo$message6 X- p) N4 e7 n, j- {# F
(heat, new Selector (heat.getClass (), "stepRule", false));
5 f1 v0 Z) e; ~, T } catch (Exception e) {2 g8 v8 T3 I) {( R: M( p) K
System.err.println ("Exception stepRule: " + e.getMessage ());- C; T6 b; L! J5 o- L
}% Z% |, s0 h; K. a
, ]! i ]4 o6 e: e, W, @ try {5 c. x6 E0 s2 c
Heatbug proto = (Heatbug) heatbugList.get (0);& W! k8 o7 h+ d3 B N( B3 X; @
Selector sel =
& g* G/ ]0 v& M new Selector (proto.getClass (), "heatbugStep", false);
6 V# ~ c5 X) v! [- x y actionForEach =- [ N, y. @1 |* F, q
modelActions.createFActionForEachHomogeneous$call
! U6 q1 S. _3 W2 v6 A# F) y k5 k (heatbugList,+ w6 O3 `! N; C* E1 B0 W
new FCallImpl (this, proto, sel,
7 A8 S) i2 s( n* l new FArgumentsImpl (this, sel)));
3 A/ [; `4 N( F! V6 K+ a& W3 N } catch (Exception e) {0 o8 ?7 m" r/ l4 H
e.printStackTrace (System.err);' e8 L* d+ O* H$ E# a
}
* `8 x. |# u2 ?1 B ( x6 ?6 P* h) m; a
syncUpdateOrder ();, @4 ~6 B6 I( t/ o' W$ d
4 L `: ^# ~% L/ Z3 H: @1 r* q
try {
4 f/ Z. y3 k8 T; p( y' E2 ~ modelActions.createActionTo$message
^; Q+ [; L( ]7 P (heat, new Selector (heat.getClass (), "updateLattice", false));1 }- o* S( K. h- b2 v
} catch (Exception e) {
; b3 i$ Z& i) }1 j System.err.println("Exception updateLattice: " + e.getMessage ());3 j2 c' v9 V/ |( E' M) n- a
}
" w. k! T7 b4 S) Q: q. ] " }' A2 {: `0 H! S; r
// Then we create a schedule that executes the3 M3 p& ]7 j# L7 s' j" t' C: I
// modelActions. modelActions is an ActionGroup, by itself it i% O. o0 S+ g( s4 P
// has no notion of time. In order to have it executed in5 Q, `& l! n) O, z2 K' W4 f
// time, we create a Schedule that says to use the; k/ ?9 k: M$ x' Q1 _
// modelActions ActionGroup at particular times. This6 y1 s7 P! Q3 P, k$ l4 k4 r! d
// schedule has a repeat interval of 1, it will loop every
" o% X2 y# R. c/ d# W" k // time step. The action is executed at time 0 relative to
6 F9 c, p) Z* v- o2 n( [ // the beginning of the loop.% z$ A1 S! O- n( ~; {9 ?1 A' s
3 k7 y8 t5 V( }' ?5 |
// This is a simple schedule, with only one action that is. Z4 B& K& Z2 ~0 L
// just repeated every time. See jmousetrap for more6 h6 _; q9 Y4 d4 s' \
// complicated schedules.. h8 i) D' d7 m
2 k; y) |3 ?: A6 l5 g) ^" D6 \ modelSchedule = new ScheduleImpl (getZone (), 1);
' Z! r; U) I) N6 y4 f, ?: ?. } modelSchedule.at$createAction (0, modelActions);
@0 ~* j" I, E1 g! C0 {5 Z
5 ^+ s# u5 \! y% u return this;
; c$ x6 D$ |1 z) U3 g5 } } |