HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* C' o8 W5 i) q4 D8 h( |& j" C- J
public Object buildActions () {8 `6 Q- z+ ]3 T- N7 @3 c) f
super.buildActions();
$ ]5 o% R1 S' u3 B' I8 a6 d1 R! `
1 e# J- D0 }- g4 X. m* F // Create the list of simulation actions. We put these in0 D, \7 C5 r# ], q
// an action group, because we want these actions to be
# I9 c& d9 K% V; B" E // executed in a specific order, but these steps should8 J0 t- _; d, C8 U6 ~
// take no (simulated) time. The M(foo) means "The message
* |: q3 d) \; n7 n // called <foo>". You can send a message To a particular
7 z# h- a3 n, l! m // object, or ForEach object in a collection.# k5 e! d5 c% @& I* ?( J
# X3 x$ l% E3 k // Note we update the heatspace in two phases: first run, l/ T7 \. D. k1 f+ G
// diffusion, then run "updateWorld" to actually enact the
( l2 F& B' G5 H2 ^6 K; Z // changes the heatbugs have made. The ordering here is! T0 f7 H. r0 u8 Q) a
// significant!. c7 w! B ^6 D i! D9 C }! @* z
) j. B5 C$ p% X- I4 g6 X
// Note also, that with the additional
& i5 J' F$ }, X // `randomizeHeatbugUpdateOrder' Boolean flag we can. n7 b3 j/ @% f+ Q7 k) ^5 ~3 A
// randomize the order in which the bugs actually run
; C4 m: h. s$ ^5 n // their step rule. This has the effect of removing any6 N$ o0 T' b1 u4 ?" B5 i
// systematic bias in the iteration throught the heatbug9 e6 S0 K, S6 b$ S& J2 c2 D! x. \
// list from timestep to timestep1 L0 ]0 j- k! W9 Z* R) f7 `- B. B
+ O5 C1 d) I M* ^2 [, P+ w! e+ g5 h
// By default, all `createActionForEach' modelActions have, {$ u8 g0 b2 s4 ^
// a default order of `Sequential', which means that the& e5 P) Z8 c- @2 q1 z$ i8 F- p
// order of iteration through the `heatbugList' will be Q* j: ~8 Z8 D# t6 `! K( B
// identical (assuming the list order is not changed
! P5 s6 m; F/ u3 M) C // indirectly by some other process).- n, u2 l8 u& r v1 N- D2 U
3 m. T$ L; ~8 u6 m$ L modelActions = new ActionGroupImpl (getZone ());
5 _" U( U$ L" L4 u! O- A% X' c- M5 s( Q k% ~+ a5 O
try {
$ x, G1 p& P& T2 I6 d [ modelActions.createActionTo$message/ ]: @5 J, n o1 B
(heat, new Selector (heat.getClass (), "stepRule", false));5 k$ }% \; s* ~' Q, Z
} catch (Exception e) {
. ]# p9 @" x7 `/ I* i8 F. S' H% j System.err.println ("Exception stepRule: " + e.getMessage ());
; \2 |! K: g$ }: o% g }
1 @* v6 T8 G/ t# G. D6 M$ x( y Y& [4 X
try {
7 Z6 J7 a3 a- X4 e0 y$ H+ C" l3 \3 ~ Heatbug proto = (Heatbug) heatbugList.get (0);* r2 [ t% M, i1 b9 t0 H! {( O, O! W! b
Selector sel = $ P) F0 A' Y9 T5 _
new Selector (proto.getClass (), "heatbugStep", false);
" u1 F. g: S2 T" @/ W actionForEach =
5 v) C0 r( ~: w modelActions.createFActionForEachHomogeneous$call
! _" s- X( K1 o ]2 u$ y3 i (heatbugList,7 @8 d/ K/ |" a- [& x) z0 b5 Z
new FCallImpl (this, proto, sel,
; u+ f) {8 [& \: A: t% F9 d new FArgumentsImpl (this, sel)));
# P! r, b3 F' V: n } catch (Exception e) {7 Y5 t* G- j {7 ?% l! |) A
e.printStackTrace (System.err);& @" S, _' z X9 \ m9 O* s% L
}
' Q0 Z, c) m2 [9 l6 t6 H& k- x
. e8 R/ N4 J* ~7 F) | syncUpdateOrder ();
0 l5 ~# C& ~% b! f! \+ D! r
9 s# Y. m! z' S* t5 y- f; O' L try {( t# ]5 H$ w! T3 b" T/ p$ Z; f
modelActions.createActionTo$message + @- m$ d' T. M( b# J0 O5 M3 ~
(heat, new Selector (heat.getClass (), "updateLattice", false));/ x" C! v Q* U2 l* B& L+ [
} catch (Exception e) {3 Q3 Z6 l; r, @# w* Q
System.err.println("Exception updateLattice: " + e.getMessage ());
$ `. o4 g% Q8 M4 D# |2 ]. a }
* H7 g' f; s+ h V( u $ B5 o6 \7 Y7 I0 c5 n2 b3 X2 m
// Then we create a schedule that executes the
7 T5 M. C6 J5 k' w // modelActions. modelActions is an ActionGroup, by itself it
, D6 |- w5 L2 I // has no notion of time. In order to have it executed in
3 l& u9 i9 r9 r. F // time, we create a Schedule that says to use the
* R4 [8 Z" Y! f$ W // modelActions ActionGroup at particular times. This
' A! R ^. X" A I2 B" J* I // schedule has a repeat interval of 1, it will loop every' E( w! M3 {, j' v' c& ]
// time step. The action is executed at time 0 relative to
' i$ E( ^6 _$ E( x // the beginning of the loop.
8 f: I% l) f2 [$ J G; ^, @6 k! G6 D5 ?* x1 V
// This is a simple schedule, with only one action that is W" v' R4 J2 ~4 z+ a+ p0 @
// just repeated every time. See jmousetrap for more4 {6 W& Z, R, H1 V
// complicated schedules.0 L# _" X& [( P0 ^4 F7 j3 Z* e5 w
- }% @4 P# U# U4 r5 @5 X8 ] modelSchedule = new ScheduleImpl (getZone (), 1);3 ], n2 q* n5 @8 a1 U& V1 b
modelSchedule.at$createAction (0, modelActions);
5 ]+ t9 ^- t/ q" { + e) G$ u$ X0 n- ^. j, G1 y9 E/ t& s
return this;9 I% }' K: \; H- Q
} |