HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; q Q# ?" K: B- `- S8 X; D4 ~5 h' a* d1 F* G& S. G
public Object buildActions () {
8 c! f9 _; q! n' `1 H super.buildActions();* l# C* [$ `2 d0 @
4 ~+ o% } s% Z7 G% x: o
// Create the list of simulation actions. We put these in. P& K4 K! Y7 e8 s* S
// an action group, because we want these actions to be1 g3 j% O% |6 B8 U$ x D$ O% e
// executed in a specific order, but these steps should3 Q0 g( ?8 G- t5 c
// take no (simulated) time. The M(foo) means "The message
. I6 W3 T# w4 _, q6 m2 ? // called <foo>". You can send a message To a particular
4 d1 F3 e! u9 n: x# a" M // object, or ForEach object in a collection.
) c1 ^- K" F5 w/ j 2 w4 p. s$ M: u" J, r3 z
// Note we update the heatspace in two phases: first run$ \8 Z$ [5 j9 w) |
// diffusion, then run "updateWorld" to actually enact the
- T; z) H! W) t, i, r+ A // changes the heatbugs have made. The ordering here is
# ~* u2 K7 L" n) J7 j // significant!
% n2 t& r3 y) o+ m" A* r, E
6 }4 e# J( g5 F- \& M2 r // Note also, that with the additional; p& E" w- c* R/ v8 B3 S
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 _' t! n1 c# }0 b$ Y
// randomize the order in which the bugs actually run7 K+ E% o" ]: a. A2 a9 D
// their step rule. This has the effect of removing any
$ n; X+ L2 L* \! e% e* a1 U // systematic bias in the iteration throught the heatbug
( B! A, l% t) ^9 v1 W; H // list from timestep to timestep+ \, O# w K u/ j
' z2 g0 z C2 J. F7 ?0 ]2 T // By default, all `createActionForEach' modelActions have
" f; U8 g5 s+ N3 b/ a9 r9 A // a default order of `Sequential', which means that the/ P$ g$ S7 E( m5 ~7 [2 T/ ?
// order of iteration through the `heatbugList' will be
; t7 j0 f, i8 H- e: F+ p& G // identical (assuming the list order is not changed$ p! \. @- m( v0 j0 N
// indirectly by some other process).
% P+ M0 B' \* t3 w0 r- d ! q& T# m* l. r: y( m8 J
modelActions = new ActionGroupImpl (getZone ());* x+ z! r, j* R& [! p6 S
/ a2 z4 V6 N* q) w! M try {
$ G! n6 S& q! w* W) V+ J0 N# J modelActions.createActionTo$message( z- u! X% t. G/ Q4 n
(heat, new Selector (heat.getClass (), "stepRule", false));
( P* b8 o* ^& U7 e4 t2 g } catch (Exception e) {4 O& P$ y+ S- Z# z' [
System.err.println ("Exception stepRule: " + e.getMessage ());0 d* W$ Z, V0 ^- \4 \
}
1 j4 u' G- T7 g, F; y& K. n L4 \) h% D6 @0 n
try {# E, m v7 j P
Heatbug proto = (Heatbug) heatbugList.get (0);
2 c/ x. Y5 B! C3 ]# f1 ~7 k Selector sel =
) V2 Y M% ~3 H new Selector (proto.getClass (), "heatbugStep", false);
8 C2 {- i4 l5 t* F3 Z6 B6 |; H actionForEach =
/ k" w5 \% o6 @, ~ modelActions.createFActionForEachHomogeneous$call* Y+ k( h* t5 \1 F
(heatbugList,( G. M. @* D" g1 ?
new FCallImpl (this, proto, sel,
2 N1 T+ ~3 k1 G* D# V2 }" ] new FArgumentsImpl (this, sel)));8 G# ~5 ?9 Z- h0 l! N
} catch (Exception e) {
) }" o; Q: {- w e.printStackTrace (System.err);, ^4 F1 F: K& Y( Z* y. K8 y+ n
}
! H3 R0 b1 g; }! E. _1 i+ j" K" t3 A
3 @5 [; Z; Y5 h7 D- J syncUpdateOrder ();$ n, P) S2 v2 D" l6 Z
5 ]( w1 I T2 T9 ` try {$ V! I0 ^; I, P5 i& ~9 W* O' B
modelActions.createActionTo$message 0 e( p' G) A0 [2 A/ }* `! a5 O
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 H5 Y O7 @( f/ O, o+ F1 J: R2 G% T } catch (Exception e) {5 j9 o/ C) x% M8 [# e9 r
System.err.println("Exception updateLattice: " + e.getMessage ());
/ f8 f2 U! |9 s" V- V }
- `% q$ C# L/ b& |5 |% l % d6 Q. X: A7 ^+ u0 n
// Then we create a schedule that executes the" `2 B* L) E/ w
// modelActions. modelActions is an ActionGroup, by itself it
, x5 y; ^/ d, c$ L) ~ // has no notion of time. In order to have it executed in
. y1 R* k% j( K3 c // time, we create a Schedule that says to use the# o* U9 I: R9 @. s
// modelActions ActionGroup at particular times. This
* M0 W1 e! N# E4 Q, V // schedule has a repeat interval of 1, it will loop every
# b8 B9 g1 e. l0 V& M // time step. The action is executed at time 0 relative to5 T8 y! o4 {. i: W! E5 ^
// the beginning of the loop.+ ]' p ]! o5 p, V; o8 U- A! l
, f3 b" B- h, v3 s // This is a simple schedule, with only one action that is# m8 g o0 k4 k0 @* v" C* A# p
// just repeated every time. See jmousetrap for more! s% ^$ u3 c: ]* }, r9 V* p
// complicated schedules.
7 j( F" h' X6 u- X8 x" h ; {( Q9 q# L; D0 x, b( c
modelSchedule = new ScheduleImpl (getZone (), 1);+ H$ e1 @' ^( w: U' {0 \& A5 ]
modelSchedule.at$createAction (0, modelActions);
5 K, ^3 b0 t, q4 s
; ]1 A9 P2 u* t* x& q return this;
4 ^9 W. B+ A1 _- Z- Z$ Y } |