HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; ^, I, P) r% [
; J$ F$ O- i. w" G: _ public Object buildActions () {
% ?7 Y! Y- m! `# F3 l2 B super.buildActions();
: Z6 n2 i" v2 P % @4 q) c5 t9 g; B. c; ~4 c
// Create the list of simulation actions. We put these in
0 }. c: ?: s+ V2 F, l0 k- f& Y5 Y // an action group, because we want these actions to be0 _$ I# [7 B. L F
// executed in a specific order, but these steps should
( e" q8 T, x2 f7 X8 T* { // take no (simulated) time. The M(foo) means "The message
7 D4 \5 K4 {2 E& e' g. n g/ o9 [. X // called <foo>". You can send a message To a particular$ K; V) {" B% I; a C, s
// object, or ForEach object in a collection.+ B. K- [1 X1 {4 a# o& u: w
9 x+ h0 X x, ]- @* F
// Note we update the heatspace in two phases: first run% I& }* Y R2 E3 _
// diffusion, then run "updateWorld" to actually enact the* P% f( G) W+ ?
// changes the heatbugs have made. The ordering here is
& n5 K& M: Q' i% j // significant!; J2 g6 \8 \" Q1 o( J) _
9 `- C* ?+ @4 Y3 | // Note also, that with the additional6 y+ N8 ~* y7 |- M+ c8 L
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 A1 ?; I" m. ?. t# k! m
// randomize the order in which the bugs actually run
/ m r9 V( n$ ^9 }# ]7 F! L4 L // their step rule. This has the effect of removing any
8 }3 Y; o5 h) w. G // systematic bias in the iteration throught the heatbug
+ i0 r! a F4 ^! q, l // list from timestep to timestep9 ~& U, |/ x1 e2 n* L8 p% `8 U
3 n0 f9 L7 Q; R! y // By default, all `createActionForEach' modelActions have2 e+ b. V' G8 _( ~5 ]% X
// a default order of `Sequential', which means that the5 G0 u: |# D% O3 ~, a; y
// order of iteration through the `heatbugList' will be
% ?/ }/ q" Z2 t9 _2 V3 s' J9 ~: g& e* e // identical (assuming the list order is not changed \% J1 X& \8 D1 [! K3 D5 n8 {
// indirectly by some other process).: m5 W) O! s7 v2 ?
' h! F& r6 ?* l. o modelActions = new ActionGroupImpl (getZone ());
1 x) A1 |( a8 r T/ q
, ?% d, p9 e3 A9 _0 O try {+ Y# V) R/ M N/ D
modelActions.createActionTo$message
" j3 s. x0 `1 v6 D0 s5 f (heat, new Selector (heat.getClass (), "stepRule", false));
8 k4 ~2 W E. b0 m4 d$ N } catch (Exception e) {
9 Q7 o' `* |' _! N System.err.println ("Exception stepRule: " + e.getMessage ());
) g( |9 y* B$ o' m; n) C }
9 D2 p' o1 h, T4 y
# l9 v8 E. {1 b7 R- \* o try {: ?9 P+ \$ d6 z( d/ O: B8 h
Heatbug proto = (Heatbug) heatbugList.get (0);
. c9 _& H2 O$ o# F$ {% B Selector sel = 1 u5 U5 F* Y' |1 ?: E& i* L
new Selector (proto.getClass (), "heatbugStep", false);4 v' D1 r: Z3 U" n
actionForEach =
# I. z! G8 ^; e. }% q modelActions.createFActionForEachHomogeneous$call8 q: @* u1 p; g, O/ r+ S' j
(heatbugList,/ d6 q" H4 W+ O0 A& Z
new FCallImpl (this, proto, sel,$ Q' w1 u3 `$ `% h
new FArgumentsImpl (this, sel)));9 X/ B* @3 v1 t$ h, A
} catch (Exception e) {0 R& M2 j2 ~$ ]' R5 G( h7 B
e.printStackTrace (System.err);
* }( o F- ~6 _3 \4 T6 H }; g9 d$ K& e% l9 h% \
: d9 Q, _4 Y- C- X# Y2 c
syncUpdateOrder ();: F7 ~8 \! g: s6 L# S' g1 F! [; q
6 `5 p9 y! V* F8 k& @: E7 U* u
try {
5 M, L0 N& W+ i1 s modelActions.createActionTo$message
5 A! I0 o h' c (heat, new Selector (heat.getClass (), "updateLattice", false));
; u) H0 x' j# H) r } catch (Exception e) {
7 Q, ?3 }7 k* |$ b! O! n: a System.err.println("Exception updateLattice: " + e.getMessage ());
0 `% T) [; I2 { }. p% F. A+ }0 e6 `
, ^" }% T; @+ t$ w5 B. M8 x& |
// Then we create a schedule that executes the
* a/ P' R, g* ?% x // modelActions. modelActions is an ActionGroup, by itself it, e. r1 Q- u- O% z' Q F( s- X
// has no notion of time. In order to have it executed in3 k5 Y3 ^3 w8 l+ {$ a
// time, we create a Schedule that says to use the
: h& ^5 \, J+ V // modelActions ActionGroup at particular times. This
+ q& l! a f5 H // schedule has a repeat interval of 1, it will loop every: X" w* ?7 B) V3 b' {# m) ~
// time step. The action is executed at time 0 relative to
3 O. E# _/ |9 `) e4 ^7 D$ L' Q/ u // the beginning of the loop.+ j2 S7 S1 }; V6 b' }
. F5 O* D5 V V1 f1 q // This is a simple schedule, with only one action that is
" z; @- n* j0 X // just repeated every time. See jmousetrap for more
P$ S/ g9 A0 B // complicated schedules.
, ]# n. {% a# E/ s: }. q
$ D; E9 ?0 J, |! B& I modelSchedule = new ScheduleImpl (getZone (), 1);
- n, Y: a3 b: ^* x modelSchedule.at$createAction (0, modelActions);3 n# N2 r8 u. m: {- V3 r) ]
" g- N% T) i l4 j; A- h6 f return this;9 E W2 ~1 w) c2 j$ T. \2 O0 E
} |