HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 ]) V# J- g1 n/ E* @
, u! ~- X# b* R( b. ~1 B5 N
public Object buildActions () {0 q4 _# M$ ]1 P+ A
super.buildActions(); a4 F* g) n. J4 W; i
( ^/ [! J. i! f! v% ~9 y5 U
// Create the list of simulation actions. We put these in
3 z4 U8 o4 x3 }" r- {* l( `' e I- Q // an action group, because we want these actions to be
. ^% Z; F: g, k; t2 O# I: s // executed in a specific order, but these steps should. [9 ?; j/ b; y- `) D
// take no (simulated) time. The M(foo) means "The message
/ T& p0 h% N* g# e( Z" N7 o // called <foo>". You can send a message To a particular8 h' E0 Y2 L4 _/ Z9 q% X
// object, or ForEach object in a collection.
* s: J& i4 t: S; v
9 S* @" l! V* U H // Note we update the heatspace in two phases: first run
: f& j4 X& v/ X2 S& } // diffusion, then run "updateWorld" to actually enact the
2 b1 t6 e- j7 n // changes the heatbugs have made. The ordering here is+ V7 _9 W0 X# H0 O6 T, N
// significant!
- m r! D n ]8 [ * m8 N" v; {- w/ r/ P H& r
// Note also, that with the additional
9 z/ q$ e- t8 {0 [: e // `randomizeHeatbugUpdateOrder' Boolean flag we can
; h- b; o' P' v. A // randomize the order in which the bugs actually run
w, v# p& ^- ]. f // their step rule. This has the effect of removing any, C) e! L% l+ Z0 ~& h0 J
// systematic bias in the iteration throught the heatbug' h" `7 K& V1 H/ ^6 ?8 _
// list from timestep to timestep
1 j9 O1 @. J \/ v/ q) z* ]. s
* o7 E* x8 [( L \( J9 N9 s // By default, all `createActionForEach' modelActions have
. f9 Z$ z& @) @* E2 i* G // a default order of `Sequential', which means that the
, I/ y4 E8 W6 b |, j // order of iteration through the `heatbugList' will be; G3 q4 x/ p9 s5 g% M2 p. M7 s3 _
// identical (assuming the list order is not changed) v6 Z. G/ g' Q2 K3 N
// indirectly by some other process).
- i1 V% L9 X w# m) ^ 3 S4 ?2 }0 f% g
modelActions = new ActionGroupImpl (getZone ());% I4 L; W4 A& h
9 y( F1 _3 ?. g3 F, _( Z" u try {
( |% u7 [& y, t! Z, }1 M4 f modelActions.createActionTo$message
$ G; Q3 d5 L7 c. V- M1 ]* B6 J (heat, new Selector (heat.getClass (), "stepRule", false));
' i1 v! p( o$ F! g- h% q9 ^. Q } catch (Exception e) {# g; x. d. `% Z: j) m, ]$ n' i
System.err.println ("Exception stepRule: " + e.getMessage ());
* l8 g O' I8 H9 k$ C, u" c }
$ }9 _; I8 ~* v
8 q& P% S) d6 R$ ~ try {
; p. e% t0 J! i1 d Heatbug proto = (Heatbug) heatbugList.get (0);
5 `5 Q! {7 x" n Selector sel =
2 X# n" t0 h. p new Selector (proto.getClass (), "heatbugStep", false);* }1 |2 k( M$ c6 o2 Z
actionForEach =% B1 c% X- v! L- T, l
modelActions.createFActionForEachHomogeneous$call
7 J7 s. x6 p. i; u( Y# x (heatbugList,# Q2 }; U! U# p" ~ L7 {
new FCallImpl (this, proto, sel,% f/ C9 Y6 a$ s( ~
new FArgumentsImpl (this, sel)));
* ~5 Z9 W) `+ e1 K' Z( O; z } catch (Exception e) {6 S+ _ u" I4 H a0 E
e.printStackTrace (System.err); ~( I8 b5 O7 Y, @+ h
}0 D- T# _0 ^' X+ u3 N
; m$ b: E! \* `. U/ g; g/ i% _ syncUpdateOrder ();2 e3 T! K G9 @/ ]! V# @) D
# m p0 f' p4 {( c! _ try {; y4 M1 o! H7 I& g
modelActions.createActionTo$message
3 S4 m7 u- [0 x0 t* j# K+ d! A (heat, new Selector (heat.getClass (), "updateLattice", false));3 V3 {5 D. J8 u0 x
} catch (Exception e) {% n* ]. V' q6 L, [. ]) d
System.err.println("Exception updateLattice: " + e.getMessage ());
" r5 s! e. x: i5 H/ | }7 r; Z& b) R3 P' v" x: }- d
7 O* O1 X& Y5 `2 u // Then we create a schedule that executes the
8 U- x6 W* `( A' R( X9 V: }% W // modelActions. modelActions is an ActionGroup, by itself it: O/ L. g, w: }! ^0 p: e
// has no notion of time. In order to have it executed in
" O6 F! g1 a) A( m' d // time, we create a Schedule that says to use the
6 l5 [1 w. `( C5 J // modelActions ActionGroup at particular times. This
$ _/ W% P8 |( J6 d3 ?( k // schedule has a repeat interval of 1, it will loop every; @" r8 x# y v1 _" M$ Q: v
// time step. The action is executed at time 0 relative to2 ~. q1 x0 P. x, F+ N, A* o& b8 ~
// the beginning of the loop.
; I6 C! b' M6 c' C2 W( q' g3 ~+ G4 C5 Z7 G, S# r7 l2 M5 a$ N3 @0 ^
// This is a simple schedule, with only one action that is# z# x u9 b- o
// just repeated every time. See jmousetrap for more
- i: M8 a" m( w; S; w/ X/ G1 m // complicated schedules.
! X7 W& S/ h- g 4 w3 k: W8 [7 j" O9 X: w' u
modelSchedule = new ScheduleImpl (getZone (), 1);
1 c+ m3 P3 ~/ O- i modelSchedule.at$createAction (0, modelActions);' {$ D6 \' e+ [2 q9 f- \
3 d) K1 ~$ H6 Z/ |5 T
return this;
& f) |) V$ W+ \0 L+ [ } |