HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) Z' U) ?4 S. c5 s) F J
- J( F7 m! `) J- u( }4 d4 k5 P public Object buildActions () {
8 n c% S5 b1 A# t+ G+ [9 O super.buildActions();
& W1 b8 r* d% }/ _& X1 k 4 J5 l! R) U0 @' i
// Create the list of simulation actions. We put these in0 S& }! W; G% l2 @/ M3 x4 b; `
// an action group, because we want these actions to be. @* L# R7 h `: p8 Z. ?% D
// executed in a specific order, but these steps should) b! M+ b: k" Z( G! B
// take no (simulated) time. The M(foo) means "The message! U8 f; T; n/ u7 E, @
// called <foo>". You can send a message To a particular. `1 x' X' _3 p Y* J
// object, or ForEach object in a collection.
2 |$ Q4 q- L6 V x - P9 j1 J) S9 X& Y/ {
// Note we update the heatspace in two phases: first run2 t: c& F0 W0 H' n. d
// diffusion, then run "updateWorld" to actually enact the
+ n" I4 ~2 u! u: V8 o: E3 j" ` // changes the heatbugs have made. The ordering here is* @# X# X' f. Z
// significant!3 O% k( T3 a N4 ^. c) b% |
/ b: x9 h: ]5 Y1 @+ S3 m+ K // Note also, that with the additional$ o5 e/ g1 w; O5 @! T6 K2 L/ n
// `randomizeHeatbugUpdateOrder' Boolean flag we can- i! w1 ]1 n5 L, u4 W2 G
// randomize the order in which the bugs actually run( N Q- H! I6 c4 X( R
// their step rule. This has the effect of removing any
) ^+ k' a: y7 P2 ~; [( [! x // systematic bias in the iteration throught the heatbug
5 D N' J( t+ @/ S4 x5 E3 [ // list from timestep to timestep: D3 t! Q. t$ f$ \' o
- P- W7 ]5 Q$ g9 X( ]4 S6 ] // By default, all `createActionForEach' modelActions have
# o _, [: x P. w& c* E // a default order of `Sequential', which means that the6 T8 e8 n `4 f9 W6 Q5 ]
// order of iteration through the `heatbugList' will be
: q6 l$ S9 U5 D( t* [7 u. ` // identical (assuming the list order is not changed
* Y0 k% b7 n4 }0 V // indirectly by some other process).4 l3 g9 X* @! l1 e) c9 k! x$ c$ `
0 g: ]3 \& R1 q( s1 i; \
modelActions = new ActionGroupImpl (getZone ());
p7 a4 Y# Q$ P) S" p
* f1 ^& \1 e. ^! p0 t* f4 j try {
% I$ z3 D: ~! W0 d! a0 M1 m8 R; e modelActions.createActionTo$message0 _/ k) N0 e+ m4 w- l+ N/ b
(heat, new Selector (heat.getClass (), "stepRule", false));
, b8 }+ @) f6 S, k: R5 x1 ~) y2 n } catch (Exception e) {
& s5 w, f2 T3 t) `" \# `$ \ System.err.println ("Exception stepRule: " + e.getMessage ());& r. x1 C f" V* v8 E6 |
}
& V; f) m4 H/ f) A5 Q' d+ w5 w+ S# h
try {5 l8 D6 x' H5 p! w* }
Heatbug proto = (Heatbug) heatbugList.get (0);
. ?: e% _( t7 w+ K9 {, w3 @ Selector sel = 5 g- Z! h. L& L7 [* U2 Y
new Selector (proto.getClass (), "heatbugStep", false);
/ W8 N; L9 Z3 B/ a( d& m" Q- k actionForEach =
3 e- A. s) u% ] modelActions.createFActionForEachHomogeneous$call
; r* ^ g I; O( V# d3 z (heatbugList,6 L( L5 c1 @# O8 {8 R/ n- f
new FCallImpl (this, proto, sel,& L* |9 }% \5 u! `+ W9 @2 A
new FArgumentsImpl (this, sel)));0 e, ]* B8 n7 Z0 L
} catch (Exception e) {" ?+ R$ z2 E6 U% M$ w
e.printStackTrace (System.err);
. u, Z- y8 O) s# z3 ` }
: |9 |3 p+ X# w& F! a4 z5 H/ J ; \! n: D" h6 B |- a+ P
syncUpdateOrder ();! Z- d" K' S' k5 N
' \& u+ e/ N+ ^ I7 \ V3 K try {9 g6 }& g! C" c/ Z# i# ]* W3 n& f! m
modelActions.createActionTo$message % z$ G: r n+ E
(heat, new Selector (heat.getClass (), "updateLattice", false));, K3 W! N9 n; m
} catch (Exception e) {0 ?# B! ^8 \' {4 x2 S
System.err.println("Exception updateLattice: " + e.getMessage ());; Y$ E* C* x" K+ Z( B- l4 k) j
}/ r4 O; h8 c; e; |" c
1 r7 s: N9 q" i: W // Then we create a schedule that executes the
6 W% v6 M* i, a // modelActions. modelActions is an ActionGroup, by itself it7 I8 ~- A' {4 C5 Y. b- R
// has no notion of time. In order to have it executed in8 o' v! m. Z* L; a& y& ~3 v
// time, we create a Schedule that says to use the
! n2 f2 y+ A# A+ W3 T q // modelActions ActionGroup at particular times. This( u$ f1 Q% u. Z
// schedule has a repeat interval of 1, it will loop every
, V6 \2 }/ u1 B( N/ a // time step. The action is executed at time 0 relative to$ I' I: T" _3 a
// the beginning of the loop.
z% ? Z" ~' R9 T$ M" q, `" o/ q" S
// This is a simple schedule, with only one action that is
1 \8 {) V& ]' n" z9 e, b // just repeated every time. See jmousetrap for more( ~- q8 }& a1 A% L+ p
// complicated schedules.. i; L' b( u$ N" L7 X& ?
8 q+ l7 l5 m8 ?7 o6 i, y modelSchedule = new ScheduleImpl (getZone (), 1);
) B9 g. g* w/ a/ K modelSchedule.at$createAction (0, modelActions);
, Z) O% a& K1 M0 X7 e9 j8 R ! ~6 O5 A5 y. L! j: M
return this;/ b& H& a/ Q: c
} |