HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 | L/ Z0 H* ^
c) @/ m! [. ?3 z0 k' R public Object buildActions () {
/ Y+ ? J* l% _ super.buildActions();% D/ D1 _- f! |4 Q( X, c
) @5 s6 a! M4 W5 p // Create the list of simulation actions. We put these in
# u7 a Y$ }% S& g K7 U // an action group, because we want these actions to be+ E! J/ O; R: q6 @& T
// executed in a specific order, but these steps should
1 s/ O% Z$ L4 o/ N$ M // take no (simulated) time. The M(foo) means "The message) r% w; m8 l( y, S9 _$ {
// called <foo>". You can send a message To a particular4 Q# O; e9 E" j/ A+ \
// object, or ForEach object in a collection./ T2 q& @# S- R A" x3 L
1 U% ]; a* U+ n/ k' S // Note we update the heatspace in two phases: first run8 F4 ^0 {5 @" n' Q- n" y9 J( k' ~
// diffusion, then run "updateWorld" to actually enact the
. Y) ?4 [+ C+ ^% d- o0 X/ l5 D6 A // changes the heatbugs have made. The ordering here is7 n8 ~& G6 W4 S. W+ H
// significant!
! t, e9 m: V. v . q E. M4 Z% ~/ n
// Note also, that with the additional
% G! M) v U4 T) `; _ // `randomizeHeatbugUpdateOrder' Boolean flag we can8 F! {! E9 ~( b* y9 \* j
// randomize the order in which the bugs actually run/ S" Y1 Z9 y7 R
// their step rule. This has the effect of removing any+ o5 m& b7 z0 B6 l
// systematic bias in the iteration throught the heatbug
) Y1 e. u* U7 B# C; _9 j // list from timestep to timestep
7 B/ |0 |2 Y; A4 K5 V
& O. L9 {1 b# P- i: N2 s: f! ? // By default, all `createActionForEach' modelActions have& i7 _; W0 b5 ?4 w
// a default order of `Sequential', which means that the
- D2 \! e z" |& s. k0 r // order of iteration through the `heatbugList' will be' [1 a# w, X7 v5 |! D/ c+ v: L: M/ ]
// identical (assuming the list order is not changed
# k, m; z! H+ ]( y% _ // indirectly by some other process).
" Q4 N) c% V7 t& ^' p6 j7 f
$ a4 ?( }/ f1 ^5 o) ` modelActions = new ActionGroupImpl (getZone ());
5 Z9 } W2 t K
: y ]- a' Z0 g" k0 y0 y$ I( W try {
- e& D$ K' \0 D* O modelActions.createActionTo$message
# V4 i$ h$ [" s (heat, new Selector (heat.getClass (), "stepRule", false));2 W. z; O3 C- |+ b0 c; j% F
} catch (Exception e) {& p/ a' O4 p7 Y; ]4 i5 |; J
System.err.println ("Exception stepRule: " + e.getMessage ());
( W. n+ o4 K3 R7 ~$ K: a }
6 X* u" D9 h( _' |
8 ^8 I% D- v& _/ F try {% R O" Y; W: f! P
Heatbug proto = (Heatbug) heatbugList.get (0);
7 W' \- J4 j2 x3 t$ _# X Selector sel =
2 M9 ? Q4 Y* S0 ] new Selector (proto.getClass (), "heatbugStep", false);
: \) |; F2 L3 O! _7 D) s* a actionForEach =+ Q! H" Y; h0 }( C6 \
modelActions.createFActionForEachHomogeneous$call3 E; [3 I) C e! O
(heatbugList,
6 Y& @) y# X! G/ J5 h! @( Y. R new FCallImpl (this, proto, sel,7 _' t" i' b w- p& U
new FArgumentsImpl (this, sel)));
- H9 R2 c. J' ?6 J6 E, p% n4 b } catch (Exception e) {
5 b5 S5 N8 N8 w* [ e.printStackTrace (System.err);/ Z% @% Z0 ?/ z/ c1 h! [/ M( G7 x
}
+ N O" Z% S8 L' R
5 x7 g6 T! X) z# L9 { syncUpdateOrder ();
6 }1 o7 Y o* H6 C3 z
& @3 K" ^2 ~: W4 e3 g; I try {
/ N4 W$ |- r: R; f/ Y; M% Z' _ modelActions.createActionTo$message
/ u; L6 |/ Y1 N, e" X5 g3 O2 \* Z7 ^ (heat, new Selector (heat.getClass (), "updateLattice", false));
1 A# S4 v5 t- k. s8 x) A; y } catch (Exception e) {
/ u$ f/ @1 @4 u* U9 ~0 m, R System.err.println("Exception updateLattice: " + e.getMessage ());; g! m5 z2 P7 P5 C
}
. k6 j$ O; e, g, c0 e# V
7 ~8 m9 U% s6 B // Then we create a schedule that executes the3 ]1 l* I# k* w& ?. f G" ?2 N
// modelActions. modelActions is an ActionGroup, by itself it" Y- o4 u1 A9 F1 \7 X9 P9 Z% |8 c" T
// has no notion of time. In order to have it executed in4 Y* V' F5 Y* e* u7 [/ q
// time, we create a Schedule that says to use the
6 }3 f3 n+ V1 S6 ^8 h$ M // modelActions ActionGroup at particular times. This
( w4 ]) V4 `. f* R% T // schedule has a repeat interval of 1, it will loop every% I0 P, N/ E) J: b! b3 }; ^
// time step. The action is executed at time 0 relative to
0 H9 b; P3 }4 S& R# ^ // the beginning of the loop.
. W) ]- U% I( m- a6 v" _3 J n/ E
! f1 c* c" }1 U // This is a simple schedule, with only one action that is2 R* ], W& s# r/ z# N
// just repeated every time. See jmousetrap for more
8 T" N9 B7 P5 r1 J7 B& K. M // complicated schedules.9 `4 x# d+ G" m! o
7 `' T4 \& W" { modelSchedule = new ScheduleImpl (getZone (), 1);2 z, C+ t" F! \1 z
modelSchedule.at$createAction (0, modelActions);
7 d- M7 v, `4 b( T5 U
) P y4 T+ C* q: l1 h( _ return this;) x7 T4 H: {3 ?
} |