HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& X$ \4 J2 x. H
+ ~, o4 e3 }" v public Object buildActions () {
`* m2 a/ E. L) f) x; e$ m3 X% f super.buildActions();" t+ M- P, G, d2 A7 j
* a& [ w- ~2 V& d7 U x( x! t
// Create the list of simulation actions. We put these in
+ b. q: W! f! ]& M& @ // an action group, because we want these actions to be
; z2 c5 J H1 j4 P/ J // executed in a specific order, but these steps should% w5 n1 C) i6 {4 c
// take no (simulated) time. The M(foo) means "The message
( y2 J* _$ K2 ^& I' e% c // called <foo>". You can send a message To a particular
8 G; ?$ _% z; _8 X$ v8 t2 J; J // object, or ForEach object in a collection. a5 d# `+ `; _: L# C- _4 C1 ^; c
1 h$ T1 y! C5 F" M
// Note we update the heatspace in two phases: first run
" _* T" {- R4 s- [ // diffusion, then run "updateWorld" to actually enact the
3 Z. x2 A# j" ^ // changes the heatbugs have made. The ordering here is
+ k3 @( m7 J% W: h. h // significant!( U0 b# F9 {; e; q
8 n3 N( {9 O8 _! ] // Note also, that with the additional
; t. C. V, _5 D6 d$ B( w // `randomizeHeatbugUpdateOrder' Boolean flag we can
. C5 m; f% ^$ l" F2 q- i // randomize the order in which the bugs actually run& N' w) A! m) _7 A
// their step rule. This has the effect of removing any" w3 |& g/ g) @, ?; ^
// systematic bias in the iteration throught the heatbug
1 S6 H2 z, ?( w. q2 f6 Z // list from timestep to timestep
) M9 q6 X3 f+ h% ~. Q5 h* ~
' j/ b8 w8 I5 c/ f z // By default, all `createActionForEach' modelActions have
& W) o7 p/ f! k6 x7 I! b5 @8 ^, @ // a default order of `Sequential', which means that the$ N! s& ?5 X5 x2 x8 v
// order of iteration through the `heatbugList' will be. L5 ^/ Y3 B1 W# K9 }* g/ s
// identical (assuming the list order is not changed$ r; [3 A. |0 y
// indirectly by some other process).
7 u" o, A- y# E: b$ _, m+ e
. @$ ?& }5 ~4 {0 _! w modelActions = new ActionGroupImpl (getZone ());
7 ~; R% p ?% R, P! I% K6 B
# \7 x+ G: x4 j try {$ N: l; B% k5 Z4 h9 Y5 t. E( @
modelActions.createActionTo$message* v* u3 q7 p, X% X4 V2 E \
(heat, new Selector (heat.getClass (), "stepRule", false)); K! R0 O' ^& i: P
} catch (Exception e) {7 t$ v* \8 K& t
System.err.println ("Exception stepRule: " + e.getMessage ());
V6 |: v. ?/ P. z, F6 ^ }% p0 }4 D( ]# H; Z X( d. s
5 K( M* ]2 a0 x try {
4 q0 ~$ k- ]$ z d Heatbug proto = (Heatbug) heatbugList.get (0);
. R0 ~# H6 w: G' c: T1 C% ]) B( Y Selector sel =
, M6 y5 \2 l% |! c new Selector (proto.getClass (), "heatbugStep", false);
1 s+ w1 S ] W. q actionForEach =/ E" N- e- o( t1 ]& p7 g* S' J i
modelActions.createFActionForEachHomogeneous$call7 M9 N! d$ y+ k$ Q# B7 V3 ^
(heatbugList,6 e& Z2 F* w% ~, |# R% x
new FCallImpl (this, proto, sel,; A0 z, ]& n8 x9 U% O8 `" ~
new FArgumentsImpl (this, sel)));
" F1 H- o j' l/ H$ Y2 {! d } catch (Exception e) {
5 X2 D6 W5 p" _ e.printStackTrace (System.err);
& C( A, }9 \* Y- ^ }
5 C' s. C* y+ Z& B- ~ , m N# x$ Q4 R5 ]8 e' u
syncUpdateOrder ();
) P3 N* [ o# y! H
" r- [1 ~6 o9 L! r& x try {
9 ~. |' }5 @2 R) Y# L modelActions.createActionTo$message 1 G& L1 ~! d! z2 G, i. y
(heat, new Selector (heat.getClass (), "updateLattice", false));9 J( ]7 @4 n( D) T' t. E5 P
} catch (Exception e) {" i, F' I6 Z( Z, C/ k( r
System.err.println("Exception updateLattice: " + e.getMessage ());! x4 u; q2 Y g4 x$ g' o' e
}
5 L* |' S2 c; t# `
8 n$ `, C* j+ e. H$ c0 S // Then we create a schedule that executes the% R# t4 X2 u( A# W" \* F! C
// modelActions. modelActions is an ActionGroup, by itself it
$ ` K! r0 {; y // has no notion of time. In order to have it executed in0 h# j0 B' z9 l9 r! ?! \. [1 e
// time, we create a Schedule that says to use the. s u2 q/ S' _& s( _2 G2 _
// modelActions ActionGroup at particular times. This, V5 M- j( t: s% g
// schedule has a repeat interval of 1, it will loop every
; J& d) H8 ?) L* z8 | // time step. The action is executed at time 0 relative to
. ?' H2 y; e& w' I7 ?9 U8 a // the beginning of the loop.; ^+ i3 X0 w+ m9 z/ i& \
: U. j: M2 i/ x
// This is a simple schedule, with only one action that is
$ `- T* i! r" \' H // just repeated every time. See jmousetrap for more' Y5 X2 \/ h! B
// complicated schedules. G% E8 c" Y. z' O. u7 E' i' Q
" D! O0 `& ^3 H, S/ f; c& @- t modelSchedule = new ScheduleImpl (getZone (), 1);
. a8 l. x& Y* V' } modelSchedule.at$createAction (0, modelActions);
1 f$ U. c( u8 x
* x% s; n& b/ d; i( x/ v$ W return this;
! v% Y- q9 q# ]; O h } |