HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* p3 A) s) p0 D5 i2 Q; F' F, P5 p) x" M+ {: R0 Z# ` |2 S
public Object buildActions () {( d! L/ w" q/ S! H9 A+ j9 O z" S4 H
super.buildActions();6 G7 b: Q5 z" ?$ d
: S+ d) b9 N/ M: @5 U4 l, [
// Create the list of simulation actions. We put these in9 D F1 S3 y: X2 t
// an action group, because we want these actions to be5 r$ w! d8 J7 Y$ O7 X4 l( I9 ?7 H8 R
// executed in a specific order, but these steps should
; Y& d( t. K6 j" a) G1 F // take no (simulated) time. The M(foo) means "The message) _# [& f6 W" ?* O. i3 ^
// called <foo>". You can send a message To a particular/ J; F# L7 S/ | u) }3 ~
// object, or ForEach object in a collection.4 ?$ D& I2 O0 g+ y5 k% P4 X
% o5 M/ o A$ m+ h- o' I
// Note we update the heatspace in two phases: first run
5 s/ r! \: {( L- _2 g // diffusion, then run "updateWorld" to actually enact the
+ k. I0 [+ |1 ^3 F) k& | // changes the heatbugs have made. The ordering here is
) |6 o# K/ M6 ]. E; c& w& L% I8 S+ ~ // significant!6 `$ R" p' C5 E* ?$ k
1 u! F# c( R5 N+ P' j; C: x // Note also, that with the additional+ I4 ?/ |2 S$ U: [8 Y9 F# `
// `randomizeHeatbugUpdateOrder' Boolean flag we can) y5 c7 _3 x3 l/ r$ Y' k5 c
// randomize the order in which the bugs actually run" z9 j, n' K0 E- Z# }" q
// their step rule. This has the effect of removing any
' B G; U/ f4 d X/ O // systematic bias in the iteration throught the heatbug
' t" l9 w! V4 c# }8 ]; ~1 v3 y H( M // list from timestep to timestep9 Y- R* u6 B* S+ j6 M
, {! s& u8 a* C# ^% Q* y9 t
// By default, all `createActionForEach' modelActions have
( u# e0 {& B! q. ^ // a default order of `Sequential', which means that the
( K; l* { h- T- N/ a& D5 ]4 s* ] // order of iteration through the `heatbugList' will be
! `2 c9 @. b* R( J // identical (assuming the list order is not changed
' _& r) |% |$ v" S& a! V // indirectly by some other process).
h% }# `/ j& b4 }5 @0 j6 x 0 o0 a0 a- d' b4 u3 ~# f `
modelActions = new ActionGroupImpl (getZone ());
n L; V/ i3 }; ]( K% ~: Q9 N C: W k" h/ p% B5 f2 A
try {
, T1 l( x) c3 Z, x B modelActions.createActionTo$message
; N5 ~# E, D; @2 R: }8 [ (heat, new Selector (heat.getClass (), "stepRule", false));
6 J1 g( k- [0 q3 r6 x } catch (Exception e) {
( Y H( D1 Z$ G$ H8 \ l System.err.println ("Exception stepRule: " + e.getMessage ());
9 i# D3 f- b& ^ [0 ^+ H) w }
0 P( v$ `8 q) Q3 M% e
1 l( n2 O+ @5 A try {7 o! Y. N# c6 O
Heatbug proto = (Heatbug) heatbugList.get (0);5 J; z& K4 C S+ v+ U
Selector sel = 5 X3 j/ P6 l6 @5 I* H3 M3 h% Q
new Selector (proto.getClass (), "heatbugStep", false);# g- e) V3 m) [ h: q3 ~
actionForEach =
7 b5 Q% p$ \2 C) ] modelActions.createFActionForEachHomogeneous$call
- D: d. X1 `, U (heatbugList,
6 m7 P# U) h8 \4 a/ U6 K' j7 U% w new FCallImpl (this, proto, sel,. [, j2 m% Q/ M. @6 U6 G
new FArgumentsImpl (this, sel)));
8 K: K+ g" D, l; U! K( b } catch (Exception e) {
& o4 m8 ?" q! ]. [7 L e.printStackTrace (System.err);
E1 \3 Q# E& {4 b* H: j }
+ [2 Q0 j& f# ^0 e1 |, A1 { 2 k' f6 w( r% i( B
syncUpdateOrder ();/ v/ P3 g1 i6 Y7 X! q
$ Q, k0 k2 z8 \9 C0 h try {$ d, T2 e# n9 n7 [8 D& ?
modelActions.createActionTo$message
( D& c3 k: s8 ~ Z8 J0 R# `0 A- u; Q (heat, new Selector (heat.getClass (), "updateLattice", false));. _" d! a# j* W% K9 g; l5 E
} catch (Exception e) {* O) G5 j! m$ h7 H6 C1 Q( J
System.err.println("Exception updateLattice: " + e.getMessage ());
1 N+ s" U z! X+ | W* F }" ~1 v6 T4 @7 l+ ]" q! |5 c
& \9 `1 b/ k h
// Then we create a schedule that executes the
; T) P9 @. O. M% t7 z // modelActions. modelActions is an ActionGroup, by itself it
/ n2 j" A, f! k% c: @- L1 N* ]) e // has no notion of time. In order to have it executed in
' D- v( S& x2 t0 D // time, we create a Schedule that says to use the0 B- a! ]; X7 @! x2 t W+ [) B
// modelActions ActionGroup at particular times. This- U- w; k- B& S4 j. Z
// schedule has a repeat interval of 1, it will loop every
7 p) V( U' r4 F# f' V6 x // time step. The action is executed at time 0 relative to2 {9 k$ `+ P% ~' `! h
// the beginning of the loop.
6 `% o* f4 Q; V% g$ Q' ^' y# r u3 V4 `1 E4 a, D
// This is a simple schedule, with only one action that is
' h( F7 n$ `$ Q% }! @9 a* [$ P // just repeated every time. See jmousetrap for more
) H4 P6 G: U$ @ s9 _" A& R0 N+ V // complicated schedules.7 ~: T5 f# [& m3 k! `9 j
3 ~/ I/ i" k. j! l
modelSchedule = new ScheduleImpl (getZone (), 1);2 A2 O! i' e; L3 L
modelSchedule.at$createAction (0, modelActions); q6 {+ L2 A! U1 F8 k! U
0 H1 y4 c" l1 D! ~
return this;: n0 s; p9 |. p. n& P8 S0 ]6 ^! E
} |