HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! |: Z* z, i' T1 O6 ]2 s
6 L! s0 ]8 z1 p5 |+ Q! D' n! S3 x public Object buildActions () {( _. s( {3 m- j& L, Q) P( T
super.buildActions();( L1 O0 I. D" K4 k
( o" \8 w4 ~3 Z' d# ^: l
// Create the list of simulation actions. We put these in5 L F2 w" Y6 `; `4 n: t" W
// an action group, because we want these actions to be
1 G m& j$ a; ^' Y6 [! l* D // executed in a specific order, but these steps should
7 O0 r: @* Z6 ]7 M7 M8 x: j! \7 M, e; |3 u // take no (simulated) time. The M(foo) means "The message! I {# K* u/ @$ _, l
// called <foo>". You can send a message To a particular
9 m0 ?* L$ J% f s2 i // object, or ForEach object in a collection.2 e9 M, u% B9 W- e3 z4 Y/ m2 [+ x5 T
' ?6 \$ o6 J# g* S) D5 ~
// Note we update the heatspace in two phases: first run4 j' q/ B! C$ s* m: o. r
// diffusion, then run "updateWorld" to actually enact the ?' @- r7 A& \% J
// changes the heatbugs have made. The ordering here is
2 D3 H% @- S4 Y) a. E/ e // significant!
2 ]( A9 h6 S Q& l0 v$ I( H & \4 m; e: y& o
// Note also, that with the additional
3 |/ r+ S1 d' ? // `randomizeHeatbugUpdateOrder' Boolean flag we can+ T# C( i4 `3 E4 i
// randomize the order in which the bugs actually run1 @9 R5 A7 B8 ]/ M
// their step rule. This has the effect of removing any; L ^; ~: o2 o/ A0 ~
// systematic bias in the iteration throught the heatbug! z' Q: z0 a( p7 u) H8 {& d9 p' U
// list from timestep to timestep) v8 ^7 H3 \- ~6 s: f8 d/ M
! M% M0 I0 W% S+ Y. u) b& i) @2 d/ R // By default, all `createActionForEach' modelActions have0 m4 [, u+ t/ p7 \4 g
// a default order of `Sequential', which means that the
2 Q5 M: }% v" R* h8 R/ ~& I // order of iteration through the `heatbugList' will be! Z! b1 \. { g2 V
// identical (assuming the list order is not changed7 r s7 F& ~2 V n9 A* W) L5 s
// indirectly by some other process).
9 T+ l6 _$ g( P [( t3 {
8 Z0 k; G/ I* ? modelActions = new ActionGroupImpl (getZone ());7 J8 i: ~9 h( L, ?
$ l; S+ u7 f# [/ ?; I
try {' U( N. k! R5 N7 o% {6 `
modelActions.createActionTo$message- j+ c7 z+ R& G$ t, s
(heat, new Selector (heat.getClass (), "stepRule", false));2 g3 Y+ ]7 _$ _+ L
} catch (Exception e) {
* `$ p4 O6 t# a v; t System.err.println ("Exception stepRule: " + e.getMessage ());
$ t+ L$ O, W- Q1 s0 |8 t }
0 ^8 l( p; A7 E5 Y. ]% m9 d
, N2 C* j4 \: a; j try {0 e1 k( q/ R0 M8 d
Heatbug proto = (Heatbug) heatbugList.get (0);
( h$ X3 [! i% M$ \* k4 Q2 f Selector sel = 3 A0 }7 }6 e( V [3 @* I0 F
new Selector (proto.getClass (), "heatbugStep", false);
% E% W* Z0 ]# ~' B- |" [ actionForEach =
9 C- [: I9 V5 [ modelActions.createFActionForEachHomogeneous$call- n& X7 e% H8 m) \8 X
(heatbugList,
: G& P8 g" r' D/ t+ ~, r" F new FCallImpl (this, proto, sel,
8 I! Y! _! J2 G* m2 n9 Z' f new FArgumentsImpl (this, sel)));
! B: X7 T W! n7 Z5 i } catch (Exception e) {
! g8 Y2 g1 p. [( c" Z e.printStackTrace (System.err);
, o" @. M* l% J }
5 ?( }$ `$ [! Z A ' s; l1 Z" Y# t" ?+ o
syncUpdateOrder ();
0 r3 k6 Z$ t. s
0 R1 {3 l" I: q+ P try {- q ` U }* i0 y! J
modelActions.createActionTo$message 3 t* _; s- N1 @1 N! S' b3 E# i
(heat, new Selector (heat.getClass (), "updateLattice", false));& \% Z1 {$ ~6 c5 K, Q+ |2 M; R
} catch (Exception e) {% A/ l$ ?# K S8 U2 J/ ?
System.err.println("Exception updateLattice: " + e.getMessage ());& k/ l0 W4 F, h3 Q7 h& b8 c
}. I* N$ i7 X' M
# B& e. P* `( Z6 \$ S( L
// Then we create a schedule that executes the3 u, S8 n/ D3 k& T! _' f( \5 n
// modelActions. modelActions is an ActionGroup, by itself it6 N% }0 @7 b4 p8 k o6 T1 R
// has no notion of time. In order to have it executed in. v$ Q3 ]8 j5 A
// time, we create a Schedule that says to use the8 f; X* w" j" D8 i, G3 v2 y& U
// modelActions ActionGroup at particular times. This1 y" j3 u _( Z- ]
// schedule has a repeat interval of 1, it will loop every$ s, F8 Q2 a9 S. m0 t* k- r4 c
// time step. The action is executed at time 0 relative to* m2 D `; _1 G: p8 w. h! _! @
// the beginning of the loop.
/ M% n' F" F5 C- ]' x3 v' U6 i2 g# n, m, D9 {3 ~ U4 P
// This is a simple schedule, with only one action that is
, s; t9 [* K4 I9 N& O // just repeated every time. See jmousetrap for more
+ m4 B0 @7 R3 } // complicated schedules.! j2 N& {/ ]( s- l9 L" d# d
3 x' o) _" ^" e6 U5 s) U9 y) p
modelSchedule = new ScheduleImpl (getZone (), 1);
7 h8 r% `" F4 ]0 q modelSchedule.at$createAction (0, modelActions);/ z6 L/ |% u4 W% _4 M' T
% f1 [% K: K1 ]* {& J3 J
return this;9 h& U, P9 i" ?+ S" v; h! A+ V1 i
} |