HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# I7 i7 A8 x% c" E
- f* V3 e8 g5 L public Object buildActions () {/ [) P `( q$ P' [: C; |+ I
super.buildActions();7 J. K5 i9 i: o! P) J+ G
% z- X- ^: E2 `0 D% O
// Create the list of simulation actions. We put these in' ?0 S2 ~: _: r8 p. F. ?
// an action group, because we want these actions to be
7 Q1 @) ~' O; p8 g. \' o8 s // executed in a specific order, but these steps should
3 R" g5 s& |; q+ m% p& i // take no (simulated) time. The M(foo) means "The message
$ v1 [0 M) X$ R& k; R) q* t' U* O2 h // called <foo>". You can send a message To a particular4 |& T. V- Q* `4 g
// object, or ForEach object in a collection.- R0 m8 v9 Q E& {! i& e, Y7 ]
& l9 X+ t n9 A9 F0 G$ E
// Note we update the heatspace in two phases: first run" n" e; u" \' @5 w6 V0 z0 c0 S8 t* ^
// diffusion, then run "updateWorld" to actually enact the
6 q* z% b. E1 U; z // changes the heatbugs have made. The ordering here is
; V' v( Q7 w6 v7 V2 u // significant!
: P+ ?# K" Z' v# @" C5 I1 E+ Y6 z
4 L+ k7 B% p {0 n6 _) p // Note also, that with the additional
- H3 ~0 c( {4 f3 ^0 n: L& U // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 l2 |/ \ U% Q3 H // randomize the order in which the bugs actually run
: e+ I7 ^# l0 x3 ] // their step rule. This has the effect of removing any
$ d! G& v: o% N+ v% c( q: c // systematic bias in the iteration throught the heatbug
9 A0 L: t! J- |- s8 _! j // list from timestep to timestep D2 L7 a; h9 i" `& A5 H/ O& e) q8 J
' \0 v7 Y) U6 C- A. p8 c3 i
// By default, all `createActionForEach' modelActions have
+ p- t: }, U, Z // a default order of `Sequential', which means that the, {- c% v* ?6 j" z+ C
// order of iteration through the `heatbugList' will be
/ ?; z5 U" Z# h5 F, X$ j/ p // identical (assuming the list order is not changed( k- H, q, O2 Z# U5 w
// indirectly by some other process).
3 Q: D: P, U% x2 P# |
1 c: Q3 s* p/ P4 m modelActions = new ActionGroupImpl (getZone ());* h z9 Q7 ?% X/ s" A9 S1 G
0 `& A- E. F+ u' j0 N* F try {
3 n+ m4 w4 t1 q! M; T* y7 ~! g1 G modelActions.createActionTo$message9 r* ]. F( o \& | a/ X
(heat, new Selector (heat.getClass (), "stepRule", false));
# E$ ]" p; [$ v: p% b- j- t } catch (Exception e) {* h: k1 h. { c& t) d/ O
System.err.println ("Exception stepRule: " + e.getMessage ());$ N) |* D, A6 v" }( F8 g
}
; a D- k' I' E: S {- d& m& K! T6 b; p' P* Q3 |2 z7 R) R
try {
/ B+ }- a0 G8 }) o$ W* Z/ ^/ E Heatbug proto = (Heatbug) heatbugList.get (0);
3 n7 O) p/ `( @7 k, N" y ]7 o0 e Selector sel = ' K) c3 Y/ M8 L1 P
new Selector (proto.getClass (), "heatbugStep", false);" Q+ `0 g4 t. v/ S
actionForEach =9 `, K* T1 F$ K
modelActions.createFActionForEachHomogeneous$call
: @; i3 R! G; W: a1 J (heatbugList,
% S2 @- K1 ]! Q! a3 j1 R new FCallImpl (this, proto, sel,
2 @9 L) e4 l; n+ Z new FArgumentsImpl (this, sel)));
7 t6 s7 ~2 ~$ `* @, u6 t, Q5 @0 s } catch (Exception e) {
$ |- X: f2 B+ Q+ X- ]& \) G4 p e.printStackTrace (System.err);
5 T0 `) b* F( B8 O: ? }) w& C' }* E* ?) O0 b6 G7 V' y
" d, D( _9 r& e% R: p) S" Z syncUpdateOrder ();, E$ V* S& K3 O8 L7 q7 o7 l. t2 D
# k& { U' M. V4 w try {
4 _/ j5 z$ q2 c" ]# T, q Z modelActions.createActionTo$message $ W+ b% V! n: y9 l
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 K m: I! ]* i } catch (Exception e) {- p- ~( m' m3 u2 B' w$ i* M* B
System.err.println("Exception updateLattice: " + e.getMessage ());
$ ]9 U( B$ r) m+ R9 O* G1 N6 g7 y1 x+ _ }
3 v* P, O& i; b 4 x n r/ P- ?. l
// Then we create a schedule that executes the% m) u- ~. ]8 Z) T/ l; p
// modelActions. modelActions is an ActionGroup, by itself it
" X+ U, R' q5 | // has no notion of time. In order to have it executed in
5 v7 |8 \! D/ w // time, we create a Schedule that says to use the
6 Y, h7 l2 k* l( X7 f# A0 ~ // modelActions ActionGroup at particular times. This! {: y9 A6 j. H
// schedule has a repeat interval of 1, it will loop every
0 g2 T7 a0 Z+ j Q5 Y6 \9 c% O // time step. The action is executed at time 0 relative to
6 I3 ?% B& R4 _- B$ g0 @' _0 [$ [ // the beginning of the loop.
; L& n; E6 ^9 F6 U$ v* d
( s* o( G; N9 t4 p ^ // This is a simple schedule, with only one action that is" \1 }; G* T: K+ f) n2 T) |" f
// just repeated every time. See jmousetrap for more+ i4 w! a# w% ~, d1 c* ?
// complicated schedules.
: J- `, `$ z+ @* w
' p: u9 f& U7 Q3 W modelSchedule = new ScheduleImpl (getZone (), 1);* w" k: u1 ~+ l7 K* a) p
modelSchedule.at$createAction (0, modelActions);
' Q. k* K# {9 u; Y. q 5 P* C, O. w5 L* I- b
return this;
3 m7 j7 ]3 a5 J$ y% x2 ^, \ } |