HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 c1 f8 ^" }% ~' r* o- _2 [# P0 t Q8 y4 D6 g# x
public Object buildActions () {9 J# V# ^+ ?& K- h, J0 }& {
super.buildActions();
% `9 _7 [( z0 V
7 b9 Z) i: }. d) @! }4 k // Create the list of simulation actions. We put these in% _: F# e& [# q1 E6 c6 w
// an action group, because we want these actions to be
5 B5 l0 s1 {0 S+ L3 B // executed in a specific order, but these steps should
6 I1 p2 S6 @ e4 G) n2 y // take no (simulated) time. The M(foo) means "The message
# o: ]) i5 x; `0 U/ t+ e // called <foo>". You can send a message To a particular
2 _; v% |& W" {; @/ `+ J, l) y6 C // object, or ForEach object in a collection.; F1 r' \- B2 I/ Q% X8 h
! M* P) l7 S6 D) i+ ~( M // Note we update the heatspace in two phases: first run
/ R9 A7 c* x9 K! z // diffusion, then run "updateWorld" to actually enact the" O! D& g: E$ M
// changes the heatbugs have made. The ordering here is8 F6 E/ t" o5 I& V9 M
// significant!
- Z6 v' y) `" S! Q. e ' r. K& Y" [$ l: Y) f$ V
// Note also, that with the additional$ `0 f6 a8 a* e$ g8 R* B0 Y% Y5 X' Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 L9 B9 {' p0 G // randomize the order in which the bugs actually run
5 [1 G3 [3 I; W! a$ M7 F W // their step rule. This has the effect of removing any
5 Y* L+ W( d( J" g9 `# Q2 }2 a! ` // systematic bias in the iteration throught the heatbug9 h% B. r) Q5 o, Z: ~9 @
// list from timestep to timestep
8 U) _( Y: L- Z$ J
8 G) |1 a- Y2 a0 C. H: l* L% h7 H // By default, all `createActionForEach' modelActions have
# o0 d, p% J S1 v- m; h t; ~! v5 v // a default order of `Sequential', which means that the
8 I/ G$ L; \& j6 K9 H/ g5 E // order of iteration through the `heatbugList' will be
3 O2 `" Q5 \- L% T // identical (assuming the list order is not changed
: G, i& s2 n# k/ x2 f4 }7 V0 } // indirectly by some other process).& V" | y' R" C- p7 w, O6 o# k
- @& t1 F% f* _" R; W/ F' u6 J
modelActions = new ActionGroupImpl (getZone ());0 r1 ~$ `, [9 r7 k! n8 s0 ]# ^
( E0 C& K" k& [" ? }
try {
, ~) v0 L' @5 z9 d( W8 P4 u modelActions.createActionTo$message f' W9 @5 u! E
(heat, new Selector (heat.getClass (), "stepRule", false));
) N. I% R+ |# W4 @6 M1 Y/ f } catch (Exception e) {
( S: D3 ?& c2 h& A. N System.err.println ("Exception stepRule: " + e.getMessage ());
5 A/ m7 V$ g# N }
: o" ^7 J; M# W# J/ x' G: X8 p
7 R. ~% h" }" ^ try { C- R( R' H4 @ l
Heatbug proto = (Heatbug) heatbugList.get (0);
9 U' y: H0 ^' r- P3 e( E( g Selector sel = 4 j; {: y% J' K1 |/ L. N
new Selector (proto.getClass (), "heatbugStep", false);
4 {4 e: |4 h' C/ `- M0 O actionForEach =
" _$ T3 a9 l; |; w& L modelActions.createFActionForEachHomogeneous$call
- y4 T7 Q9 ?: w, p3 C4 y9 A0 I6 I (heatbugList,- t: R2 ?9 ? N! F" {5 m5 R
new FCallImpl (this, proto, sel,/ \+ W$ h! S6 [+ E( h: I8 z
new FArgumentsImpl (this, sel)));
$ c; P' a; @% l I$ m9 [5 R } catch (Exception e) {: T2 `4 w8 v. \
e.printStackTrace (System.err);
! o. }, K: q" ^% r }6 \6 x+ d1 R @' G! o; @
# X2 l* \' H8 i c+ K } syncUpdateOrder ();
* f( Y: m; c, Y, O! Z# @1 [6 ~# }& n6 A4 w' w2 A) F3 w# V" Y* S
try {/ t0 V3 [( C v& c/ s( a: H. K
modelActions.createActionTo$message
/ P e6 x% I5 V1 ]0 K+ ^, }' k6 _5 T) R (heat, new Selector (heat.getClass (), "updateLattice", false));: B; F* P2 F" G( y3 p
} catch (Exception e) {" t8 T& e4 t* u6 \+ p. L3 l
System.err.println("Exception updateLattice: " + e.getMessage ());( p; ?8 C& j* Z* f: k# K
}
* v; C4 e4 |3 i z
1 q& V; V$ n$ p" X% G7 w! x. G // Then we create a schedule that executes the
+ E! i' u5 F0 \3 C. w // modelActions. modelActions is an ActionGroup, by itself it
& ]( Y3 @) J) `: y9 @7 I // has no notion of time. In order to have it executed in$ M: X- }) h& R+ `
// time, we create a Schedule that says to use the: c* l0 d2 s0 |# f
// modelActions ActionGroup at particular times. This
& q, y6 b ^' b0 `$ y // schedule has a repeat interval of 1, it will loop every
; X. x+ f L5 p // time step. The action is executed at time 0 relative to5 ?9 y B1 C' ]8 C
// the beginning of the loop.
4 A$ }4 E" @3 b: i, C
+ W2 O! V9 X, M2 Q+ _' Z // This is a simple schedule, with only one action that is
0 }1 t8 K9 f5 u& {! e // just repeated every time. See jmousetrap for more* M- H5 W& O' u4 K5 l6 D N
// complicated schedules.+ S9 ]+ R& E- L- O/ e/ ?
( q3 m; m+ E2 H. S2 W& Q- N5 S modelSchedule = new ScheduleImpl (getZone (), 1);( _8 d) ?4 a; ?# q D
modelSchedule.at$createAction (0, modelActions);
0 b2 P+ t3 H* s* O $ l7 N# M1 E6 `
return this;
$ J# D" F- ^, Y } |