HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( c0 I" j2 m0 G Y" K- }( J. R8 @+ i
" j8 i$ @2 G1 s public Object buildActions () {
3 ^2 ?* D# X! c/ U super.buildActions();
8 K8 Y" d( H: `. `$ Q: M( P
; J3 v. M/ [5 q+ m3 } // Create the list of simulation actions. We put these in7 Y7 ?/ e( C1 w% z; |; B/ x4 V% ]
// an action group, because we want these actions to be
7 z4 W& @. M ?5 v+ J! p // executed in a specific order, but these steps should
4 }0 g" l" ^/ s$ ~' T: x // take no (simulated) time. The M(foo) means "The message5 ?/ O" t& s/ e$ `" Q
// called <foo>". You can send a message To a particular
+ K" O) w, ?) D* Q: n // object, or ForEach object in a collection.
/ N( f4 N6 W8 w1 r9 `; v& x 1 Y5 K" z8 [6 d V: g0 x. ?
// Note we update the heatspace in two phases: first run/ a- G& Y9 a9 l. \
// diffusion, then run "updateWorld" to actually enact the- f0 @# W9 I& s0 u$ Y3 I
// changes the heatbugs have made. The ordering here is
8 H1 |. C3 |2 M2 | // significant!5 B, Z+ u- G/ A6 b6 b3 m6 o
4 U2 h- v0 e: ]4 S _& g // Note also, that with the additional" j( `: k! C" w N5 F
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ t; {. _- h3 Y7 q/ W$ ^" L+ S
// randomize the order in which the bugs actually run
; h& B, Q: x% l# h5 w! r // their step rule. This has the effect of removing any; K) m# C8 r* s9 ]# A% c
// systematic bias in the iteration throught the heatbug
& r/ Q. c, \* X1 g4 N // list from timestep to timestep( s" C' B4 e9 ]* f
& X& p- h; G. B* B // By default, all `createActionForEach' modelActions have; y+ g' Y" q# c! j
// a default order of `Sequential', which means that the0 G) ~8 }8 u* h/ v. Q# c. o
// order of iteration through the `heatbugList' will be
8 B9 h% _! F# `5 t+ C+ q1 j, L // identical (assuming the list order is not changed
# U8 L; f/ s- P+ C9 I3 L9 w // indirectly by some other process).% B! K6 y& I& [) c3 [2 z" w
: T5 B3 h+ @2 B, a modelActions = new ActionGroupImpl (getZone ());
% V3 d+ Q$ F( w' T% U7 w
; G* z6 A" d4 F" i try {
4 k# F7 {' S: ?9 u8 V modelActions.createActionTo$message2 O: g' X+ X5 ]
(heat, new Selector (heat.getClass (), "stepRule", false));
' l7 H) I! X/ v' k' Q3 y, r } catch (Exception e) {- M/ I- d% a: d4 c
System.err.println ("Exception stepRule: " + e.getMessage ()); ]' E$ b$ Q1 Y; t O0 q
}/ n/ Y3 X! X0 E7 `6 t& }; \$ V
4 k# T4 W* U' K
try {( }8 d Z4 A& ]1 g
Heatbug proto = (Heatbug) heatbugList.get (0);: p v4 S/ O( r4 y. x
Selector sel =
- D" d( i0 j* k, k y new Selector (proto.getClass (), "heatbugStep", false);
( `6 e* i( J5 q0 l! e3 s5 r1 V6 o actionForEach =
# x7 b$ q% |. P+ `& U modelActions.createFActionForEachHomogeneous$call1 e" w0 C' N. _4 ]
(heatbugList,
. u2 e$ n% o4 U2 \5 ], t new FCallImpl (this, proto, sel,
( E( E! f7 G/ D4 p' R/ t* r5 o0 g new FArgumentsImpl (this, sel)));1 C* y( Q6 n/ e5 ^3 I
} catch (Exception e) { J! ]+ d" n" {. |- E
e.printStackTrace (System.err);
- Z2 f) E& {3 w8 Y0 h8 ~ }$ U: q' |, r U5 _
* [- W' @( b& `0 A syncUpdateOrder ();
- b) u& |) X* E$ g% O5 ?; N
I, ?3 j9 l$ e5 ~9 G) m* k* [ try {
3 T6 @6 l' `& a& U) l: n modelActions.createActionTo$message
6 E+ H3 p" u" k (heat, new Selector (heat.getClass (), "updateLattice", false));
, _- K( N6 F. U! x4 D5 X. I } catch (Exception e) {( [# S* T& J% D* P' H
System.err.println("Exception updateLattice: " + e.getMessage ());1 Q7 F, a& b* X
}5 L& {# w$ E+ L
) i4 w M, h" L9 t2 E; U5 L5 [ // Then we create a schedule that executes the* b5 o/ w4 Q0 L! Q1 R; i( K
// modelActions. modelActions is an ActionGroup, by itself it
4 L0 e. X* F1 Y5 n1 g // has no notion of time. In order to have it executed in- g( ~7 b* a0 j# @# O
// time, we create a Schedule that says to use the
0 Y4 {9 z4 ~# [) J! m // modelActions ActionGroup at particular times. This
! H" m! k' T* W$ L% i7 K- n. g- w // schedule has a repeat interval of 1, it will loop every
, I' O' V7 f5 t- ?' O9 C v, A // time step. The action is executed at time 0 relative to5 N+ q$ l0 Y( V8 Z3 C
// the beginning of the loop./ `) k: c' I7 s
/ r; |5 Q" Y1 V( h // This is a simple schedule, with only one action that is
) R& |" {# Y2 H+ j( P- A // just repeated every time. See jmousetrap for more
3 I0 D: B! e* M# V+ r // complicated schedules.
% g" z: D ^) F& d# E( K ( q. {( Z3 D8 Z$ c5 O
modelSchedule = new ScheduleImpl (getZone (), 1);
0 P0 y! _6 C3 h0 r modelSchedule.at$createAction (0, modelActions);
: L( ~; P4 N$ `, [6 u ! U& v/ o) o% l
return this;
+ Z) o7 J5 }$ @) A* o } |