HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) K q, C4 }3 E9 \6 ?, K
6 Z5 w* n9 ~3 f1 @/ [* @1 j% f public Object buildActions () {: Z U, u8 f5 J( M) _9 K8 A+ H' \7 @
super.buildActions();9 F& @' v1 D5 `
" u3 k- G9 @2 p: Z g* F // Create the list of simulation actions. We put these in
* [( h( [5 u, U" }- N // an action group, because we want these actions to be
0 r$ `1 M0 }) j* X5 A // executed in a specific order, but these steps should
- S8 q$ A/ i/ u1 B0 Q( t1 c1 e) A6 a: M1 o // take no (simulated) time. The M(foo) means "The message- r# r, O# F" a7 [$ Q
// called <foo>". You can send a message To a particular3 u5 K) S6 V" O! d
// object, or ForEach object in a collection./ e0 J9 ?" L1 N2 l
3 C% [$ r# [6 W: n- L // Note we update the heatspace in two phases: first run1 C! Z; D; v& x/ ?; r# z; ?
// diffusion, then run "updateWorld" to actually enact the
- f8 }! \4 q y! T6 ? // changes the heatbugs have made. The ordering here is
7 ?6 A9 U1 |5 J2 N // significant!0 I; F& Q: q. T. a* z' H5 z: W
7 S B! i; j" G5 }: E# \% E' l
// Note also, that with the additional' e5 I. c0 t, X# P$ N: R
// `randomizeHeatbugUpdateOrder' Boolean flag we can
) _ G I7 A! z8 b5 p! ~ // randomize the order in which the bugs actually run
: ?' e1 ]2 x+ u/ Q // their step rule. This has the effect of removing any! {$ Z' }9 B# |5 O; u, q R, L, j A
// systematic bias in the iteration throught the heatbug
% u S3 b2 }- ^; I8 y, ?: r; {0 G // list from timestep to timestep
; W+ H7 r& n$ ?2 O; y% m
; [0 R8 H( B7 \+ F0 T# o // By default, all `createActionForEach' modelActions have9 Y1 T: x$ c6 y" X* u
// a default order of `Sequential', which means that the% p% [) O- b4 W8 s1 n1 D4 ^
// order of iteration through the `heatbugList' will be
2 v! i; x" t5 h7 d" r, w* K // identical (assuming the list order is not changed
0 V- J+ x9 W- q: p8 e0 G' r) `' {1 L // indirectly by some other process).
) w6 @) C+ z: d! F0 S' J
3 h6 V! W8 F% L* U7 H modelActions = new ActionGroupImpl (getZone ());
2 `' {0 _; w& A3 L" E
3 r* j4 O4 `& t+ C: V8 } try {
/ L$ Z! j5 C$ G2 A+ { modelActions.createActionTo$message
; S) d$ ]" [3 U (heat, new Selector (heat.getClass (), "stepRule", false));. h% l# k+ i1 `1 P- d; `) {
} catch (Exception e) {
8 v, w0 f( X n1 W6 R System.err.println ("Exception stepRule: " + e.getMessage ());8 @/ P" E" j3 v
}. K' d7 W2 |& B( o b1 M4 U
# D3 o, o: `9 ]7 m4 j% |) D; _; [
try {
0 P* B' y1 w) M& B3 r Heatbug proto = (Heatbug) heatbugList.get (0); t' ?$ I7 D. o0 a* F; ?* Z" y9 j5 w% p
Selector sel = 8 T/ S2 [; b: g3 \* {$ }; k
new Selector (proto.getClass (), "heatbugStep", false);
+ }9 J0 o' \9 G- C3 G: g! W actionForEach =7 |6 ]0 |& L$ n" m. {
modelActions.createFActionForEachHomogeneous$call0 ~5 ~( A- I8 Y4 }& d" t5 z& n! [ z
(heatbugList,
7 [3 r; M8 \; v/ f7 p4 Y$ Q/ l new FCallImpl (this, proto, sel,( Y9 T& q8 Q8 G2 ]9 V9 i4 Z
new FArgumentsImpl (this, sel)));/ Z' | p; \4 M! ?: p
} catch (Exception e) {" o# n) ]% U: F- _
e.printStackTrace (System.err);# a: L8 S) D. U3 j, U* P3 s
}
9 T# V) y: B: v3 [ M: i/ R% `- \ ; h) V, O% x6 p, D! d
syncUpdateOrder ();4 T6 i. E- @/ ~) M, U% k+ w6 ]! G
u! [# @& j* O/ m% {% `
try {1 Z0 i9 r' J8 {% Y, f& B8 f
modelActions.createActionTo$message
; J" M2 g5 L% \5 Q (heat, new Selector (heat.getClass (), "updateLattice", false));
F$ z0 a4 {( V7 F% C7 e, W } catch (Exception e) {; @6 a; M. }6 t6 w4 r
System.err.println("Exception updateLattice: " + e.getMessage ());. F. J) k* Q! N
}
) |: C$ I! r) I# S% y 8 v( @/ V, h: n% ]( O' w/ V5 _; {
// Then we create a schedule that executes the7 \: A. |0 B* f" x
// modelActions. modelActions is an ActionGroup, by itself it; N3 e/ \! Z; o: k; H2 X' b
// has no notion of time. In order to have it executed in6 X1 j0 e( i4 A2 A. Z
// time, we create a Schedule that says to use the" M3 P' _/ c$ t5 a
// modelActions ActionGroup at particular times. This1 W4 b9 T/ \3 j. ~
// schedule has a repeat interval of 1, it will loop every7 [6 G4 d' \7 j) I( T
// time step. The action is executed at time 0 relative to5 e! V% W: W3 j
// the beginning of the loop.9 z- Q9 U- d8 u4 R* v
( h/ p1 I9 Q6 d, } // This is a simple schedule, with only one action that is
# W6 u$ ?- V; ^8 \9 f' y7 \5 ^& h2 O // just repeated every time. See jmousetrap for more# `' v* _ a4 d+ V9 O9 N5 \
// complicated schedules.# J8 N! k$ {( x
8 a2 @2 ^; Z. F
modelSchedule = new ScheduleImpl (getZone (), 1);
9 i- G# r6 T4 i B modelSchedule.at$createAction (0, modelActions);$ T2 ?. Y6 {; I3 ~8 i
: i' a% |/ Y7 {7 B
return this;
2 _* m, I2 ]' D% b5 `/ Z; | } |