HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. w3 t/ d, k; R$ b) L
# ]/ Z5 L* f# U public Object buildActions () {' |. r+ z$ G" z# \& e, Q: \
super.buildActions();
; \- `, Z* X7 F9 J, l# C
" }+ B5 X( g6 D0 x7 m // Create the list of simulation actions. We put these in
c8 ^: o# d1 A7 m( `! j // an action group, because we want these actions to be
/ s9 D' j: I3 ?" f1 _ // executed in a specific order, but these steps should
1 H! ^. s4 Q0 Z4 Y // take no (simulated) time. The M(foo) means "The message) x0 ?9 n8 V0 g- f
// called <foo>". You can send a message To a particular9 M; w* U$ W, q/ F/ l. m& ?
// object, or ForEach object in a collection.
. ?. c! W$ F) z& ?% R( a1 c
' {% }1 d/ W; p2 h // Note we update the heatspace in two phases: first run- `5 c9 ^6 I: z3 s$ x6 w# A
// diffusion, then run "updateWorld" to actually enact the
~0 u9 C' e n6 Y5 e: U+ r // changes the heatbugs have made. The ordering here is
3 P5 ]- z0 |' G& I5 `9 r o // significant!& n0 i8 q! {: y( @4 `9 ?6 P. Y4 j$ |
4 x5 |. S# q6 b) A0 m8 S // Note also, that with the additional+ C, X B& D8 v4 h" Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can: q2 Z& n9 a! [4 v' g$ P' a) S
// randomize the order in which the bugs actually run; L) n: E" i" }+ D
// their step rule. This has the effect of removing any7 T; X- ]6 s9 i% s
// systematic bias in the iteration throught the heatbug1 c- R+ e* c, T
// list from timestep to timestep
* D- a- d7 c( `: E, k6 k4 X 1 I6 _" y* J& N
// By default, all `createActionForEach' modelActions have
$ H& K6 ^) F5 Q* B; M // a default order of `Sequential', which means that the
. v* d/ w; R, B" t // order of iteration through the `heatbugList' will be
3 q Y4 {4 |5 O& l // identical (assuming the list order is not changed) h3 j* ^9 ]8 S: @3 C* S+ ]5 i- N
// indirectly by some other process).
% v1 ~! `" H+ c. A: ^- v
, y: v6 y$ r( |; j( a. } modelActions = new ActionGroupImpl (getZone ());
3 V9 H9 V& Z' m# E) H$ M$ i* W) i, _5 O, j1 `
try {
0 f( H8 l: {8 r p/ A6 ^ modelActions.createActionTo$message
, v1 h9 [5 M# p% x% T; i (heat, new Selector (heat.getClass (), "stepRule", false));
/ e! ~" ~7 R$ N9 o' M$ w' { } catch (Exception e) {
7 { t( g7 ?# x+ D- o System.err.println ("Exception stepRule: " + e.getMessage ());
7 H6 @7 P. P% K! J+ T# a$ H }
" W i/ } x# q# A0 r: c5 g% N( P: M& @8 _, j5 q- J/ l* L! @
try {& w$ b; f7 N$ k# f
Heatbug proto = (Heatbug) heatbugList.get (0);$ \- s' I/ c7 [5 s
Selector sel =
. V) _6 ?8 u& r9 b, S new Selector (proto.getClass (), "heatbugStep", false);& f3 e# T8 ]9 I6 I9 A N+ q5 r( W: _# `
actionForEach =
0 y& i$ v4 m* Q# a2 m! z1 c9 S modelActions.createFActionForEachHomogeneous$call
1 C% D6 g+ s* {4 O0 @ (heatbugList,& _3 o# a& G4 }9 G9 K9 a
new FCallImpl (this, proto, sel, P1 R7 e, z- v9 T1 c. M( z
new FArgumentsImpl (this, sel)));
4 \( ]- r. p9 o0 E8 a" A } catch (Exception e) {
! M% o( J, n- n( \8 G e.printStackTrace (System.err);) `* z4 t# u9 f5 R0 [ y1 K' U) [8 i
}
) S$ J! d/ A: T2 E8 l9 E& J % ]" E; }! l4 r% ^: t
syncUpdateOrder ();9 E- Z5 C. p, g$ [& a. M
9 [* a1 G% W+ F
try {
' \/ g2 [& @+ W6 Y modelActions.createActionTo$message
* w: l/ a+ T% H9 q+ S% H8 v (heat, new Selector (heat.getClass (), "updateLattice", false));
5 E0 @% g) n B; H9 P* o% d } catch (Exception e) {$ ?0 D& x7 [" m& t* p
System.err.println("Exception updateLattice: " + e.getMessage ());' y2 S% B9 R1 ]0 `5 @
}) l4 j: j5 N% ]1 ^# j# [ z3 N
+ K( k' T! s6 }. v' x( o
// Then we create a schedule that executes the) S1 V" ]5 u& ]0 Q; L
// modelActions. modelActions is an ActionGroup, by itself it
1 s3 Y# x5 J$ U$ S$ L' B // has no notion of time. In order to have it executed in
& H' q8 x; |, h; M // time, we create a Schedule that says to use the* s- Q) O0 s* D
// modelActions ActionGroup at particular times. This
# b; P" K% c7 G. h5 s // schedule has a repeat interval of 1, it will loop every9 a. W U! [! q3 l( S. x
// time step. The action is executed at time 0 relative to# X9 O; Y# H ^- }; T$ r$ g, ~9 n, t3 {
// the beginning of the loop.
, \# q: o/ W/ I7 W+ a* j
8 \2 n1 I/ d z // This is a simple schedule, with only one action that is; V5 {6 |& T3 @: M. C
// just repeated every time. See jmousetrap for more5 u" X6 D4 z% I2 V1 r6 M$ E0 F7 j
// complicated schedules.
0 w7 Y6 h! w- u6 R. d7 J. ?
2 C; V Z: V, s. U, y8 ~6 h modelSchedule = new ScheduleImpl (getZone (), 1);
& F7 N! l* x" m; H0 D* m modelSchedule.at$createAction (0, modelActions);0 h* U( a( `8 x2 Q" I" D: j9 Y
1 S* x$ m% B/ m5 g o return this;
$ H; Z8 @5 H/ E" u } |