HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* o ]/ Q( q* o! ~* x: d1 Z
1 X( n. U* X8 t public Object buildActions () {
8 W2 }2 q% D2 _* c1 H# V. K8 f3 w super.buildActions();
% w: S% z4 Y& }6 x- W; y1 j. G0 P / i3 a: |& Y6 m5 v
// Create the list of simulation actions. We put these in1 @+ {- H1 R1 S- f/ b8 W
// an action group, because we want these actions to be3 L/ I, e( j6 P- R, Z1 v7 n4 {. f
// executed in a specific order, but these steps should
) E! g6 G6 x; ~$ Z // take no (simulated) time. The M(foo) means "The message
- D, t' `4 X: z# ]: z // called <foo>". You can send a message To a particular
6 U- [" u$ \9 R p. {2 h6 e // object, or ForEach object in a collection.# s8 K0 |# e2 C$ K
' k! ?; O3 M6 u$ Q7 C# Y // Note we update the heatspace in two phases: first run
/ [, J$ D) h0 v- f. F- I // diffusion, then run "updateWorld" to actually enact the" N+ q2 |8 K9 P: _3 k) \9 u, Q
// changes the heatbugs have made. The ordering here is ]. r2 Q" B4 V# V1 A
// significant!1 _6 U4 {; R% I; g6 S, k, {
; |4 C6 r* b" @" p: \) ` // Note also, that with the additional
9 Y1 j0 B( D. i // `randomizeHeatbugUpdateOrder' Boolean flag we can
# g+ F. @* x" x7 K3 D // randomize the order in which the bugs actually run8 Y7 q2 H }, E& y, N* q2 ~
// their step rule. This has the effect of removing any
) V5 }; l( \% b% `* r+ [3 A7 I // systematic bias in the iteration throught the heatbug/ ]% b) |3 Y' e
// list from timestep to timestep
$ H7 t2 J9 o* O# E; P z6 L, y
& g% E" H4 B; |' ? // By default, all `createActionForEach' modelActions have
& P$ ?2 l5 G5 f" O8 }$ x0 u // a default order of `Sequential', which means that the8 |( b) v% h4 s A' r5 r* p
// order of iteration through the `heatbugList' will be
( N' ^9 |0 ~- K: y6 v0 z // identical (assuming the list order is not changed/ @. y$ d7 D/ S) P( ?
// indirectly by some other process).# M, H+ g" R0 B+ K0 `
6 F$ f$ A" z( Z( e1 Z2 V. | modelActions = new ActionGroupImpl (getZone ());# Q1 Y7 A# H0 Q: o* `8 S' T% k
2 O4 q" w9 C3 J' r* K6 t
try {; L- ^) {8 ?+ h6 Q, j0 _1 w5 E- H
modelActions.createActionTo$message
0 ], l3 c" l& O1 Z# u3 L. O (heat, new Selector (heat.getClass (), "stepRule", false));
4 Q. A% E1 ]2 U1 a; C% ^ } catch (Exception e) {
) c) \+ o2 B: a5 z* m+ ^ System.err.println ("Exception stepRule: " + e.getMessage ());- H `1 _3 G! s8 N# i5 j) V: h
}) a0 t2 X( ?) Z, b
9 \5 a& Q1 Z& g5 o* j$ k
try {6 D% r [ F. g9 J' e+ F2 e- [
Heatbug proto = (Heatbug) heatbugList.get (0);7 r1 @, t Y8 m: f- T! v/ P6 b4 {
Selector sel = 7 R' Q) m: r2 @: G4 h+ N) h
new Selector (proto.getClass (), "heatbugStep", false);; Z4 V4 F! H# H6 |" ?" U
actionForEach =4 {: ~" s6 a8 A3 B# J
modelActions.createFActionForEachHomogeneous$call5 G' s0 G2 i- T* h' x
(heatbugList,, s% U+ Z+ F$ E) t
new FCallImpl (this, proto, sel,
& [3 B9 b4 L& o6 Z3 d$ F0 U new FArgumentsImpl (this, sel)));
. k/ ]5 N- l3 J! Y( v) c } catch (Exception e) {) T2 C3 p- `- g* S' u V8 A4 U
e.printStackTrace (System.err);2 y7 Y. s- Z5 K
}- H1 Z, r2 z6 E* j
( F, ?+ D/ n6 U' l7 G+ {
syncUpdateOrder ();
! c" C1 H+ q& `' s" A$ h. ~$ _# I! i8 |
try {
# X6 r; B& T% W) I6 U2 V r$ W" l modelActions.createActionTo$message 1 C# n$ m) w. _9 b. M
(heat, new Selector (heat.getClass (), "updateLattice", false));
& E9 q+ g8 a( T* B* T7 r; s } catch (Exception e) {, U9 D) ^9 a! h* ]7 X$ j" J7 ?
System.err.println("Exception updateLattice: " + e.getMessage ());
0 `& N! \7 t2 S }
8 h+ x% S9 S8 m$ S0 L
0 i' Q! `. e! L; {. } // Then we create a schedule that executes the
- r! b' X% n- `* u2 M // modelActions. modelActions is an ActionGroup, by itself it- W k' Z+ Q, U( ^, P( s& L0 c7 ~
// has no notion of time. In order to have it executed in# G2 A/ H/ K5 H* n0 F/ G
// time, we create a Schedule that says to use the, Q3 z- o9 d+ v8 O9 S) s0 j
// modelActions ActionGroup at particular times. This
4 R; O5 `3 c/ ~3 c% x- f4 F // schedule has a repeat interval of 1, it will loop every
7 K; S% P* Q8 [5 l" F // time step. The action is executed at time 0 relative to
3 T! S) x4 A1 q // the beginning of the loop.3 n$ P, {& [) @ G
' w9 x& E$ l0 r# l // This is a simple schedule, with only one action that is
( A6 P1 v2 \- ?7 z Q1 M // just repeated every time. See jmousetrap for more! q; w4 o; G; y' j# n
// complicated schedules.& [ z( `; w+ A8 u3 h
' ]9 K- X2 q1 d6 L/ n8 V' b modelSchedule = new ScheduleImpl (getZone (), 1);. ^. ?" |# Q1 I+ K, O K
modelSchedule.at$createAction (0, modelActions);
( \2 G( h* b( T3 F6 B6 ?# b8 H j |% }: g$ f/ x
return this;
$ Y1 C& U& v. X7 E } |