HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( `/ T: S5 x3 ]8 V, J; |7 \
/ R! k3 T8 h: [/ b public Object buildActions () {# @! b- N4 L, q% B! Q0 L
super.buildActions();, ~% u7 ~# M' }) F
; j& ? n% V I // Create the list of simulation actions. We put these in
- i$ c" j- x. _* O; _9 c // an action group, because we want these actions to be
* p* F% U8 s; s // executed in a specific order, but these steps should
% B- A2 ^; ^$ h7 a8 i // take no (simulated) time. The M(foo) means "The message/ K: C- I1 l, K5 R
// called <foo>". You can send a message To a particular; |! D7 D+ X1 j+ W( _
// object, or ForEach object in a collection.
7 k7 M5 ?. b$ u' G& Q G1 `; U/ { [6 A5 J
// Note we update the heatspace in two phases: first run
& l' k e: v8 }7 ~ // diffusion, then run "updateWorld" to actually enact the
, ?! h6 V& r2 w& A // changes the heatbugs have made. The ordering here is
+ Y w! z8 s N0 S3 I, n* M // significant!
5 M: }5 i: E" ^8 ~3 Z4 Y [
& E$ A6 v( ^4 W6 ^* s1 W // Note also, that with the additional
- R5 V( v$ ?; A* c // `randomizeHeatbugUpdateOrder' Boolean flag we can B: E) j7 E7 P
// randomize the order in which the bugs actually run
# q9 k# N+ j* R/ |/ G" T // their step rule. This has the effect of removing any/ n! J+ o% F+ I
// systematic bias in the iteration throught the heatbug5 b5 {# H/ C4 k7 t# E
// list from timestep to timestep' y+ s( j' T. S! h- q( Z. ?0 N
4 q7 {; W4 L3 `8 `# [2 ~ // By default, all `createActionForEach' modelActions have. V) E" ?9 D1 A& ?( G+ T9 \# y
// a default order of `Sequential', which means that the8 W, N6 m( v: p/ Z- o
// order of iteration through the `heatbugList' will be
. P# S, T1 y3 R* i' a( }+ z // identical (assuming the list order is not changed& {; T# q+ M) W) v0 r% o; ^ o+ L
// indirectly by some other process).2 ?' R; N# s3 w4 r
& }3 |9 @* ^6 d/ c$ R1 g3 d modelActions = new ActionGroupImpl (getZone ());
K6 X! M# B% x- W5 D1 h! S; [( P5 a+ @7 c" i. Y( F8 i1 {) E- p
try {
; o0 n: ?- s# [9 y1 o modelActions.createActionTo$message5 [: w$ Q5 _$ |( d$ n2 z
(heat, new Selector (heat.getClass (), "stepRule", false));
( [% Z% S# C6 Q( ]& X } catch (Exception e) {
, P4 s0 G& ~3 E' M( K4 n( T) F" I System.err.println ("Exception stepRule: " + e.getMessage ());
7 }! T0 D2 n0 f+ C1 K# f% e* K }' F* |. w& d! c6 E5 U4 ~/ c( P7 c o
1 U0 J1 {6 z$ k
try {4 F5 ~2 S& F$ P* Z5 X
Heatbug proto = (Heatbug) heatbugList.get (0);
L9 V @9 J ]( U3 M3 D Selector sel =
% }8 t! C7 d T$ v2 Q* ^4 p new Selector (proto.getClass (), "heatbugStep", false);" e1 [' D( `6 Q- k/ }! x
actionForEach =# @! `4 L0 `( O8 b. a1 K; Y
modelActions.createFActionForEachHomogeneous$call
8 G: v& c0 h# I4 w9 ]+ x (heatbugList,
3 r2 q: F$ b- A" R6 J new FCallImpl (this, proto, sel,
# M8 ~0 F& F- e2 n# Q new FArgumentsImpl (this, sel)));9 l2 R* q( G! y( T6 J5 [
} catch (Exception e) {% \' F* E' V8 ]
e.printStackTrace (System.err);1 x, o1 o8 K3 a+ K3 U9 G. c
}
& m( `. \/ l& f8 P + ^/ q4 a/ i6 g* T4 v
syncUpdateOrder ();
1 m- i/ e& q' o) X, }0 r
, e3 \2 N* O" N0 \ y$ j try {
2 e5 a" M6 a# x9 r5 h$ E+ x3 b modelActions.createActionTo$message
* e; h% [! h6 ?/ g3 H S (heat, new Selector (heat.getClass (), "updateLattice", false));
) S7 z3 U1 b- F1 u2 Z } catch (Exception e) {
1 K) ^2 _! m* c! N8 h( X System.err.println("Exception updateLattice: " + e.getMessage ());
, N) N- u6 u# e& F; ?7 Q7 j }
: H, |; ?- I. R* w+ Z: q, n" }: _9 n
: w7 [5 H2 t. d- E q+ L7 P7 Y1 l // Then we create a schedule that executes the
/ M* J7 a+ G" r% {+ }' { // modelActions. modelActions is an ActionGroup, by itself it
5 u V a2 j0 L0 n0 u // has no notion of time. In order to have it executed in
, U6 n" t. j2 h5 Z( J4 B8 z/ A- Q // time, we create a Schedule that says to use the( f* t5 b+ y. A0 l# p
// modelActions ActionGroup at particular times. This
7 K4 U, S# O! }& N- t% x // schedule has a repeat interval of 1, it will loop every
% C5 k' h; k9 J // time step. The action is executed at time 0 relative to
; U$ n: V% X- [+ C // the beginning of the loop.
B4 b. o2 I9 j0 Q" E& v+ U. W: N, w! Y1 l0 `$ S+ L$ [# @: h, X
// This is a simple schedule, with only one action that is
, L5 G1 B: a% x- O5 z // just repeated every time. See jmousetrap for more5 _! s% n/ H8 ]# z+ _( [( p
// complicated schedules.
: h6 D3 u; |% N5 E- T1 f $ ?- M; G3 N1 p7 @ _6 l1 p, ^. ?2 p- Y
modelSchedule = new ScheduleImpl (getZone (), 1);
4 y& ]: Z) W" S) L$ @. U' G modelSchedule.at$createAction (0, modelActions);& Y* w% M8 g1 ~7 j! R' }
9 A# e0 I9 N7 P- u$ ` return this;6 `3 a8 v- e# u+ W+ }1 f
} |