HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: @) H. C7 S, X2 q; w1 J
7 U7 }; Q' i2 o# P) p* ?+ r public Object buildActions () {4 S" C, e% l# X4 ~4 x* a& \
super.buildActions();
# V. W% S. i" Q5 `0 C7 H6 g 8 j, c" B. w, ?( ~
// Create the list of simulation actions. We put these in. g h; }6 c$ H4 I
// an action group, because we want these actions to be
1 `: K% k0 \( G# i2 p# D! \ // executed in a specific order, but these steps should
) @7 ?1 R0 }6 X& i* f3 {2 Y // take no (simulated) time. The M(foo) means "The message. Y) x* F) L% j: t
// called <foo>". You can send a message To a particular) a& B9 g! Q4 Z
// object, or ForEach object in a collection.
( ~& V: Z: g4 u9 F5 l; Y 1 c7 h/ V9 P. e Y1 r+ y8 s
// Note we update the heatspace in two phases: first run
/ y+ x1 X: n) O. L // diffusion, then run "updateWorld" to actually enact the
* U" L3 j- T; q0 @, m+ b0 C // changes the heatbugs have made. The ordering here is
/ [4 j9 y. V* O // significant!
) \1 k- k' U" E- \7 [4 x1 O3 r* P7 |
0 _; s3 t$ j; z6 U8 b& W6 N" i // Note also, that with the additional) F/ u) ]% n6 \" ^+ X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' k6 q# y- T% S# h& c // randomize the order in which the bugs actually run2 @8 X! `3 m: ^1 L5 `+ X; ~
// their step rule. This has the effect of removing any
4 q0 c1 e% t+ [' p // systematic bias in the iteration throught the heatbug% r' E( o9 ~: j5 K# H# l9 Q! I
// list from timestep to timestep
" c# ]8 F! f3 b* y0 ~# s7 w' r
% ~4 v& s. }; r6 h- x1 s // By default, all `createActionForEach' modelActions have
/ \# j7 ~1 x; s4 q; I) \- W // a default order of `Sequential', which means that the5 D- s/ Q) [& ]* `0 c: ^. A
// order of iteration through the `heatbugList' will be
9 P. _) W, ]$ w( A6 c // identical (assuming the list order is not changed
/ w m, q$ n4 [/ s; @# j5 ^ // indirectly by some other process).
% B& g) Q4 |* A( A. o3 F
# L. d6 L* i/ @ modelActions = new ActionGroupImpl (getZone ());* Y# S- k8 }' `; k% ~* D/ r# A/ j- |3 M# i
6 C1 V, c& p6 W3 b try {3 h1 y7 h/ p J: u
modelActions.createActionTo$message
1 B9 f; x8 n: r8 q8 T3 Y (heat, new Selector (heat.getClass (), "stepRule", false));
: |$ b0 q: ?; T+ C# I; I# ^" J } catch (Exception e) {
$ {8 t, N" v( A8 Z- D8 H; x7 | System.err.println ("Exception stepRule: " + e.getMessage ());
9 `6 m8 K P3 Q. d0 O r, ~+ Z+ m }& D! @" s* v: ?" b0 h K" w
$ I, G$ z6 t% Y, V+ S try {0 D1 c' u( r' X1 P
Heatbug proto = (Heatbug) heatbugList.get (0);
- A& w9 p* i* I i7 o Selector sel = / e2 e0 y# @2 F5 ^* {, m; f; X
new Selector (proto.getClass (), "heatbugStep", false);7 H3 {4 ]4 K P* J2 h
actionForEach =
]4 |! K% b5 z modelActions.createFActionForEachHomogeneous$call1 }5 }, C6 }' o3 D
(heatbugList,- [/ W r7 g4 z7 B- }
new FCallImpl (this, proto, sel,
, w. w, q& M; k2 p new FArgumentsImpl (this, sel)));! p& G% H' u" E. _, S& J' c1 _
} catch (Exception e) {5 n* V/ r! z% `# J
e.printStackTrace (System.err);% y) C5 _. N( R* Y5 d
}6 V8 f! A0 f* d* L9 p0 B3 J
l# z7 f5 |8 c8 Y0 E) v syncUpdateOrder ();# w$ g. ?" Q' l( I$ w& v0 K: x u% w% _
) u0 ] F, Y9 {, V1 y( ^ try {
0 W2 k3 t/ n. H: G' u modelActions.createActionTo$message 3 a7 ^7 w+ z0 D$ S1 \$ L8 O
(heat, new Selector (heat.getClass (), "updateLattice", false));
" B9 ~) v c0 Z. s1 [ } catch (Exception e) {
, s6 y4 I5 }/ d( P# |- W- v System.err.println("Exception updateLattice: " + e.getMessage ());
& ~* D( z4 D" t: Q B1 | }
( p5 _+ \0 z: E 6 a7 D& Y, x7 Q' {3 h$ Y' c+ A. r
// Then we create a schedule that executes the) H* O0 j5 r( b, @0 Y x0 E# r u
// modelActions. modelActions is an ActionGroup, by itself it
( z4 d+ C$ \( L1 n7 d // has no notion of time. In order to have it executed in2 K+ q' v) [% T
// time, we create a Schedule that says to use the
+ Z& J$ u5 j& v8 i // modelActions ActionGroup at particular times. This
. z: W( @: h- k7 H7 Z1 P+ ^; l // schedule has a repeat interval of 1, it will loop every; t. ^2 l: i3 |6 r: F& M
// time step. The action is executed at time 0 relative to
7 O1 c+ M4 ^2 O4 }( S9 K! s4 F // the beginning of the loop.
- t2 W* C" t0 ?1 ~; |3 U4 L
, [+ g% y; f/ f" C // This is a simple schedule, with only one action that is& B, I4 K( `2 H+ z6 d9 m# D: C, l* O
// just repeated every time. See jmousetrap for more H9 U/ |) s% u" Y# L4 o* r4 n
// complicated schedules.; v& i8 k }1 A# y" W4 z6 l1 r
+ S8 z5 \- @" p: F% M- B modelSchedule = new ScheduleImpl (getZone (), 1);2 z8 _! @# ?; e# K. P/ I' o g
modelSchedule.at$createAction (0, modelActions);
0 R& K% H8 T+ Q: }8 ~8 B$ y! | ) z% K, Q: n. Q$ \0 U, o3 s8 q
return this;
1 [( F! }# ?- I4 F Y; \. H } |