HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ ~2 N+ _& c4 ~
2 D3 g' V' f( _ `, @/ I" B: `8 q public Object buildActions () {
- b1 y9 ~- f+ P" } super.buildActions();& i2 D$ q, f. I! _" h/ a
& O; t# P( j- z P# K# H
// Create the list of simulation actions. We put these in
" V- Q0 v1 m9 q# u2 U // an action group, because we want these actions to be
# G( f6 o# G" I1 b8 \+ ]7 Q0 b( S* ~ // executed in a specific order, but these steps should
6 h2 k: B4 C1 i0 |. n( l // take no (simulated) time. The M(foo) means "The message
, }) A3 B$ f! @5 @) X // called <foo>". You can send a message To a particular' o; W+ A. g3 u4 e5 S) j! ^
// object, or ForEach object in a collection.
( w. r- N; w" ] . P- j. I# ?2 T4 S+ U" M9 @
// Note we update the heatspace in two phases: first run
, l! d6 f' |- T' k. c // diffusion, then run "updateWorld" to actually enact the, o5 P: b; Y* S2 ?2 l
// changes the heatbugs have made. The ordering here is
& Q) V6 |- F1 t4 j: m* p // significant!' M W1 Y- U/ B
- o9 G- a' o# _8 G2 B/ P# {$ V
// Note also, that with the additional
2 T# Y% V4 y, w! J- {8 h- I J# k // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 l. ^, m. g0 i; P4 r // randomize the order in which the bugs actually run
/ g% U+ d9 n, a# |* o; o // their step rule. This has the effect of removing any
5 G: u3 D2 W3 V, ^" ^ // systematic bias in the iteration throught the heatbug1 z; b; {0 {) r I$ M* B& Y+ ]
// list from timestep to timestep+ Z* _! x& J$ ~4 X0 n
/ r7 k9 i. J0 F8 M4 w
// By default, all `createActionForEach' modelActions have' U7 j/ x5 O/ o# E& J- }
// a default order of `Sequential', which means that the
: \- ?, z% P" {$ u( b // order of iteration through the `heatbugList' will be
7 D6 C. @+ s$ \: C9 \ // identical (assuming the list order is not changed* a2 |% a- R+ j2 J
// indirectly by some other process).
' |) D7 g7 n$ l+ B& [3 Z
& t. g1 X5 z5 s5 i* }1 ^$ [) F modelActions = new ActionGroupImpl (getZone ());& o* |( J- |2 e3 ]: C
7 e) ]. P! z, T, |, b. b try {
: n' l* J, }7 } modelActions.createActionTo$message
! s+ X& |. x+ b( ^ (heat, new Selector (heat.getClass (), "stepRule", false));
' l# U' V T+ f. r } catch (Exception e) {
; f( E; s" I( h1 g2 p System.err.println ("Exception stepRule: " + e.getMessage ());
0 o! U! C: W& T4 w" Q I, S- f }9 k* q5 N9 a# q6 b1 _! U# W
}1 x9 V7 U2 v' s9 _+ P try {" T& c9 \! u0 k' y$ F: v
Heatbug proto = (Heatbug) heatbugList.get (0);
0 ?: \: G* P+ i; o5 x/ ]; x1 P Selector sel = % ?- k$ |, h$ [
new Selector (proto.getClass (), "heatbugStep", false);
" d2 J2 y" e5 o# w6 f- g1 e6 E/ ~3 o actionForEach =+ o7 e _, F: C2 o2 K
modelActions.createFActionForEachHomogeneous$call
- a' k& N% d% H- ` (heatbugList,; }, v$ [* U6 g9 v4 t# l
new FCallImpl (this, proto, sel,) E' a1 u% A( x5 M4 I
new FArgumentsImpl (this, sel)));
- g2 V5 M" [& G } catch (Exception e) {2 R+ M- S; u0 r, a0 {
e.printStackTrace (System.err);& g9 R2 }3 Y$ W4 w/ |# l
}5 X) @+ `8 O0 d" l [4 N0 Y3 I% g
6 F* ~* V2 Q `' Z2 b
syncUpdateOrder ();+ @ P* w) F3 p! K$ f) ^
8 o4 ^9 m% ^5 h' T% N2 f l: ^: R
try {, p6 z8 x5 Y0 y8 s$ u8 Z3 [6 [$ ?
modelActions.createActionTo$message
6 y$ C4 {1 C+ l: w: L: N5 t (heat, new Selector (heat.getClass (), "updateLattice", false));' g8 ^# H* c; g% i3 o- I3 {
} catch (Exception e) {$ K! H& v- m5 U. \2 s- Q
System.err.println("Exception updateLattice: " + e.getMessage ());
% f- j; i1 X0 b9 c }% t. `9 S9 u- N& o. K" ?1 i: }
* S; |$ e$ r" ?/ q7 h4 h
// Then we create a schedule that executes the0 C$ [) m9 ^" {& C
// modelActions. modelActions is an ActionGroup, by itself it1 O. {6 |# ]* ^; e
// has no notion of time. In order to have it executed in
3 q" L) u3 I" Q0 p% V0 h$ s7 n // time, we create a Schedule that says to use the; p6 F v+ O* @3 }8 y" m4 v5 [5 f
// modelActions ActionGroup at particular times. This( d1 q5 y4 F" Q( M+ w3 N3 p
// schedule has a repeat interval of 1, it will loop every) k/ |; V$ W" f" v
// time step. The action is executed at time 0 relative to6 Z" v+ }8 v. O9 \
// the beginning of the loop.- `# ^6 I2 h- e# m
, N2 l4 r) o' \+ K `# p
// This is a simple schedule, with only one action that is+ h" W& T4 `% X
// just repeated every time. See jmousetrap for more/ z/ e' d" k4 d3 a, F
// complicated schedules.7 N6 }* |' Y0 I8 Y
' A9 k0 V1 f$ E0 N2 s modelSchedule = new ScheduleImpl (getZone (), 1);
3 C, l Q0 g3 l% X: I% Y" S modelSchedule.at$createAction (0, modelActions);0 h3 k9 F, I- D' _$ J: f% \
" {) b5 M9 I0 U9 u4 Y t; G return this;
* U0 w( {: E9 T, v } |