HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( l) x8 }3 @3 m" ]% X& ~0 W f, u# M0 L. ^3 J- P, y% `; s* q
public Object buildActions () {
5 p0 v# L8 Q0 c9 L; S super.buildActions();1 @* m7 O! _( A, ?# c7 P6 ?# e
* O/ u! l9 j t) T9 J
// Create the list of simulation actions. We put these in
* x: S( `! }# H) S // an action group, because we want these actions to be
; G: r6 D6 X$ O // executed in a specific order, but these steps should; c& P& \1 d- `3 M$ l" ^( Y
// take no (simulated) time. The M(foo) means "The message
( A# }+ i v- ?0 k8 ?( r // called <foo>". You can send a message To a particular
1 M0 o& a% {' v- \. k# Z // object, or ForEach object in a collection.
4 Z- H" ]7 W M# v, } 4 t$ }, I1 d& y& I$ I J# L
// Note we update the heatspace in two phases: first run) d( r! w" S5 q3 ?6 o* w: Z
// diffusion, then run "updateWorld" to actually enact the/ B( Q' n; Z& J" u ]+ M2 A9 M& C
// changes the heatbugs have made. The ordering here is
- E0 W: Y9 O+ c$ W) C5 C // significant!8 ]* u. i- L7 A) w
& z; }# ~1 }3 }% G: B, t& w! p
// Note also, that with the additional
* `9 g- D2 n4 \$ ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 D, F2 w8 `$ M1 c7 Z2 J // randomize the order in which the bugs actually run. Q* m, \ [: [2 Y2 H4 r7 E/ l
// their step rule. This has the effect of removing any
4 H4 U. Y7 m- y: p* o8 b { // systematic bias in the iteration throught the heatbug( \9 \$ B! ^4 V* y
// list from timestep to timestep
5 G0 Y5 H0 \9 A6 v) u* l 4 N1 @& V4 ]; H1 }. D6 i5 | N0 F
// By default, all `createActionForEach' modelActions have% T7 T, b4 ^! _0 u8 C) K
// a default order of `Sequential', which means that the( P! P# ~9 s7 J# j/ x3 V& k& V
// order of iteration through the `heatbugList' will be# Z+ a6 G7 w$ M$ P
// identical (assuming the list order is not changed
' ~. [' [% v$ B9 q6 H1 R& A // indirectly by some other process).3 H. k+ B U+ g$ ~6 k' t5 R, `
2 \( j( L2 d) @* e
modelActions = new ActionGroupImpl (getZone ());: v4 z0 a2 B' h" a, x
- p L: n, p3 O
try {
3 E1 q/ s, ] U9 i1 z) O# \$ [ modelActions.createActionTo$message
; u$ C7 t" _' ^" {/ x9 K (heat, new Selector (heat.getClass (), "stepRule", false));7 M3 v& z! `+ @8 h" W$ F
} catch (Exception e) {
3 N% j* l$ b4 a) f& U2 w8 D& p System.err.println ("Exception stepRule: " + e.getMessage ());" y+ ?) s) S4 P
}# c" @6 d! I7 z" ^* X+ P
- K: j( h1 E+ B! A
try {
2 q+ T; y; l' ?7 Z7 y% T0 ? Heatbug proto = (Heatbug) heatbugList.get (0);
7 s0 `! x" _8 I' k/ F% w Selector sel = - H' h, \; d( z; O! D8 Y& ?
new Selector (proto.getClass (), "heatbugStep", false);' i4 ?5 o9 M }) {8 E
actionForEach =
7 z* Z$ t5 z V. ? modelActions.createFActionForEachHomogeneous$call" h, j$ ]0 U+ h8 ^
(heatbugList,
' A% r1 v; N, v2 } new FCallImpl (this, proto, sel,
W, W; P/ e* ?( Z, v6 P7 |" | new FArgumentsImpl (this, sel)));
8 |1 A% J- y% l& O7 G } catch (Exception e) {+ \3 A. h/ y' c" b- D D
e.printStackTrace (System.err);
& M7 Z3 e, U' A& @8 {7 p }
" [. p+ z8 [2 Q
3 U! h- N( z7 n syncUpdateOrder ();
# T% o& k! i3 {6 Z, p9 w8 m1 T) W% i$ z! k" u9 Q
try {, k7 |' p5 V; N6 U% F
modelActions.createActionTo$message ( L' M, G6 |% s' ~% }2 D5 @6 d
(heat, new Selector (heat.getClass (), "updateLattice", false));
, P; ]( I% k/ t: g. f1 ^ } catch (Exception e) {
9 Z, D& \$ J; b P K5 ` System.err.println("Exception updateLattice: " + e.getMessage ());& r9 D! _; i( K" |0 S
}% E3 r: w2 L1 p7 ]- U' E( r3 m
$ D$ U% T/ X6 X
// Then we create a schedule that executes the
+ T7 { T; R# r+ J+ P( V }2 w // modelActions. modelActions is an ActionGroup, by itself it
% A, g4 |; D" g# B. e // has no notion of time. In order to have it executed in
) Y5 h5 e2 A! n" l/ l // time, we create a Schedule that says to use the
! @; ^3 n1 F% r6 D // modelActions ActionGroup at particular times. This+ }6 Q Y7 O5 V1 M3 H; S6 g
// schedule has a repeat interval of 1, it will loop every
$ s$ ^$ z0 { z) C // time step. The action is executed at time 0 relative to W& s+ o# O9 d7 l
// the beginning of the loop.
& P5 F, N" X5 w. m. v# a# J# H. A4 g d
// This is a simple schedule, with only one action that is$ l' f% \' j9 ]) S% h
// just repeated every time. See jmousetrap for more2 z- ~* k* q& t* q5 H$ n5 ]
// complicated schedules.+ ?& A' ~* t w8 S- N
% x8 B" n Z% w
modelSchedule = new ScheduleImpl (getZone (), 1);! g3 q% R& Y4 p+ c+ Y. d
modelSchedule.at$createAction (0, modelActions);
/ f7 T! z8 m3 l% k' w ! d) y3 e$ l o. p& o
return this;
% Z" _* S0 i: G: Y' |& e$ L0 l } |