HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! q" Y# |% s3 |8 s2 Z
# A: c8 P$ ?6 X1 L1 Z7 o% ~" O& s public Object buildActions () {- T8 v1 A5 p9 R' J
super.buildActions(); k4 V7 X, A/ T* [: f* J$ e
% J* `6 R, H4 i; r" ~
// Create the list of simulation actions. We put these in
! H$ Y4 L+ R6 ?4 Z& \' { // an action group, because we want these actions to be. |$ d* q' d+ ~$ H! e4 k/ R5 P
// executed in a specific order, but these steps should
, F# _5 Q2 k3 {8 V5 Y // take no (simulated) time. The M(foo) means "The message+ f3 p: ]) O& q# _7 @/ [: g O$ x
// called <foo>". You can send a message To a particular9 E; |4 t/ D+ n0 J
// object, or ForEach object in a collection.
- V1 H- S1 w O& Q# g
% { A- k( W& t6 s9 v4 m, j // Note we update the heatspace in two phases: first run5 B, k2 s0 |& H2 j
// diffusion, then run "updateWorld" to actually enact the
+ y% C7 Y) T3 _9 s, s, e // changes the heatbugs have made. The ordering here is
3 C+ v$ X7 h' ^% N // significant!
3 }/ D" L! c3 H/ S $ K' Y) N) ]! Y
// Note also, that with the additional
/ k: s8 k7 F+ B // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 Y/ L, X6 j/ B% o // randomize the order in which the bugs actually run( }3 H! `# p, V9 l' a" f% w/ F3 h
// their step rule. This has the effect of removing any$ v/ N; N. s1 D9 Z; L7 M
// systematic bias in the iteration throught the heatbug
* {* Z& W0 a( z+ n; K8 X // list from timestep to timestep6 h! N! E7 S+ p4 I& q
% h, i5 r: M `. v // By default, all `createActionForEach' modelActions have3 A9 U1 E& g" K8 N8 b0 ~ X9 Z
// a default order of `Sequential', which means that the
" F( I7 ?4 ^5 L$ [+ T/ ? // order of iteration through the `heatbugList' will be8 |6 z. |7 m9 w" Z$ Z2 U
// identical (assuming the list order is not changed
4 P, h( t+ |! r! j ] // indirectly by some other process).: F$ E, L6 m& Y& ~9 b/ X* q$ [
! L5 P' H5 L$ {. d modelActions = new ActionGroupImpl (getZone ());0 _ N9 H W" _0 U3 q$ d
- V% d1 N9 Q0 I9 y* ]( E7 o try {
( {6 o. M \: ^" C, h" k( h modelActions.createActionTo$message! {+ C5 f$ g) ~6 q- j
(heat, new Selector (heat.getClass (), "stepRule", false));% ?, q# a8 R- i3 B% M5 b* B$ r) k
} catch (Exception e) {
( F( ]* ~2 o0 M4 y) t- g& w; [ System.err.println ("Exception stepRule: " + e.getMessage ());: Q2 w C- U8 {4 Y$ _6 @7 ?; {
}# t2 N1 x' s. h# k; P
7 i# u" ?: j2 I, H! U try {
3 Z* w# S! p. _9 _3 N9 X! { Heatbug proto = (Heatbug) heatbugList.get (0);1 q: ?) v8 B6 W$ i% V
Selector sel =
/ B; m/ c% J; c6 M- h* f8 O9 P new Selector (proto.getClass (), "heatbugStep", false);
6 _0 h) O8 X f h& S actionForEach =, r5 x/ \4 Y5 }' U T/ P' o
modelActions.createFActionForEachHomogeneous$call+ D0 p* F/ M- d7 d& |; D
(heatbugList,
" }- Q3 z5 F, b new FCallImpl (this, proto, sel,
/ Z5 n' z) {) ?, u6 ^3 `! { new FArgumentsImpl (this, sel)));
4 J7 m" G, j2 U } catch (Exception e) {
4 I$ S) `: T; l1 s2 K e.printStackTrace (System.err);4 R) m8 V6 M" K$ z
}
# M" d. f$ z: p6 A8 Q$ O
2 @6 J, Y$ \5 I+ z& ` syncUpdateOrder ();. d2 I# F& k( x; ]+ x4 w. R/ L8 t1 b
U' Z) Q* \ G( C try {+ |. n: s, l9 _* Z- ~
modelActions.createActionTo$message
! |" A; s) o3 U0 `9 r% p (heat, new Selector (heat.getClass (), "updateLattice", false));
/ W& Q1 ^2 ~) l8 W# y } catch (Exception e) {5 g/ n6 Z- f4 Z8 q5 F7 C. l/ Q
System.err.println("Exception updateLattice: " + e.getMessage ());
/ v8 u. R1 N9 K3 }) S }" R, ^+ f3 P* c* n6 X3 h
" W% ~) @" o+ S+ M* C* P1 J // Then we create a schedule that executes the
7 E3 _& l. \0 g9 _$ z5 s4 Q4 z) j // modelActions. modelActions is an ActionGroup, by itself it
0 R d) _& ?+ N7 W2 a8 i% s // has no notion of time. In order to have it executed in R x2 z" N$ l6 }* q
// time, we create a Schedule that says to use the
; R+ J& w5 i8 _ // modelActions ActionGroup at particular times. This
% J9 ^( R& w/ r2 c8 g, E // schedule has a repeat interval of 1, it will loop every
$ l! E3 I- K g F' {/ u4 |3 h // time step. The action is executed at time 0 relative to; _) a# l* N6 ^" _
// the beginning of the loop.
6 a3 `$ F4 v6 U1 w9 q
! l' C! T3 `; \3 R; C8 v // This is a simple schedule, with only one action that is) w) E" O* B# c& {2 K
// just repeated every time. See jmousetrap for more/ ]7 Q5 o6 r& O, z/ z- A
// complicated schedules.
, l4 ~( @+ @4 O0 F/ ?# I- l0 H0 K K ; c3 c+ f, L+ J8 _7 H
modelSchedule = new ScheduleImpl (getZone (), 1);
! N5 ?0 ~8 A8 e, A# u& Z modelSchedule.at$createAction (0, modelActions);
% B3 m/ k. `, Z8 f% m/ l ) F/ u) R: G% ~( P
return this;
: N; D6 k' V/ U: K1 ^ } |