HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& v8 i0 {* q% [3 ]+ `) N- U$ \( y) t2 d1 H, {/ p
public Object buildActions () {/ V, H8 C9 U( d
super.buildActions();" ~5 H7 {# E: b1 d, k
2 [2 c0 }9 V" M6 ^
// Create the list of simulation actions. We put these in" ~3 b: Y+ l+ P& ?$ Z( P
// an action group, because we want these actions to be" a* |6 x: J6 x. @/ E4 _+ ~% u4 B
// executed in a specific order, but these steps should0 i1 [ ~% F( q7 y9 r" Q- ?) C
// take no (simulated) time. The M(foo) means "The message
) }; e8 v6 K, A) Q! |6 W% l( [ // called <foo>". You can send a message To a particular7 Q) y2 s4 E# v0 F
// object, or ForEach object in a collection.
% O6 _, ~+ U, T: H/ m* v" _: Z $ F0 s3 l' K$ K# ?6 V5 L0 G
// Note we update the heatspace in two phases: first run
+ t" _5 Q/ C/ K. {+ Q8 ?% X* } // diffusion, then run "updateWorld" to actually enact the
' p0 a' i2 l$ L! D // changes the heatbugs have made. The ordering here is
6 l* P& D& R* v/ C6 ~ // significant!
$ F6 l; T' h! j 1 F- v+ |: K8 x( O7 m
// Note also, that with the additional
" {( q$ k) c# U; ?5 a v5 |4 G // `randomizeHeatbugUpdateOrder' Boolean flag we can+ o5 g I2 K5 ~/ I/ E, n9 E9 D
// randomize the order in which the bugs actually run, `- f' Z# Y( C, T0 z" ]3 o
// their step rule. This has the effect of removing any, y) B3 V& I; M7 O8 s
// systematic bias in the iteration throught the heatbug
+ `) z1 G0 R) B# T // list from timestep to timestep2 U0 N" W: ^- [7 i8 Q* c; Y: P. U
9 f3 m4 m6 ~' w; J, s* b // By default, all `createActionForEach' modelActions have$ n: x2 y* q. J7 s o9 h D `( j
// a default order of `Sequential', which means that the
& q7 P& v) O3 V2 N // order of iteration through the `heatbugList' will be
* m3 M2 w8 H" u- L // identical (assuming the list order is not changed) c! W8 ~& u7 t. E9 l: S% w; I! o. j
// indirectly by some other process)./ @! f2 c+ g' ~9 c B! J
* t: |; s G& G( h modelActions = new ActionGroupImpl (getZone ()); B, S9 V8 @7 ~) X
1 F5 R3 d0 i) m9 Y+ k
try {4 S& |7 R8 u. u9 N
modelActions.createActionTo$message
( S, { A; y7 V3 I (heat, new Selector (heat.getClass (), "stepRule", false));
8 m9 j# e/ j3 `+ Z8 E } catch (Exception e) {: L6 A* v3 l/ e( C: V
System.err.println ("Exception stepRule: " + e.getMessage ());
" l4 H0 l# g1 d5 k }
9 H2 T: F$ i0 h9 C
, k# @. f6 J* v/ E try {/ ~" Y' E* e% [" p m5 [
Heatbug proto = (Heatbug) heatbugList.get (0);
8 J- @ N' q& s, Q- }: [ Selector sel =
% a# u0 a2 ^; Q1 y8 U new Selector (proto.getClass (), "heatbugStep", false);
6 U0 m4 o2 F9 j( P- V: w* I3 V actionForEach =9 P& F4 |. Q6 w' k
modelActions.createFActionForEachHomogeneous$call" I" _: c8 D; k+ w
(heatbugList, Z% q" C" U) E2 i+ Y' y, f$ R4 O
new FCallImpl (this, proto, sel,' a+ j* G# ~* X- h, E
new FArgumentsImpl (this, sel)));
& W. d3 x8 G$ j* \5 n2 y0 y7 G } catch (Exception e) {
- Q8 ? B9 ]9 v+ I4 M e.printStackTrace (System.err);
) ]2 J$ J) F" _- G9 K/ v }1 k! F8 L+ o$ y0 T* H
- I+ i* ^/ }! X( ^; p syncUpdateOrder ();/ O( \+ ^( I0 G$ @
; r9 k* l( p+ x( M& k$ j! I" P try {8 c& H9 a+ ]8 Y! e* r5 U
modelActions.createActionTo$message , o4 W# Z9 a1 b+ s @& e. @# a* t; {7 a
(heat, new Selector (heat.getClass (), "updateLattice", false));0 _7 ~. c( _ H c( H! m) c9 \
} catch (Exception e) {
# U4 k; f+ ^8 ? System.err.println("Exception updateLattice: " + e.getMessage ());* O% L* n( s+ M" _
}
& B0 t e! \+ l% t5 \0 r3 y- b
! u1 N/ e! w' w# W // Then we create a schedule that executes the! J/ G& p5 c J/ ?
// modelActions. modelActions is an ActionGroup, by itself it
; q+ }2 X& t% u- O' S // has no notion of time. In order to have it executed in9 y) v' d( V1 Y" G
// time, we create a Schedule that says to use the/ m! Y( i5 B# K. K9 z( h
// modelActions ActionGroup at particular times. This
) `- E1 X% H' Q& i' S& c( C* @ // schedule has a repeat interval of 1, it will loop every- D3 h9 |7 w3 \1 L1 x. m; d
// time step. The action is executed at time 0 relative to9 r3 K+ u6 T1 N/ O: E6 S5 u( j
// the beginning of the loop.; k4 k" Y! \: z2 ?" q
6 Q# F' U9 R5 y6 i6 j
// This is a simple schedule, with only one action that is
& A9 b0 T& g! f+ E) Z7 V // just repeated every time. See jmousetrap for more* Y9 A; g. w+ K }* m
// complicated schedules.
1 a% C8 v+ {- e! h
1 U. W+ B' i! n. ]' F5 L modelSchedule = new ScheduleImpl (getZone (), 1);, t; u0 h6 D" W& `
modelSchedule.at$createAction (0, modelActions);. U8 @4 [( f! c/ I2 ~& w
) o' u# u: H; J1 s+ u/ P2 `6 m' [3 E return this;' e- k8 \$ I9 i4 {/ G* H1 o
} |