HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 H! V- M6 d6 S! l+ k0 N
& `, v& ?9 m; _ public Object buildActions () {6 p; F& k# S' ?! t* v G* h
super.buildActions();* `$ _# n D$ f* e( F$ i
1 T( X6 n* s& N* o/ ^6 t2 Y // Create the list of simulation actions. We put these in6 t2 U; i. W7 ~( X* I) Z4 s: H2 D
// an action group, because we want these actions to be& E5 Z8 ~. E; O
// executed in a specific order, but these steps should- K0 J4 ^9 W: H! n7 M( l
// take no (simulated) time. The M(foo) means "The message
, `+ W( j5 v8 s2 N7 b& M // called <foo>". You can send a message To a particular
5 C ~/ J3 i% V // object, or ForEach object in a collection.! x5 q9 G: P% D' |+ G8 A
- L! m* d3 |' ^$ F$ ^* v
// Note we update the heatspace in two phases: first run7 m' W6 d. F& t; A' j: T
// diffusion, then run "updateWorld" to actually enact the5 p9 f, |/ U' _. B2 ]
// changes the heatbugs have made. The ordering here is/ U3 _( G! Q# O- H
// significant!
* Q* M: {/ {! P$ \* l 6 _5 X6 J a$ o& c! i* t I6 R
// Note also, that with the additional
* f, g. i2 M5 P5 t0 I // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 j3 C! y. C" N: x4 u4 l! k0 v" g0 g- c // randomize the order in which the bugs actually run7 u. `+ n( }3 `' z; u4 V
// their step rule. This has the effect of removing any7 j. _! _/ U& h4 p
// systematic bias in the iteration throught the heatbug. c7 P& F; F( r7 f5 h/ w/ b
// list from timestep to timestep
6 Z y1 K- O( c. l% p, D1 _, a. C0 a
+ ~8 y4 K6 M4 | // By default, all `createActionForEach' modelActions have
2 r- l3 X n6 Y9 {. @: ]+ O // a default order of `Sequential', which means that the2 i9 x+ G7 ~8 ?. O* ^
// order of iteration through the `heatbugList' will be
$ q' G' n; \# m8 `9 ]/ A3 t+ D // identical (assuming the list order is not changed
; c; I7 ?, G! w( W% Q8 c // indirectly by some other process).
# b- c" X. c( F! ]6 _3 K
: x d: L3 y6 C) Z& }4 M2 E1 a modelActions = new ActionGroupImpl (getZone ());' r1 Z" h+ Q. y: {# C5 R
7 L1 k& d9 I( {* h& K2 m- |! }7 |
try {
3 a" Y1 ]6 O* r' }2 i% o! J" r modelActions.createActionTo$message5 F% E1 t U4 V' E- H
(heat, new Selector (heat.getClass (), "stepRule", false));0 m0 i% b) Q" e1 ?
} catch (Exception e) {
( i! @; T, m9 U& ^ System.err.println ("Exception stepRule: " + e.getMessage ());
8 y0 n# w6 s; f }7 P( }7 u7 e" A0 d/ f6 [) s
0 F' `: q0 s/ ~: b3 X: D
try {4 D4 k( f( F, n' \% L
Heatbug proto = (Heatbug) heatbugList.get (0);
# ^. x+ h/ T5 @: A6 \ W% `: d# k Selector sel = ' K1 W' p% q4 l* M/ l6 |! H* C
new Selector (proto.getClass (), "heatbugStep", false);6 F# ~2 w1 b5 X' N
actionForEach =! N% Q& d2 p1 _! y9 O
modelActions.createFActionForEachHomogeneous$call
, W& h7 Q4 j4 p% [% [. Q3 ]& [ (heatbugList, A$ `' s: _% ]+ D' N9 b
new FCallImpl (this, proto, sel," F- Q; W- R2 H$ N8 B+ @
new FArgumentsImpl (this, sel)));+ W/ l1 P2 \+ C2 T) N5 r
} catch (Exception e) {* j e/ L- c# W# s
e.printStackTrace (System.err);4 x& E0 O7 B! b* ^6 t8 L
}% M/ M( F: {: m6 e7 @0 c
2 N, T: G* S D3 B syncUpdateOrder ();$ i' G/ L0 s* S- I4 E, ~' J
6 h& H3 r- }, m4 A( \- ] try {
- e8 D( d$ K3 A. G; m& E" F7 D# c modelActions.createActionTo$message - W* @" { m* U& L( C+ H
(heat, new Selector (heat.getClass (), "updateLattice", false));: w- N9 d; D& z, y! X3 {, @
} catch (Exception e) {
- L: v6 B' `3 }- F" H System.err.println("Exception updateLattice: " + e.getMessage ());
9 a4 k9 ]1 X3 g6 @% X/ ^ Q }
8 S4 e5 \4 R8 Q3 }& I 6 o L1 P; U. u
// Then we create a schedule that executes the) F9 ^& a/ `" E4 t
// modelActions. modelActions is an ActionGroup, by itself it
3 ?: W# K$ M' R7 {6 a3 p // has no notion of time. In order to have it executed in
: v* j& l# O1 p( \ // time, we create a Schedule that says to use the
) G( a. f: Z9 V // modelActions ActionGroup at particular times. This( ~" V- i, _" ~
// schedule has a repeat interval of 1, it will loop every
1 n5 n! s& P. I/ X6 {5 ^5 p8 d! | // time step. The action is executed at time 0 relative to% Z# L" `( R" S/ r6 z
// the beginning of the loop.
2 ^$ W7 p8 z" Y% {9 I H, Z$ K# R
$ }8 }( f! @5 I0 A // This is a simple schedule, with only one action that is
$ A7 c! @1 r& f // just repeated every time. See jmousetrap for more+ I2 \# D. u c% m" S; {% P
// complicated schedules.
; D( C5 g* _4 y1 o3 G 7 S% ?, `" n; E0 {: ?
modelSchedule = new ScheduleImpl (getZone (), 1);9 ]' ~$ F; [& O; Y; g
modelSchedule.at$createAction (0, modelActions);
5 _" y7 x$ y6 s4 o; z & Q- Q& v1 G8 `' J/ i. |+ ]$ i' m
return this;: E& c5 G$ n+ m7 B: ?, o! Z$ `+ D3 |
} |