HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 g# H1 a1 q% W" u. Y
3 P( v% P8 ^" N& a L$ L# f
public Object buildActions () {
6 G; y; @7 Z: x% V. l super.buildActions();
2 `! d- _& C# l1 n: _% @
2 B4 P* n5 o- ^% B# a2 c // Create the list of simulation actions. We put these in5 W7 [6 g, t3 _& P, j. u) p
// an action group, because we want these actions to be
$ Z: Q' ]# i9 S9 K1 B) V3 K // executed in a specific order, but these steps should' f% p0 ]) t) b
// take no (simulated) time. The M(foo) means "The message
) E$ n* @4 s! k. ~" D' H; o // called <foo>". You can send a message To a particular
- Z) {8 j/ _/ }; B // object, or ForEach object in a collection.1 s& b# l! E* Z7 z& ?2 z7 _
0 m( y4 N8 @' u2 \* Z
// Note we update the heatspace in two phases: first run2 a: @6 l. h& s, v6 R2 T
// diffusion, then run "updateWorld" to actually enact the
7 q2 W; r7 \* W. K: { ^7 ^& @- O; E' H // changes the heatbugs have made. The ordering here is; `4 x$ g0 Y; k7 m# E8 b
// significant!
2 b% K, `* x% ?
/ P% r# ]; g: Z+ L2 y! ? // Note also, that with the additional
. _+ ]0 q: U, J3 Z# t9 ] // `randomizeHeatbugUpdateOrder' Boolean flag we can( {* @" R8 U. b
// randomize the order in which the bugs actually run
* T9 |2 X0 n1 D; E // their step rule. This has the effect of removing any) C! L5 [- C0 Z# z7 H
// systematic bias in the iteration throught the heatbug
; E5 N3 O! Z/ z; [4 _; f0 s // list from timestep to timestep& Q$ h5 N' F/ Q& S9 j
/ y: j% l3 Z5 V% [* p // By default, all `createActionForEach' modelActions have3 `! j+ @) M* x; Z
// a default order of `Sequential', which means that the" x/ }; O! I7 `5 z1 i* S8 s
// order of iteration through the `heatbugList' will be
, ?. _$ t! E) b, A) b- ? // identical (assuming the list order is not changed
, j$ l: `- s+ ]4 z // indirectly by some other process).
# o6 w+ q8 `6 z& u' `6 H9 m: G' k4 U
5 q3 }$ O1 _# |: Q) U: V modelActions = new ActionGroupImpl (getZone ());
! c6 i, N$ p9 f8 g9 ^6 C$ X! w) K K3 b4 ]
try {' M* \, W4 M" Y7 N6 }5 d' v
modelActions.createActionTo$message
) V" u$ m0 t* o1 o: @9 t9 L, U (heat, new Selector (heat.getClass (), "stepRule", false));( [" `3 W! V* y" E* ~) G
} catch (Exception e) {7 \% a8 u. [. k, E" H
System.err.println ("Exception stepRule: " + e.getMessage ());
3 c" @) T0 }- M& U: ~ }
; u3 F7 v. ?: h5 `7 j
3 y( h$ Y& v9 K T5 g try {6 _" N8 Y- X+ g7 x1 w. ~ \
Heatbug proto = (Heatbug) heatbugList.get (0);: j; F9 n0 _/ `# g! E
Selector sel = / q" M* m3 o) y
new Selector (proto.getClass (), "heatbugStep", false);
$ \/ }, B9 B4 z l actionForEach =
! |9 j5 ^, Q7 t! |2 h modelActions.createFActionForEachHomogeneous$call8 P0 b3 w1 k( T
(heatbugList,) k, o' W, t$ B+ ^1 U) ^2 b
new FCallImpl (this, proto, sel,8 g! e' Y" U8 J+ a9 V
new FArgumentsImpl (this, sel)));2 [7 ~6 T, e8 B
} catch (Exception e) {
4 x6 F2 Q( m) M c' {" F e.printStackTrace (System.err);; N/ H& Q. Q. M. n# r1 G- I
}
! C. J$ u) o, K- n
0 z, M0 b1 F& g7 x3 z syncUpdateOrder ();+ B7 A+ Y) z$ k5 b: I. ?5 B* O+ @
, n/ w- u! I* k4 z. ^ try {9 J/ h4 @# U) I
modelActions.createActionTo$message 8 e2 d$ {) S* S4 B* D: K
(heat, new Selector (heat.getClass (), "updateLattice", false));
# u; y- x8 I, D( g) Q4 }% |; U$ X } catch (Exception e) {
2 o# a; k! k5 Z9 h6 d; g2 Z System.err.println("Exception updateLattice: " + e.getMessage ());9 J8 X& s, O% Q: \1 W% r
}
- g7 S* b, e1 U9 Z2 L; k5 V
* r" G, V4 L. V. S6 y1 K // Then we create a schedule that executes the. a' k/ Q2 ^+ I5 m" r/ T9 _
// modelActions. modelActions is an ActionGroup, by itself it( K' h0 n" T* N& [# Y+ A
// has no notion of time. In order to have it executed in
" u$ U1 a* p6 G2 ] // time, we create a Schedule that says to use the/ ^4 v8 j1 g- _. m) ]' U
// modelActions ActionGroup at particular times. This9 i9 @# x. t4 a4 q
// schedule has a repeat interval of 1, it will loop every
; r6 t" }# @) ^4 {9 v // time step. The action is executed at time 0 relative to
8 B6 _$ \9 w; O // the beginning of the loop.
* W' p# G4 x7 f; e' Y
9 ~6 M2 Z- [6 \% u i* U // This is a simple schedule, with only one action that is
" ^5 I" m& n$ z' X$ K // just repeated every time. See jmousetrap for more! j) Z7 I0 `9 \
// complicated schedules.6 e8 }, C) P1 f8 E( n
$ A- }9 \# L) N* ^' V% j5 f modelSchedule = new ScheduleImpl (getZone (), 1);
$ N7 P- o- ~- M9 q6 j; P0 n modelSchedule.at$createAction (0, modelActions);# h, g0 @/ }' ]; ~$ X/ C: V# a
5 A+ b3 T) e! W6 T& t0 @+ H+ ^
return this;+ T3 T! f, ^' q% F/ }. N
} |