HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: m: N3 ?" z* c6 r" ?
. ~ c8 j3 B- J2 R( G public Object buildActions () {
0 W( C9 m5 j% K& N super.buildActions();
! i4 G. w3 V3 `4 @+ m: E 7 m2 Q. ^, R9 t/ Z
// Create the list of simulation actions. We put these in( @# {# B# M. {" Q- ^2 V9 m
// an action group, because we want these actions to be
5 H1 N9 ^) \* o" F: f l& @1 x& o- w' A // executed in a specific order, but these steps should
( V$ {! n8 a1 M1 [" A // take no (simulated) time. The M(foo) means "The message$ i+ N+ R6 m8 s# }
// called <foo>". You can send a message To a particular
' P7 ^; r8 E) a2 ^' V // object, or ForEach object in a collection.; T# ~# ~$ M# G! o
; U/ z) o: s0 D( e3 }: c
// Note we update the heatspace in two phases: first run
9 H* R8 a& t$ m // diffusion, then run "updateWorld" to actually enact the
# Z- c/ u- x0 [' L$ a5 S- s1 \( G // changes the heatbugs have made. The ordering here is
% d% S- r. x3 U# M' G2 W // significant!& w" {! }7 x/ |, `' ?
I. I3 A o& Q8 G7 h7 T: u- e
// Note also, that with the additional
* C! Q8 }7 Q& [ // `randomizeHeatbugUpdateOrder' Boolean flag we can! H! [2 P, z9 ^" ]; P9 k0 c2 @
// randomize the order in which the bugs actually run5 o2 A3 U$ I* e1 k6 N
// their step rule. This has the effect of removing any2 y6 E, w/ h# |
// systematic bias in the iteration throught the heatbug' |$ P) [9 y! T. Y
// list from timestep to timestep9 H+ T* c3 {& b) i
0 n" F8 O( t: c& |& G // By default, all `createActionForEach' modelActions have
7 ~9 U+ ^5 j) A) `6 t // a default order of `Sequential', which means that the+ i6 O3 F F" c" z1 t. I
// order of iteration through the `heatbugList' will be
6 M6 x2 k- R5 {9 j/ n // identical (assuming the list order is not changed, |: `# D5 \% \7 t
// indirectly by some other process).0 g8 D9 [4 @% B' b3 B! b9 I
g% A- R4 |/ K. f" q
modelActions = new ActionGroupImpl (getZone ());
! {/ r+ Q2 ]* C- r0 l) H) h; R) I4 \0 I2 w# a3 o, o+ s
try {+ I# `0 Y+ k q
modelActions.createActionTo$message: P) b+ ~1 b% _0 [. t+ Q* ~
(heat, new Selector (heat.getClass (), "stepRule", false));
" r: E3 C4 O: A# z" Q/ N } catch (Exception e) {
, M' ^% P3 P1 }" h: `, N% A) b System.err.println ("Exception stepRule: " + e.getMessage ());
" B" p0 ^4 n3 ^( ?& ]3 v1 h# g }
/ W+ i# _8 s- B& [ [" L: `4 W) {' m0 ^+ G9 E
try {# Q- v% M/ g. F% g1 l# v: Q
Heatbug proto = (Heatbug) heatbugList.get (0);
# X* U k' Q) Y3 C/ Y5 f, n7 ^4 F Selector sel =
+ E" j/ ~0 l' L0 z new Selector (proto.getClass (), "heatbugStep", false);- e q3 F( K2 l3 @9 U4 t! t
actionForEach =
* p2 b1 E$ z: g5 h) ~( ^ modelActions.createFActionForEachHomogeneous$call
' k, e, n( @4 K (heatbugList,
; H. [( O9 b- a new FCallImpl (this, proto, sel,0 \3 i; Y+ P! F! [ C0 j5 J/ [
new FArgumentsImpl (this, sel)));: G _: J, {! V) g0 C) Q( h
} catch (Exception e) {
( @6 C# j2 Q, u- Z, G% v6 y e.printStackTrace (System.err);' f- y9 W' ?. w/ B& S" m7 \
}1 G2 B+ s5 k4 m6 H: }9 o# m* }
6 V Y7 }! S; I8 [: u8 n syncUpdateOrder ();
- Y* D7 ]5 V' V7 I) q1 e7 k/ K0 F3 ^8 F7 u4 m- |
try {+ c' t; L- \2 ~ e- ]- x
modelActions.createActionTo$message * G q) M) o9 u3 x
(heat, new Selector (heat.getClass (), "updateLattice", false));$ c4 x; z1 |" |! ?
} catch (Exception e) {
1 E& B( P4 r6 q L, N; y) z System.err.println("Exception updateLattice: " + e.getMessage ());5 Z, {5 Q/ F0 p4 L1 k! P; l% R
}5 y' |/ ]# {$ V' K+ b% c5 V' r
% ?" H# o+ J- V- g: o$ `1 S# d // Then we create a schedule that executes the
" O& n8 R+ t' m; J1 x* b+ Y // modelActions. modelActions is an ActionGroup, by itself it
4 }) U. F* l1 [/ M; K // has no notion of time. In order to have it executed in8 N3 G. b9 U' |" U. j3 K
// time, we create a Schedule that says to use the. G$ T+ r4 T& k5 y7 f% d3 C
// modelActions ActionGroup at particular times. This
1 M5 K2 A2 k4 R* K d8 @3 D+ X/ f( l6 u // schedule has a repeat interval of 1, it will loop every" P9 n$ D. N2 K9 o, {: _, f
// time step. The action is executed at time 0 relative to
4 T% _- }5 y4 s. N& o. v& A& J7 }% [3 B" ^ // the beginning of the loop.
0 n" n4 ^0 b v5 i7 W' R8 w; F9 `2 i) e# n+ {: M+ f/ H3 _
// This is a simple schedule, with only one action that is/ X' J: D; e5 y& K: O) I4 t) @
// just repeated every time. See jmousetrap for more9 J, E- b% n* o# D& O
// complicated schedules.
[' J2 F' y4 e! T+ w4 Y/ c0 W ' Q/ b" ~8 Z9 q* a
modelSchedule = new ScheduleImpl (getZone (), 1);
: Z. l; j! B" S# h& u' k7 V$ ] modelSchedule.at$createAction (0, modelActions);
* B' y5 m5 e C 2 {' r4 _$ G" v! z, ~& K
return this;- @! l; O5 ~ @
} |