HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 o, ?& E3 B9 v' D4 g/ @+ q5 H8 h
8 p9 `9 H' O J public Object buildActions () {
/ o% |+ l4 [5 x7 [6 i$ h" ^/ o5 [ super.buildActions();3 e9 R- N. G; y; S* V1 a5 w6 R
2 x% Y; h+ @/ q+ s) L. ?( Y& q
// Create the list of simulation actions. We put these in
& t5 L- j8 ^4 Q6 E* X // an action group, because we want these actions to be
2 a# Z. J7 ? v# Y7 c7 M, w // executed in a specific order, but these steps should
! ]& c9 _3 `5 T8 Q" } // take no (simulated) time. The M(foo) means "The message
! G: a9 D: M/ q2 E) C // called <foo>". You can send a message To a particular3 {+ S, _3 _& e9 q% m; h, w6 a
// object, or ForEach object in a collection.7 |6 E* w5 i5 T6 D# \7 d2 Q
a1 u6 }7 A4 A2 _2 Y // Note we update the heatspace in two phases: first run( v0 {% {& d) u- C. G' ^7 M
// diffusion, then run "updateWorld" to actually enact the- {/ J& E& }$ T ]' ]" r- {7 u; I
// changes the heatbugs have made. The ordering here is1 V% N1 r1 O& P
// significant!
/ f# R N7 j5 f: H% H, j7 p
! B/ L- O' h4 [/ d- s V // Note also, that with the additional
2 F( e/ p o* @, e, w2 n // `randomizeHeatbugUpdateOrder' Boolean flag we can* [% x s% K# S4 R
// randomize the order in which the bugs actually run
% Y4 Z8 U% z0 ?0 x# V8 K // their step rule. This has the effect of removing any
$ A; j7 O: m% b3 F // systematic bias in the iteration throught the heatbug( Y2 d, x/ N. c2 O, T8 s
// list from timestep to timestep
0 A" a9 d2 l& @) P) Q# Z, i* f : d3 [$ {; I: {' C
// By default, all `createActionForEach' modelActions have$ y3 ^& d2 F' x& U3 P
// a default order of `Sequential', which means that the
0 k/ |6 j4 D) p4 j+ @2 a // order of iteration through the `heatbugList' will be$ C; M% k) B5 z6 \" v
// identical (assuming the list order is not changed9 d) R. i1 P! k* X+ q8 ?2 ^* ^
// indirectly by some other process).
- E& s0 d* i. m; `1 f3 M/ @
Q" h0 Q0 _3 ?; q9 C4 n modelActions = new ActionGroupImpl (getZone ());: u4 Y' m; E: N7 L9 f7 k; V: L
! m# ^; E+ B- u0 {" i! J3 w
try {
1 e# k a2 a- C% ]0 ~7 g modelActions.createActionTo$message& F0 O0 l8 ^7 D& @1 q/ j
(heat, new Selector (heat.getClass (), "stepRule", false));; f0 |" [ k- b
} catch (Exception e) {
! ^' i* f) o( L5 ~4 z! \ System.err.println ("Exception stepRule: " + e.getMessage ());
. ]0 T% d3 I$ C5 o8 H6 O' { } e; G3 S: }; z8 g
9 ]5 z% i' q3 r try {
) Z- {; s5 @1 y U6 a5 a! V: Q Heatbug proto = (Heatbug) heatbugList.get (0);
! `+ \! l0 b0 C: g3 L Selector sel = * s$ U" Z8 E! ^7 a' K& R. Q- A0 J, H
new Selector (proto.getClass (), "heatbugStep", false);& @: C `8 X& U0 h% y4 ]
actionForEach =
9 z6 f* }0 q/ s- R F; L6 | modelActions.createFActionForEachHomogeneous$call
3 X+ p( V" ]! k5 r5 v (heatbugList,
; y9 x6 [& ?( K/ Q5 s% h new FCallImpl (this, proto, sel,
e, a; i; T9 I9 [0 a% V% `. N new FArgumentsImpl (this, sel)));1 G0 [' k6 J2 P7 p5 b
} catch (Exception e) {
! v( m- T9 X! \" o5 E( o e.printStackTrace (System.err);4 c1 ?; y1 v4 `" T$ R4 s
}$ n% A/ k6 E, {$ K/ V
" B$ ~1 a3 X: x7 B# Q syncUpdateOrder ();
?( e4 [' g6 i/ ]4 W. N+ [$ s# |& Q6 l5 n; w9 a; m' [; o8 f
try {
( ]+ R: N! W2 v3 n- t& B modelActions.createActionTo$message * t; P" c: I' n$ x: I
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 N% F3 T: @& v } catch (Exception e) {
H! e/ F$ |- ^& Z3 ~5 I+ S System.err.println("Exception updateLattice: " + e.getMessage ());8 P& D2 q& I! i
}
7 ]: |( `& d s1 u0 D . u# u3 k) @5 A. N! t
// Then we create a schedule that executes the) p% f/ r* z' T! k, G; S& P* i
// modelActions. modelActions is an ActionGroup, by itself it
- [. o$ E9 F- E/ M+ X6 z // has no notion of time. In order to have it executed in" b6 d) Q! ]8 Q& I2 D) k
// time, we create a Schedule that says to use the
, P+ o5 S' U/ | // modelActions ActionGroup at particular times. This5 T2 D, T$ I2 q6 A2 e5 ~& t1 e$ Z
// schedule has a repeat interval of 1, it will loop every
: N% G: V% e1 d' _ // time step. The action is executed at time 0 relative to) I. w/ \/ T8 O* x
// the beginning of the loop.
4 @. ?' N& [$ U3 h0 x
, W% o& T, z. c J Z% V) f // This is a simple schedule, with only one action that is
5 i W- F; [* o1 m6 L. @% k# X // just repeated every time. See jmousetrap for more
$ N0 Q3 {! X4 i: P+ ]+ { // complicated schedules.
& f& O) [! \ _' k& p * |) `7 {# M8 m1 M1 u1 S
modelSchedule = new ScheduleImpl (getZone (), 1);3 P" t1 \( H7 s
modelSchedule.at$createAction (0, modelActions);! b* I4 {1 E: V7 z1 @; {
) i# f D& t; t, ~; ] return this; n$ S, I7 T$ |* w* S1 i
} |