HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, `% O% q- G% E: W- J
) |4 F# A* l# h4 K$ Z x public Object buildActions () {
7 A2 c# Z" W, X* @' X super.buildActions();
; ^1 x) d5 }7 {! R! ^$ {
, a, @' ?, N8 `7 e- j7 j' b7 S2 ^ // Create the list of simulation actions. We put these in
2 m- @) f- Z8 } // an action group, because we want these actions to be7 [; }- s! T' i& }0 y+ N
// executed in a specific order, but these steps should% K; z- r2 ~9 \- c( R
// take no (simulated) time. The M(foo) means "The message; ~) c9 O8 P# n1 R1 d+ b
// called <foo>". You can send a message To a particular: |. ^5 _1 H& n* }
// object, or ForEach object in a collection." ?- o1 Y9 _, K% i/ `
- x& r2 L$ L* B, A! R; X
// Note we update the heatspace in two phases: first run
+ O" q6 x" C" t // diffusion, then run "updateWorld" to actually enact the1 ~) s- |$ @8 f& A
// changes the heatbugs have made. The ordering here is
' w7 O. r( t' G( s8 D // significant!) t" p1 t* u# ^3 `
# s' o8 o8 h" I' ]. ^ // Note also, that with the additional
, P/ K* A8 ~6 |, P! ^ // `randomizeHeatbugUpdateOrder' Boolean flag we can& m8 N. q+ N* D8 u* [( k+ h% |
// randomize the order in which the bugs actually run9 L, \3 e( c1 v2 Z
// their step rule. This has the effect of removing any2 }2 [% y1 ?: |4 d$ ^
// systematic bias in the iteration throught the heatbug
5 j) |0 w; `, h5 G# i; i( g // list from timestep to timestep5 u4 T1 s+ h; J4 ?8 k
% L( T) D- n1 w // By default, all `createActionForEach' modelActions have
/ m+ z$ B7 U f: m4 v/ m2 o! H // a default order of `Sequential', which means that the
* G! n* n- Q# m; l // order of iteration through the `heatbugList' will be
& O* ?& z5 |+ ]; D9 A8 Q( ]4 O // identical (assuming the list order is not changed) D J: h' [3 k. T0 P" v: ]
// indirectly by some other process).
, Q- O5 A- u+ H3 }& Q
4 I* t6 `; S% @- } modelActions = new ActionGroupImpl (getZone ());
3 q$ ]( T# Z5 A* |; D8 X5 L8 B3 x( y1 x
try {
* Z7 o& X# T/ T3 N modelActions.createActionTo$message
, @7 u& F( }/ i L8 E. @ (heat, new Selector (heat.getClass (), "stepRule", false));
( T' @3 T9 Y6 j4 L( z" c0 _ } catch (Exception e) {
9 l+ m2 t' i/ a1 P System.err.println ("Exception stepRule: " + e.getMessage ());: s1 \, [1 x6 t
}
8 ^% q3 a! r- [; E. E8 A1 w5 P* X- [$ p9 z; i) T7 q. T5 U
try {3 r9 P% j4 `/ Y G. @
Heatbug proto = (Heatbug) heatbugList.get (0);
/ c x5 H Y- z Selector sel = + m8 t+ d- C3 ]
new Selector (proto.getClass (), "heatbugStep", false);& b) l$ U& i8 V5 c1 Z7 m7 D
actionForEach =
( E7 N) i5 e' m0 C modelActions.createFActionForEachHomogeneous$call. t$ c2 B9 h( B( m6 V# H# l
(heatbugList,
6 p& Q' e: ~1 X4 l3 v' w4 y new FCallImpl (this, proto, sel,- S- M6 G% R e% U
new FArgumentsImpl (this, sel)));
2 y6 a$ X+ D" Y( q* [% ]$ E! i7 B } catch (Exception e) {" n/ \0 K9 y0 y' j) H5 b7 G
e.printStackTrace (System.err);
8 I/ U( I/ q0 m! ~- O }, P5 p1 u/ p# t* ^; N
2 ^: K. b/ t4 `! L syncUpdateOrder ();! ]: H- _7 y/ {. ^9 n, U% ~3 r
) x: S+ b: `& J0 v
try {9 c" T6 t0 k4 I5 N4 _( w
modelActions.createActionTo$message
" n. e& @! Q' z+ u3 q (heat, new Selector (heat.getClass (), "updateLattice", false));, v1 ~# h& B' u/ g( R" R
} catch (Exception e) {# Q3 k% ^. b2 j
System.err.println("Exception updateLattice: " + e.getMessage ());
W7 T: `2 u6 w+ ~# k# z }
, y5 _3 G: O) o* A 2 s) k- j$ h% ~, P5 M
// Then we create a schedule that executes the
9 R- u0 k* s) q) x // modelActions. modelActions is an ActionGroup, by itself it
5 D! r5 G# U/ h/ b/ L( e6 v // has no notion of time. In order to have it executed in
( h2 j6 Y2 a' I- M // time, we create a Schedule that says to use the
9 P1 r+ j0 L; Y+ e // modelActions ActionGroup at particular times. This
4 R3 ?7 Z6 u6 Z8 N: y9 B6 D // schedule has a repeat interval of 1, it will loop every: I* g- U- U# h
// time step. The action is executed at time 0 relative to
& E+ g8 L, d) A // the beginning of the loop.
3 ?7 S5 z7 t* O" l r
) ^. I* W, Q8 ^4 q // This is a simple schedule, with only one action that is% D4 b* [6 \* ^2 F2 m* e. L+ [3 l; h( s
// just repeated every time. See jmousetrap for more
4 Y3 g0 h: I- n7 T // complicated schedules.
- Y) q/ o, T, {4 U+ H : D) Z. `& ]) o+ n( @& D& S; Y
modelSchedule = new ScheduleImpl (getZone (), 1);
, N, @+ ?* T5 ?( z5 S' J modelSchedule.at$createAction (0, modelActions);5 I4 a# `0 q( B7 f: q
4 d" w% h+ U, @ return this;
, x& c+ o+ x+ P! P+ b1 |2 |# @ } |