HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 z% M+ Z0 K( F! g/ R
2 h! w# h# e. U6 S. s public Object buildActions () {0 j& x5 w& G1 l# u/ b8 F
super.buildActions();
* D; ^9 a: }9 @ w& ~ 0 s- R# P+ y1 [' N2 k% I' l5 R& e
// Create the list of simulation actions. We put these in( Q4 c& g6 b: Q! H1 V
// an action group, because we want these actions to be1 _! V5 h. l1 `1 X) l/ v5 w, s6 l
// executed in a specific order, but these steps should
( n* i. ?% \. ^# d0 J& L. C1 ~8 y // take no (simulated) time. The M(foo) means "The message# D5 d/ R8 I' K6 t0 ?; O0 Z. x
// called <foo>". You can send a message To a particular
' U2 `; S- ^2 [. t# z( r( v5 y) d // object, or ForEach object in a collection./ H' ^; ~, O5 o
1 E- ~* W2 r9 T8 u# W
// Note we update the heatspace in two phases: first run2 ?$ T6 l3 {5 k7 ^# t0 `# D0 N
// diffusion, then run "updateWorld" to actually enact the
' ^! l; h: l. f( u- f/ Z0 p9 O // changes the heatbugs have made. The ordering here is. q9 O. H# b- `
// significant!5 d2 m8 u+ K4 g, O6 Y
5 ?' ?& \: O. c // Note also, that with the additional
: G" l7 f# @; T2 H // `randomizeHeatbugUpdateOrder' Boolean flag we can
9 @: R2 } x, F) n" S // randomize the order in which the bugs actually run0 H( i. T; V) f: t5 k8 G: Y
// their step rule. This has the effect of removing any; \9 Z( l$ Z3 H( V" J- r
// systematic bias in the iteration throught the heatbug6 U4 n* o3 |5 e' F1 U( [% X$ {7 b
// list from timestep to timestep
( ~) s2 k: Z6 b6 J- H ) B, F2 X/ d$ O; ~4 G9 c
// By default, all `createActionForEach' modelActions have
}- i+ t1 Y; m; O // a default order of `Sequential', which means that the1 C* ?7 I! n9 g: \$ L0 @- E
// order of iteration through the `heatbugList' will be
0 r. L1 H6 [7 s( C // identical (assuming the list order is not changed
: @8 k9 I& P' @( G" \ // indirectly by some other process).
@ X6 d+ ]% Q& @
; d2 F+ M4 r6 `# Q1 }; M modelActions = new ActionGroupImpl (getZone ());
" S( q( J; @0 [$ ]: y8 U6 }7 I1 O8 E0 r8 t
try {$ v1 Z- p/ x" M3 S) h. l* ~8 L7 d
modelActions.createActionTo$message2 X/ r) T1 S: ?6 O% k, F8 [
(heat, new Selector (heat.getClass (), "stepRule", false));* D, _- v/ n# V6 H/ K" h
} catch (Exception e) {# [1 \; t9 s% o' y+ k
System.err.println ("Exception stepRule: " + e.getMessage ());1 y, D7 O/ n& h7 o- `. A
}2 U9 Y1 H9 x( ~7 E0 Q0 O: y
/ _) a/ G3 H' K4 }3 n( d. T
try {4 {) @# Y5 L) X% L3 t2 [
Heatbug proto = (Heatbug) heatbugList.get (0);
8 F/ q. w& D& ^1 v Selector sel = - Q- H! G3 p5 Y3 j! x. O, |
new Selector (proto.getClass (), "heatbugStep", false);! M' T' T; \+ E! ]4 H5 U
actionForEach =
4 Z* L: r& q( p# ? modelActions.createFActionForEachHomogeneous$call
2 [/ E: Q# Z5 }5 @. Z C& m4 ^) G (heatbugList,3 Q$ E/ k$ |. d& Z( @
new FCallImpl (this, proto, sel,& l( d/ I: {5 ]+ x g# K! o
new FArgumentsImpl (this, sel)));
1 t* q$ w! f4 D0 r2 p( B2 [: d( {% Z5 i } catch (Exception e) {7 a7 {; L ~' e, v, r& @% K6 R
e.printStackTrace (System.err);
% p" [: L! X5 a" h }
7 [% ?2 k8 j! ?; z3 I1 D
- o0 l4 Y2 ?0 x3 ?+ G* G) c' Q syncUpdateOrder ();
$ B$ f& c7 q. k: N) C# ]6 y! u' t1 I1 L0 g p
try {3 U9 b. ?) M: l Q9 I/ T+ l3 v' ?5 y
modelActions.createActionTo$message , H3 k# g+ ]5 G0 B- L& ~" u7 ^
(heat, new Selector (heat.getClass (), "updateLattice", false));
, L4 R' I" ?+ B3 M } catch (Exception e) {9 E' U9 _$ h$ b; I
System.err.println("Exception updateLattice: " + e.getMessage ());
1 s7 J3 k& r9 |9 |8 ]! G }( W) g9 N* z; O5 p3 A. X3 g
7 [# z6 S% Y3 |! \! \: ] // Then we create a schedule that executes the
2 k B8 S! W* P$ c( x) b; w7 s // modelActions. modelActions is an ActionGroup, by itself it
& \1 Y2 [5 b, Y3 Y2 ^* c) _ // has no notion of time. In order to have it executed in6 G; b; q6 \; ?4 F/ ?# }+ `& u0 }. s
// time, we create a Schedule that says to use the
7 q6 y, g) S8 B: Z5 b // modelActions ActionGroup at particular times. This, |" y v- Y0 S; s5 Z/ ]" W6 u0 \
// schedule has a repeat interval of 1, it will loop every! k5 W$ T( T! J! ^/ u. k
// time step. The action is executed at time 0 relative to
* r1 \. L0 H$ j8 [1 G3 R3 V5 ? // the beginning of the loop.. c% X% M! g- ^; Z1 c8 O9 [
2 Z' r+ e4 P5 ^- U/ p x // This is a simple schedule, with only one action that is- Z2 Q# I7 ]- v# ?5 d
// just repeated every time. See jmousetrap for more
" M; Q3 r% J) |7 |( i7 _+ d5 p7 p // complicated schedules.9 n8 c: F6 O- e" q; H9 Q
3 K P# z9 B4 Y5 L: i: I1 I. u8 E
modelSchedule = new ScheduleImpl (getZone (), 1);
- D; E S( \+ v2 } modelSchedule.at$createAction (0, modelActions);
: ^- V% f& W2 T8 f; N / ?. l5 z* l; B% e( G5 `
return this;
6 t- o% I4 D3 @; b } |