HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* V. [' [" q1 T/ C2 i* v! h. w: H# L
# v5 E& D3 p/ o public Object buildActions () {
$ [3 h9 s0 F" d4 z% s! K7 I super.buildActions();; Z: d2 \+ [+ f2 X1 E* W* s! A6 O# a8 X
# _3 H# g$ @! V" N9 m$ m3 q
// Create the list of simulation actions. We put these in
: Z9 N' ]9 S @, \- r5 T, U // an action group, because we want these actions to be# h/ q% w f) l3 ~/ P9 Y
// executed in a specific order, but these steps should8 I+ b! Q' y. S" q8 R: J$ _
// take no (simulated) time. The M(foo) means "The message! r! Z \2 ]' r
// called <foo>". You can send a message To a particular
% C% l3 p4 J5 J j# P2 F# y$ C // object, or ForEach object in a collection.9 F% [( q* r7 N; G. l6 r
: @: n+ \ @5 h) L, P- W+ T+ H
// Note we update the heatspace in two phases: first run6 E3 s# u+ |% X/ F# L- A
// diffusion, then run "updateWorld" to actually enact the2 B3 Y0 c7 k( Q* \
// changes the heatbugs have made. The ordering here is
6 N2 [# A) H1 ~" }! { // significant!9 l, B0 S8 b7 O$ l8 N5 M! a% f
1 `" t# l# w' s* a // Note also, that with the additional
" g4 h; j& @: d' y! n! B // `randomizeHeatbugUpdateOrder' Boolean flag we can
+ D$ ^8 B. T9 ?. i: e# [! G // randomize the order in which the bugs actually run. c2 V) H+ A2 N2 d( l: o( x
// their step rule. This has the effect of removing any: [# [( T. I S% z
// systematic bias in the iteration throught the heatbug
7 Z W5 B, T5 q- [/ n4 X: Y // list from timestep to timestep
) p' g) z& Z5 }" U
9 B( X+ \1 I3 s) F' Z // By default, all `createActionForEach' modelActions have3 d! z2 Z+ A, @8 r, \' E
// a default order of `Sequential', which means that the
$ b5 |7 y( ~9 _/ a; p# k // order of iteration through the `heatbugList' will be. m8 \: W" }/ B: R4 s- U' W% B
// identical (assuming the list order is not changed% o) K# Y+ ^2 Z% P* d4 s
// indirectly by some other process).
( Z' v# O/ `' G: J- A : k: W7 D4 K) u1 O6 m' o6 Z9 d
modelActions = new ActionGroupImpl (getZone ());
+ i- O$ t" V9 e# G; V
# b, D1 _ P* F7 | try {
8 |, g# e* d2 e9 p& z modelActions.createActionTo$message% ?5 N" d/ m" g$ f/ \; p" X/ h0 K# y
(heat, new Selector (heat.getClass (), "stepRule", false));
4 L& J- h. y2 T/ F } catch (Exception e) {4 e& H2 ?8 m# X7 I# q
System.err.println ("Exception stepRule: " + e.getMessage ());( {4 I5 Q" ^) Q9 Z6 x, O
}
* X* Z* N& L3 p$ M w0 F; H9 I, j6 t2 t L" n
try {4 D5 X' C& `# Q
Heatbug proto = (Heatbug) heatbugList.get (0);
, w* c) w# B; {9 Q' G# \ K( O Selector sel =
8 h3 f7 U) y! h+ @% |* M new Selector (proto.getClass (), "heatbugStep", false);
) b3 x8 S% Z- h6 x- `! M& B actionForEach =
' b7 x z' K% x4 D N* u. Q modelActions.createFActionForEachHomogeneous$call
- a& r4 z* T5 e/ a8 R, m (heatbugList,
; @- I) O' u* r* c( C# B0 m R' @ new FCallImpl (this, proto, sel,
9 \- V- ~4 o0 K0 P) i6 ^ new FArgumentsImpl (this, sel)));
" {& d: U, E3 z! O } catch (Exception e) {
* S- D: P0 }$ ]2 G' _' C e.printStackTrace (System.err);
2 L3 r+ `! k; f1 R( w }
: Y& R* z( ^; B+ N3 Y) Y$ b
) j& ~ ]* @, { syncUpdateOrder ();
0 _8 h8 `0 @( ^' \
1 g3 x& B3 c; \; q8 t try {8 T7 x; k2 s: P; l
modelActions.createActionTo$message
) B. D+ D2 K" K* ]* K (heat, new Selector (heat.getClass (), "updateLattice", false));
* Z" z, ~- T. _4 X# ^ N3 K3 | } catch (Exception e) {
# @" @* P- z. `8 s5 r, c$ U System.err.println("Exception updateLattice: " + e.getMessage ());
5 y0 b9 z; G) ~4 p& y' S- R: ^ }. j! w# b& r4 ^
7 Y+ p, F5 w5 @1 H7 C // Then we create a schedule that executes the% X; Y O0 n$ p7 L8 k# c
// modelActions. modelActions is an ActionGroup, by itself it
& P# q6 }7 p9 g // has no notion of time. In order to have it executed in
4 z- z& C; V, Q6 b) x2 x // time, we create a Schedule that says to use the5 v8 N( ]* ^/ y
// modelActions ActionGroup at particular times. This/ i$ U2 j# O# r+ f" M
// schedule has a repeat interval of 1, it will loop every1 `& A8 v8 `2 H1 c
// time step. The action is executed at time 0 relative to. u+ e0 }# [4 ^: C& B" w1 _# x
// the beginning of the loop.
7 X, e- V7 k$ G; j N
) {5 W0 ~' P" i // This is a simple schedule, with only one action that is
" l p0 b* u7 k8 O! u, }, Q/ K* k // just repeated every time. See jmousetrap for more
6 b' F) s3 B- y // complicated schedules.
' ^; V8 q1 n1 D/ ^: j: L% s % L7 t% b! m6 |. ^. ?1 z0 O- K
modelSchedule = new ScheduleImpl (getZone (), 1);
( _5 Y* b( c: V3 W \: x modelSchedule.at$createAction (0, modelActions);
, x& a+ n3 ?1 z" ^! q/ `3 n' m1 \- y . ~" p1 c* M9 T& F! b; R; v
return this;
/ k% @2 J3 o1 Q/ y( Z } |