HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. ]( M. q! S8 N$ F* Z3 i& z
- n+ z; v3 l* |; S
public Object buildActions () {
3 D& k# ]: R U9 J" Q( Y( u. b super.buildActions();
, Z2 R* q5 g8 d$ g S% ]) T) e; T
- T) m9 e+ ~+ A+ b // Create the list of simulation actions. We put these in
7 Y5 a+ T1 X2 f6 p // an action group, because we want these actions to be
2 u* k* y) H- n9 A1 j# ^& E6 L. K // executed in a specific order, but these steps should
0 l) ~. F' k0 B+ q$ K* x, ~- E3 @ // take no (simulated) time. The M(foo) means "The message; j: f) V# v9 n3 \
// called <foo>". You can send a message To a particular
' c+ d+ a& G, P9 ?$ k // object, or ForEach object in a collection.0 B8 p& D4 i: H, V+ d0 Z/ A* k
4 k; F6 W9 V) J* d& |+ I // Note we update the heatspace in two phases: first run
- h# q0 w0 ]/ i$ h. f4 } // diffusion, then run "updateWorld" to actually enact the: K @2 L1 P9 f9 ^( F8 C
// changes the heatbugs have made. The ordering here is
% f' r3 e- S9 E" X3 Q // significant!. X4 K% R$ u& x5 R; w; A
7 P R4 Y& D, ]
// Note also, that with the additional
" F! p) m: i5 T& a // `randomizeHeatbugUpdateOrder' Boolean flag we can
5 e F4 _) }" e& k' |4 _' S // randomize the order in which the bugs actually run: E! U) _; T# h2 t0 Z$ O% H! Q. `
// their step rule. This has the effect of removing any
5 h. T4 ~" F4 Y2 M( f% h( a // systematic bias in the iteration throught the heatbug
! X% P! x+ r/ P; ^+ o5 W // list from timestep to timestep! _; F9 t3 F0 h, a" A
4 @8 m1 Q& L# L& k
// By default, all `createActionForEach' modelActions have# h" y s6 @/ H7 U0 N3 _1 k
// a default order of `Sequential', which means that the
X- J ^+ Y% X3 ]! g ^ // order of iteration through the `heatbugList' will be
- u6 R2 ~9 X2 A- w // identical (assuming the list order is not changed; Y: M( G* N$ `( E
// indirectly by some other process).
$ m- e& f9 F( y9 a0 T 6 G9 ?" h$ c3 H" Y
modelActions = new ActionGroupImpl (getZone ());; j- Q" _7 D1 H+ V/ ~$ X5 B
- v, s5 e6 G* C5 y" P% f' a try {
V' n- z/ f( v modelActions.createActionTo$message
c6 C/ V6 K- Q8 Z4 I2 j# o- o (heat, new Selector (heat.getClass (), "stepRule", false));
% O% c- l3 e4 z. ] } catch (Exception e) {
7 ^1 _2 S" A* N) Z, z System.err.println ("Exception stepRule: " + e.getMessage ());
& a; \. _9 X# F }
# Z. O. [5 _: O7 y) e3 n/ V& _
4 w' x1 |) _6 z4 I/ T( p3 ^7 A try {
`5 D, q( h: j/ m6 _8 A Heatbug proto = (Heatbug) heatbugList.get (0);4 I& \2 v s& e
Selector sel = - L, M# n# U. M( u: g9 ~7 ~
new Selector (proto.getClass (), "heatbugStep", false);
* l2 f8 k% y2 c% \0 ?% B& X9 n actionForEach =) f# a- Q& S- b( ^4 Q! ~0 ]& R/ m* p
modelActions.createFActionForEachHomogeneous$call
2 p" P7 V+ v/ t) g' B ^! X (heatbugList,; D3 I# f1 t: P. B5 I" `: S
new FCallImpl (this, proto, sel,4 ~. j2 j7 { c
new FArgumentsImpl (this, sel)));& Z. ~9 E1 r6 j0 Z( b
} catch (Exception e) {, e/ q, I$ S, a
e.printStackTrace (System.err);. e! k* B0 T0 J6 a7 v+ f* P4 C
}( j, [- c8 Q( | l* |
6 O; y3 X. q W/ T( D
syncUpdateOrder ();
3 V. d/ ~8 Y* J$ l) Y1 ~6 G
2 y+ Y$ b9 B! T5 ^ z4 y try {; Q3 [! g3 `! o0 f; n5 P! {( N! `
modelActions.createActionTo$message
/ {- t& N8 Q- S" W; H* a6 {5 e (heat, new Selector (heat.getClass (), "updateLattice", false));
6 w' a& g, n! k9 r$ c! c/ [ } catch (Exception e) {
+ Z5 _4 {' A3 _ System.err.println("Exception updateLattice: " + e.getMessage ());
6 G' w, H1 ~* X ^) ^! N' o }% n/ p3 Q: j; X! x( `6 G6 b
1 ?- M* E8 S, o; q // Then we create a schedule that executes the
- ~, O0 L7 U! r4 D" m, l9 G // modelActions. modelActions is an ActionGroup, by itself it C5 K$ x+ R" t Z" M9 }6 x: U# c
// has no notion of time. In order to have it executed in
! I$ o+ q) O0 l+ W' X7 f7 k // time, we create a Schedule that says to use the
5 s% g" o r4 m( P9 ]3 X! W$ v // modelActions ActionGroup at particular times. This
" a, y1 w( \6 M // schedule has a repeat interval of 1, it will loop every
9 ]0 u5 `, z' h! ~ // time step. The action is executed at time 0 relative to1 z( [& A! a. b2 H
// the beginning of the loop.
+ Y2 X9 y. N i1 Y9 `& T6 [/ R0 ]: V, m
// This is a simple schedule, with only one action that is
! b7 a( i" H# k // just repeated every time. See jmousetrap for more
! B' v) u: J7 c) J // complicated schedules.8 X5 X- [& n) G& ]0 I U
9 L1 [' c6 H) V8 J modelSchedule = new ScheduleImpl (getZone (), 1);
! P; g6 h, J5 d# J modelSchedule.at$createAction (0, modelActions);; P2 o, x; o: S5 U
# N, \; `2 R( X3 h: F7 P
return this;0 |; K3 Y0 Z1 X; A
} |