HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 ~0 w. m: i& ?8 d5 E- R q3 D7 T. Y* z; g
public Object buildActions () {+ `) h5 M5 b4 V0 L
super.buildActions();4 }1 H* F" B% ?' b$ ^& _
; e9 A# x2 g/ p
// Create the list of simulation actions. We put these in
1 h# x9 B) a0 m0 h2 h7 Z/ H% b // an action group, because we want these actions to be
; p4 D% t0 q, e/ q // executed in a specific order, but these steps should1 Y6 C* t" m6 b. @+ R: x
// take no (simulated) time. The M(foo) means "The message
) v ]. S, o1 ^: s) g // called <foo>". You can send a message To a particular
6 ^$ f: B6 }3 c7 u! f- X8 m( f6 {% p // object, or ForEach object in a collection.
2 P* l$ |& s N" p/ v+ W9 u 1 O( c/ P5 v! V4 w
// Note we update the heatspace in two phases: first run
. h: T" o% e. k, j* B6 Z // diffusion, then run "updateWorld" to actually enact the
3 T6 `( A7 A: a) g( L% m2 ] // changes the heatbugs have made. The ordering here is
. }8 I U% E( S# E; { // significant!' ?0 b5 E+ l) p0 ~4 a8 m7 O* {
8 |% d6 f8 c0 @ J/ c9 U/ X+ ], ~7 s // Note also, that with the additional
( R1 V b" T( f // `randomizeHeatbugUpdateOrder' Boolean flag we can
% W' O4 L) J5 q // randomize the order in which the bugs actually run9 R" m9 t3 {1 w, `! L$ W, ?& N
// their step rule. This has the effect of removing any
% b& _7 U- Z8 L" @ // systematic bias in the iteration throught the heatbug' } e8 ~ }3 N+ B
// list from timestep to timestep
, x; x Q% F7 C# H
- \4 C% Y8 ]2 m% d- W // By default, all `createActionForEach' modelActions have
4 d# e5 x6 P- K3 u // a default order of `Sequential', which means that the
( z/ W- O% i! Y& |/ I6 i) k // order of iteration through the `heatbugList' will be
* y2 e" i1 o2 p // identical (assuming the list order is not changed T- I3 {% i7 w
// indirectly by some other process).+ S# [ O/ C" P
a5 u2 a) E( i" S R modelActions = new ActionGroupImpl (getZone ());
# ^( q6 X( _# C. I2 ]
% e3 l- C( v W `* ~+ a$ D0 a try {
4 l- V/ d9 g: n% L# Q4 g modelActions.createActionTo$message( m5 W# H0 s2 N
(heat, new Selector (heat.getClass (), "stepRule", false));
; f7 S0 t$ f) ~, U. y0 l } catch (Exception e) {* K# B9 M. B" B2 X- V
System.err.println ("Exception stepRule: " + e.getMessage ());
. w) d3 V8 a/ G6 e6 |# b }/ u, {$ |1 w( X! F) e9 [" V
& J* d' q4 c" }6 y6 N# x# l9 v try {0 N& j9 a K5 ]; h
Heatbug proto = (Heatbug) heatbugList.get (0);8 r% C7 |& g; q9 i
Selector sel =
$ E$ M. \$ {0 n7 Y; W" @5 Y3 \ new Selector (proto.getClass (), "heatbugStep", false);
* A9 q' m, F/ L8 w, x: r+ f actionForEach =
# a( i3 y3 F! y1 d; y6 J modelActions.createFActionForEachHomogeneous$call
& U4 D4 K) g% w- ^' e/ E (heatbugList,
+ [( t# F, @$ V5 U& k# m new FCallImpl (this, proto, sel,
2 x$ H; q& R- D& A" \7 E' k w5 U; h new FArgumentsImpl (this, sel)));& I1 t2 m3 c9 T# p7 ?/ b
} catch (Exception e) {9 {% d1 [& ]& c$ u1 @) x6 i% M
e.printStackTrace (System.err);
9 B& y% h3 _& V1 {# G1 m7 Y }
) [ G7 r3 y: ^
$ O9 P% O, v. T* {! w8 L syncUpdateOrder ();5 o" x% U! }; h8 E* M1 L7 l$ o, M* X
: _! s& i% v: H' {
try {$ K$ \9 |* T' f: {5 S! n+ [8 i
modelActions.createActionTo$message ' Q9 i9 g, ~9 L* H
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ _! I# k. T8 f4 g0 i) R } catch (Exception e) {' |* M) }# Z7 f7 s. g) r
System.err.println("Exception updateLattice: " + e.getMessage ());0 ~+ b0 N! `% f, [
}
* E0 b# f" m3 \9 H2 ]( l
3 L# }: F3 z6 M5 b // Then we create a schedule that executes the& \- r& b! X2 c: M
// modelActions. modelActions is an ActionGroup, by itself it
, j' u5 g0 Y# N! J& o; S // has no notion of time. In order to have it executed in
- j# Y+ u$ `* f3 k1 c* x* | // time, we create a Schedule that says to use the; o. P7 Z* D+ P+ K
// modelActions ActionGroup at particular times. This. a8 j7 W5 F- O5 }& B8 @
// schedule has a repeat interval of 1, it will loop every1 v% Y. F ^8 x8 D+ x& ]
// time step. The action is executed at time 0 relative to+ x. O. F( ]6 A$ j
// the beginning of the loop.
. d' n) R- r* B, Z i5 ^1 ~9 E$ c' q1 f. ~
// This is a simple schedule, with only one action that is
: M1 ]% C9 Y! E* L+ E- m // just repeated every time. See jmousetrap for more
1 s1 r2 |# x+ _4 i$ V& z // complicated schedules.
% K' I" X+ L, j) R( `
: t1 q: ]8 v/ ~) I z4 h" G( e( C modelSchedule = new ScheduleImpl (getZone (), 1);
4 v' d e0 i, P+ B$ M modelSchedule.at$createAction (0, modelActions);
: {* }0 O" p- N / Q$ t' V# y' b3 V" L1 ~
return this;
! z+ L+ Y8 O: K# [ V- q } |