HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; Q) C1 d* Z- S4 h- c/ |
, }/ F# I4 t* Q0 q public Object buildActions () {
+ `% Z7 z' C, K$ [5 c2 x super.buildActions();
* g* x# @8 M& C
+ R, _" i' M, N- n" b" t" z& ? // Create the list of simulation actions. We put these in
6 q; @3 ]8 [4 Q2 j5 n9 N; b1 a // an action group, because we want these actions to be) \ L# t }$ V! v- k. ~
// executed in a specific order, but these steps should
6 m _ g/ t7 G, m" s/ A // take no (simulated) time. The M(foo) means "The message6 u# ?$ V/ ^) F; E
// called <foo>". You can send a message To a particular b: k. t- y q3 y1 q( A
// object, or ForEach object in a collection.
5 Y8 l# S9 i6 K8 @! a! {( ^3 n3 F- J
# D2 _2 [) [5 | // Note we update the heatspace in two phases: first run2 `0 c" Y( Y9 B$ p
// diffusion, then run "updateWorld" to actually enact the. ~8 F# n% x- x
// changes the heatbugs have made. The ordering here is
1 s' A) W4 ?$ N4 o& x8 B N // significant!2 t5 }5 c6 E. e( |/ j
& X5 U a$ V5 z5 ?
// Note also, that with the additional
7 @0 l7 A, g- m" |" z6 G // `randomizeHeatbugUpdateOrder' Boolean flag we can) v8 \% }8 f3 w n9 r, r" r# R' g
// randomize the order in which the bugs actually run
* r, b7 n2 x. b( K* D. q+ o! y+ b // their step rule. This has the effect of removing any
9 f- w( Y4 x4 E, _( `2 T2 z: v9 d // systematic bias in the iteration throught the heatbug. F$ Z* n3 R9 E& j
// list from timestep to timestep) J1 ?* q4 e5 K+ m6 @) i% y4 `( g
9 Q# ^( Y3 d% \: b
// By default, all `createActionForEach' modelActions have
9 G! y7 a' G7 B' b // a default order of `Sequential', which means that the
5 o) E: D, k& }- h$ A' A. p // order of iteration through the `heatbugList' will be
7 `$ F9 M, b2 c+ t/ G: [: E // identical (assuming the list order is not changed, U' x" g `% [3 R
// indirectly by some other process).
. D7 q- ~" j. P6 Y! ` 0 ~7 H( e9 J9 w1 t
modelActions = new ActionGroupImpl (getZone ());
! S$ n. S- E% ~* s) t, }: r6 }1 |$ A5 @0 g1 E& i% A7 Z3 i& y
try {$ d/ a% u* @( Q$ ?$ B( p d" V( }
modelActions.createActionTo$message
- z2 R: Y' ?4 [# }4 Y b" f (heat, new Selector (heat.getClass (), "stepRule", false));3 n9 K6 H, A/ Y
} catch (Exception e) {
- l8 I' L! u; j, d" X System.err.println ("Exception stepRule: " + e.getMessage ());
; J8 g; f# [1 Q9 _ }
8 {# b( H, S0 [7 ?3 L9 D, w9 F
2 u* P' ]7 o* M3 F# y9 E& J try {
1 q: ^2 }( Y6 F! T Heatbug proto = (Heatbug) heatbugList.get (0);- `( W! p4 u( T/ d( R
Selector sel =
; L0 D2 u( P: \5 |+ j' _! y9 i new Selector (proto.getClass (), "heatbugStep", false);" H+ X* M' y/ z8 w- g, ~; ^
actionForEach =- A; R9 Q6 B1 _9 o
modelActions.createFActionForEachHomogeneous$call
Q" Q! _2 w" z. _1 N9 ~* f" T; I' O (heatbugList,! J$ Z0 o1 \% X) Q6 C O! n
new FCallImpl (this, proto, sel,
$ m* G( v9 j6 B3 m W5 t new FArgumentsImpl (this, sel)));
8 X3 p5 u& L z h- f1 ^2 x } catch (Exception e) {
% P6 A; j8 {, G2 m& { e.printStackTrace (System.err);
1 b/ `) f/ f [) x }
* n. g. j3 U9 Q1 c& o
- s& a u2 w* @' X. p) ?5 U: d syncUpdateOrder ();
7 F+ ]3 l0 T' L8 }' f u
' \2 B% F8 ?0 j/ X try {
7 Q Q' e1 ^3 @+ h" O6 s modelActions.createActionTo$message $ j3 E0 n" w4 m0 p
(heat, new Selector (heat.getClass (), "updateLattice", false));' J! Y2 S7 y8 c6 P$ i
} catch (Exception e) {
8 e9 b: S0 t p1 v. Z System.err.println("Exception updateLattice: " + e.getMessage ());1 G; B) J5 T" ?2 I
}6 F% t7 M! C4 a& V1 p
6 ?" V! x6 G0 ~+ g1 F
// Then we create a schedule that executes the$ s1 }- n% z2 b
// modelActions. modelActions is an ActionGroup, by itself it% \% ^9 h5 b6 b
// has no notion of time. In order to have it executed in6 a7 {/ x8 w/ O
// time, we create a Schedule that says to use the
2 I$ J& }7 w3 @7 H5 H9 V( W- V // modelActions ActionGroup at particular times. This
' ]/ F* y1 M$ y5 B n2 X) }+ b% U // schedule has a repeat interval of 1, it will loop every
9 X% [5 Q, e* `2 ~% d# w% z0 v; C // time step. The action is executed at time 0 relative to- I A C* z, |4 Q- p
// the beginning of the loop.
+ A+ ]- a) }9 L) [2 [& J: R" y0 t4 F4 p, Z6 H
// This is a simple schedule, with only one action that is
& s; s+ q; D: \1 P& K2 F // just repeated every time. See jmousetrap for more
4 b+ r: f8 M5 U5 Y! b8 Z // complicated schedules.
0 Q4 Z3 e6 x( y% t
7 N3 @ D/ Z* N. G1 Y modelSchedule = new ScheduleImpl (getZone (), 1);+ s0 e' Y* _, }& F! M
modelSchedule.at$createAction (0, modelActions);
& S5 z1 ~' v" o$ k 6 [+ C* J. Z; {# r* S7 M8 I
return this;, a7 P$ Z& e0 T
} |