HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; ?* P3 x+ h8 G
9 t% V( h( v- ~4 t9 a: z8 D. W: E/ j, D
public Object buildActions () {4 u9 f w, \$ P! R( a
super.buildActions();* _. d. ? d9 h: W! w
, I% j8 r6 E$ [; ?' l // Create the list of simulation actions. We put these in. Z$ V, V3 W0 x, |- @& x) q
// an action group, because we want these actions to be
" N$ p3 l! y9 P8 L; Z' R: e& S // executed in a specific order, but these steps should
% i1 R$ x" ~& G/ q // take no (simulated) time. The M(foo) means "The message
3 X1 z8 d- R F" A6 o' Y+ y+ h // called <foo>". You can send a message To a particular
3 y" w# @$ L- K // object, or ForEach object in a collection.' n5 d+ r& {, x' V+ I8 x
& k6 G+ a3 w# A# |- } // Note we update the heatspace in two phases: first run
" Q* S7 v( B& R // diffusion, then run "updateWorld" to actually enact the
- q/ M% K4 ?$ q# b8 T- i // changes the heatbugs have made. The ordering here is1 b$ a! x* X$ }
// significant!
) a+ i5 W! n% p v! I
3 y% N- \8 M6 h' \5 | // Note also, that with the additional
+ b3 e- Z: ]2 z% t/ D% Q7 D // `randomizeHeatbugUpdateOrder' Boolean flag we can, {; }( U# @* d! F1 R' Q M% X
// randomize the order in which the bugs actually run6 j' x& @- n% a" i, c9 \/ Z# Y
// their step rule. This has the effect of removing any K! X. O9 R: q; |) P" T# f. S! ]
// systematic bias in the iteration throught the heatbug
' W$ J) h5 |$ P8 \) r( U; m( V2 e // list from timestep to timestep
6 T+ C) G# M, J+ _2 X ' s; R, w3 \( ~& u/ X7 b" n2 N4 p
// By default, all `createActionForEach' modelActions have8 L+ J; V; g6 e7 E+ J) j1 g! V
// a default order of `Sequential', which means that the
: @; g9 U( w9 x- @+ ? // order of iteration through the `heatbugList' will be0 s2 O m2 R+ |0 z' S/ d
// identical (assuming the list order is not changed
# M& R0 {: b3 }4 O // indirectly by some other process).4 U' I5 V W* o$ [( ^
. e) E3 b4 ^/ T# D5 J0 ]
modelActions = new ActionGroupImpl (getZone ());
/ H. N( G G; D6 n
$ g7 Y, r% F# @ try {8 A- }" O6 D# ]4 E
modelActions.createActionTo$message
% Z/ Z; k& v7 r- w2 N& ] (heat, new Selector (heat.getClass (), "stepRule", false));7 ^$ v7 w; T$ O* U: j# s
} catch (Exception e) {9 F! b* _- e3 Y; L$ i
System.err.println ("Exception stepRule: " + e.getMessage ());: X' {3 u1 U4 f
}3 ^1 P( E) }5 ?3 \
( z# l8 B- F2 Z- H
try {9 q" ?2 u) G- q
Heatbug proto = (Heatbug) heatbugList.get (0);0 T3 Z: V$ r3 L. P3 X4 |
Selector sel = + O% [) f$ d& e' x" h0 q+ i6 f
new Selector (proto.getClass (), "heatbugStep", false);, t% N7 D. m( \+ R; `% J
actionForEach =
3 y' x" U1 `2 G, K modelActions.createFActionForEachHomogeneous$call' d+ J1 C% C- j1 _& W. ^9 ]1 E' | J! F
(heatbugList,- r( p5 O2 c* S" n8 _8 g
new FCallImpl (this, proto, sel,( B) [ h" W8 s, F; [! M
new FArgumentsImpl (this, sel)));
) }: W+ a+ t9 Z } catch (Exception e) {
. t+ v4 S' I6 H; P; u/ ^ e.printStackTrace (System.err); y% u, B" M" G5 {& N7 A
}
/ v( I$ W0 W1 U0 `+ _) J; ~. j 3 ~1 @0 Z- o+ d$ Q) Q5 ~6 n
syncUpdateOrder ();. u7 I. ^$ |. s# P
W3 ^/ ?7 ` a% T8 Q% u
try {9 q& Y) E# Z* \+ w; ~5 v% C6 O8 H5 J
modelActions.createActionTo$message
9 Q; g; f* w4 R: | (heat, new Selector (heat.getClass (), "updateLattice", false));/ m. } \: V$ i; }" C9 {( m
} catch (Exception e) {
1 Y* e4 C0 }5 J3 u' p) g1 y N7 L System.err.println("Exception updateLattice: " + e.getMessage ());* W/ W9 K5 `. o1 _7 t& |
}9 K7 ~% Q. {! n" {
9 S! v* M( t/ h6 _9 x6 J
// Then we create a schedule that executes the+ |+ ^/ D3 a5 F/ b) I$ \
// modelActions. modelActions is an ActionGroup, by itself it
. i5 D1 p+ r5 \! ^; C" P // has no notion of time. In order to have it executed in
1 v3 G/ h' G) q/ S @ // time, we create a Schedule that says to use the ?' n" K! {, l0 [4 q9 i; K% C
// modelActions ActionGroup at particular times. This
5 _; M$ I2 }$ w# H // schedule has a repeat interval of 1, it will loop every
- G6 I% @- \5 S // time step. The action is executed at time 0 relative to3 |. q7 a+ T) \" N& _
// the beginning of the loop.
$ f9 r; o; N3 Z+ j5 \. | ?7 c6 P5 A, G& Z6 }0 H) @1 K1 q
// This is a simple schedule, with only one action that is8 K2 g! C0 j0 c
// just repeated every time. See jmousetrap for more( ^7 r# D5 B4 g+ |
// complicated schedules.
K' }% V) g7 t6 l9 \6 u
" T, _! i6 r0 Y# Q' h4 M modelSchedule = new ScheduleImpl (getZone (), 1);
9 }4 C! L" [+ X* ^7 l modelSchedule.at$createAction (0, modelActions);
6 Z4 }+ I* u/ f6 j R/ u : p ~( d5 i/ @, f' Z
return this;
6 ?! Y% P* ?6 Q2 }! m& r& v6 r } |