HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 ^4 Y2 ?$ a/ e. z; N6 I3 f
$ W8 ], I% h, i# u9 B1 D public Object buildActions () {, b: }1 O+ T& S6 n1 J* N8 y. R- x' ?
super.buildActions();
* c# W- H' w# D/ m( Q* M, R. g7 B
0 [. j. ^. \# d. D* ?. q // Create the list of simulation actions. We put these in3 D6 X& Z O: }$ q2 u$ K! c
// an action group, because we want these actions to be$ H1 I; U/ ?+ w- q; u4 U
// executed in a specific order, but these steps should, G. y0 e6 p% I( _! d& [
// take no (simulated) time. The M(foo) means "The message
1 a4 ^5 G6 g0 h // called <foo>". You can send a message To a particular |( \" n1 U) `; F& g0 l
// object, or ForEach object in a collection.
% Y; ]; w$ |" V' S9 o
+ g0 x+ m; e4 A+ J' e, S // Note we update the heatspace in two phases: first run7 k+ r( k; X* M" D( Q9 y3 L
// diffusion, then run "updateWorld" to actually enact the) a% M7 Q7 N5 L& y& v, f. i
// changes the heatbugs have made. The ordering here is3 C( Y* U9 @5 c' M5 z7 y% Q( F
// significant!( T( S0 i6 S' s
% ~6 X% I6 T; M
// Note also, that with the additional v. Y& F- [5 C3 Z2 w9 r8 @7 {
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 B' [2 @0 p3 N [% m- y1 s // randomize the order in which the bugs actually run6 H$ a i# ]) ?" R& o
// their step rule. This has the effect of removing any4 ~1 G! Z7 t' u. m9 n' ?+ L
// systematic bias in the iteration throught the heatbug
" a# C* s8 n4 a1 d6 I // list from timestep to timestep3 D0 r- t7 }* P4 G
4 j+ \0 Q7 a8 O* X6 P2 k u' w. W // By default, all `createActionForEach' modelActions have
x" U' M( N, z6 ` // a default order of `Sequential', which means that the
' C7 b) s; ?. p0 k! ?& g* h // order of iteration through the `heatbugList' will be
5 g: Z# y0 [, i% h3 d // identical (assuming the list order is not changed$ V ]- s; w7 N" p
// indirectly by some other process).
2 Y# }+ w0 n* O7 a
* H2 |7 H+ V; P) U1 P) Y4 d modelActions = new ActionGroupImpl (getZone ());
; _# |3 m* U# }) S F, i
7 I9 x9 v1 a. }5 e w try {$ A% d. j+ A2 v, [1 N* A: s1 S
modelActions.createActionTo$message
2 g- F& ^1 \: A- T0 z, G( S, P (heat, new Selector (heat.getClass (), "stepRule", false));
6 ^% T$ o6 j" Q' y } catch (Exception e) {, v& E" d2 R+ T' |: f+ R, s4 v( H
System.err.println ("Exception stepRule: " + e.getMessage ());; j0 S/ \+ H$ B( ^, U" j2 M5 ?, O
}# V6 ~. x7 t0 T8 r; Z& G# ?8 n
- z) w; Y0 J( t3 i; [; T
try {3 o! S0 |/ A% `6 I
Heatbug proto = (Heatbug) heatbugList.get (0);0 y" A7 d- e( W
Selector sel =
( q9 H# y& J3 n, G( n$ A" J new Selector (proto.getClass (), "heatbugStep", false);
( Y# M) i4 B# x7 ]2 b actionForEach =/ J' c5 |( i/ M- j
modelActions.createFActionForEachHomogeneous$call7 W. @5 ?- h5 Z: \/ c
(heatbugList,# p2 c# I; ?2 ^8 R! V0 p) f8 c: m; R
new FCallImpl (this, proto, sel,
4 P- `) I# [1 x! W6 N9 f1 ? new FArgumentsImpl (this, sel)));
+ \6 g0 Y( \% |% `) l } catch (Exception e) {
* [" |! o( e7 O3 w e.printStackTrace (System.err);
! S. U4 b$ K1 q9 v! d" C6 |5 r }
2 P1 a/ O# e! i0 V( |0 O9 z/ \8 R2 P . x0 H' C0 [& X) c9 O: L, E
syncUpdateOrder ();+ M1 Y5 N* r8 g
! N$ n% _! ?# z
try {2 x$ Z# w/ \3 S4 k, P L" n! Y5 z
modelActions.createActionTo$message 9 J/ v1 B: Q0 O' P
(heat, new Selector (heat.getClass (), "updateLattice", false));2 M. W9 w9 B& c6 P* Y6 h) g3 t
} catch (Exception e) {& c1 ?" H% F, m" T( J; D
System.err.println("Exception updateLattice: " + e.getMessage ());* y& {. Y: A7 \- \
}
% A9 ]0 d( x$ b: r0 r0 P
: e3 ^; ~# k9 ~ // Then we create a schedule that executes the
8 m( c9 A' x) h- m2 Z* s // modelActions. modelActions is an ActionGroup, by itself it, P+ g- b+ X7 D2 }. o
// has no notion of time. In order to have it executed in. |0 g9 B: M \7 U9 m
// time, we create a Schedule that says to use the
, Y" A& X' B" l; ~9 g, ~ o // modelActions ActionGroup at particular times. This# ?7 e$ s$ j" W, U4 B
// schedule has a repeat interval of 1, it will loop every7 Y8 `: J0 `! J+ R }: p* u
// time step. The action is executed at time 0 relative to4 I, y2 o/ D/ B4 x& V$ u% w
// the beginning of the loop.
6 y4 G# `0 n6 @3 l& t
2 T: W( h- G( {1 J; G9 q // This is a simple schedule, with only one action that is
8 _( O/ Y' h5 p" n // just repeated every time. See jmousetrap for more
& c6 s: P- s# O% R& l // complicated schedules.
9 g. N% `# G6 Y: E% D; l. l% `0 ~2 g ) q i V* G% _5 U, ^- r3 @( c2 Q( W
modelSchedule = new ScheduleImpl (getZone (), 1);
0 _2 l# s/ R7 e6 | modelSchedule.at$createAction (0, modelActions);
# |4 a; Q, |/ v+ T& a8 a, V3 \* M1 u
) G2 d( N9 c5 D# _& M return this;: V" P, p v1 i* u
} |