HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: u2 |3 Q/ ~! p2 i- x4 z9 j7 g; S! I( i5 Y
public Object buildActions () {
. w. b5 y# F( P7 A: t7 t$ r super.buildActions();
9 D1 ?/ r; i/ ~! U1 U 1 i9 f+ W0 u! }
// Create the list of simulation actions. We put these in* Z. B6 r9 v& [5 ?! t: x
// an action group, because we want these actions to be) R% J6 T* ]. w2 G C: p: e1 Z [- n
// executed in a specific order, but these steps should$ j6 j! B( l# U6 M1 U+ H' l' d+ Q
// take no (simulated) time. The M(foo) means "The message
* ~0 \# |% W+ P. y! R" _9 `8 b3 H // called <foo>". You can send a message To a particular
8 P4 Z5 o, o. t5 x" f // object, or ForEach object in a collection.$ e5 c8 j) Q8 q4 `. [2 d$ Y- ~
" {1 o8 D" }# Y: S3 D // Note we update the heatspace in two phases: first run; L) m; s; v9 D% j
// diffusion, then run "updateWorld" to actually enact the
' S; |8 ]5 Z) {. I // changes the heatbugs have made. The ordering here is
F2 o" x5 j! n% A5 b // significant!
9 ^ W9 l1 f' p$ F+ J" x : f' _5 d# l( ^1 X1 z" a4 k/ t/ V& H
// Note also, that with the additional1 F( z' @5 i3 b1 a+ s! E4 K
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 ~" i ~ ^' y) P0 a& v) l8 c9 s
// randomize the order in which the bugs actually run
: p' u2 f9 M' j7 v" c // their step rule. This has the effect of removing any1 @4 L9 M J7 k) Y$ `8 h
// systematic bias in the iteration throught the heatbug
# G! |$ H, ]* j // list from timestep to timestep6 N% H" \5 Y( u1 A8 V
/ N- ?5 W% x1 N. d# ^ // By default, all `createActionForEach' modelActions have
$ L2 A8 o: `3 w0 M1 n3 @. [ // a default order of `Sequential', which means that the( O. V( ~; o U9 h
// order of iteration through the `heatbugList' will be# U$ _8 Z/ A1 r0 y7 J5 s
// identical (assuming the list order is not changed
" y$ f) a3 r% l- w* O) A // indirectly by some other process).: d$ n5 |+ q, G1 N3 H
+ V! a) M3 W2 {- L modelActions = new ActionGroupImpl (getZone ());: H, F: J+ f- _( [1 `, V
' \) X- ]( ?: l- {. |! [ try {6 m7 a# l( i7 Y- C5 V
modelActions.createActionTo$message2 N3 P1 n/ r- |5 A) S3 x0 N
(heat, new Selector (heat.getClass (), "stepRule", false));, ~3 p, z& K; u7 p% F. i
} catch (Exception e) {
/ k! g9 t2 W% B+ @, q3 m System.err.println ("Exception stepRule: " + e.getMessage ());
0 |, ]0 D1 I- ]* c$ I6 K }+ ^: [4 J# {6 e! H1 ~* F) V0 J9 R9 h
/ R8 \# e9 ]% H* c2 h9 N# d
try {4 w1 Y& u, R2 @, X- a! u9 Q
Heatbug proto = (Heatbug) heatbugList.get (0);: X$ L& L8 C( q
Selector sel = $ H& Y0 ?# n3 {4 C0 n& C6 {1 [
new Selector (proto.getClass (), "heatbugStep", false);
F ?5 W$ e( ~ actionForEach =" U7 ~% G. D0 X$ I
modelActions.createFActionForEachHomogeneous$call& ?3 z. y6 R' I6 k u
(heatbugList,
! y. @* V4 ~+ A6 C, p: n new FCallImpl (this, proto, sel,
( ], ]& C8 P8 |8 N9 D new FArgumentsImpl (this, sel)));
. l6 |2 X9 T3 j( R7 W9 \( |3 o } catch (Exception e) {
$ _' l# _ `6 L: v- n7 c0 G: _/ q' ? e.printStackTrace (System.err);
! V, r# j! X" p4 Q a }
- H" m9 p- }- g. k/ V
& d6 k( X3 F$ t# k# ` syncUpdateOrder ();- Z. j7 \! n3 U d9 G, W2 x0 k6 _# t
; F) v& S+ V y' G1 X" X try {( |* I: X: d e: t2 b
modelActions.createActionTo$message ^; \6 U; j" c) w1 S# P. n5 C
(heat, new Selector (heat.getClass (), "updateLattice", false));
; ?6 G/ m! t: _3 @ } catch (Exception e) {5 Y& X9 a! Q( ]& h1 y9 \+ X8 A( ^0 I
System.err.println("Exception updateLattice: " + e.getMessage ());( ?/ W+ k5 e K9 ~. [8 E
}5 t' I* M% Q4 m( }
1 c# A& n& N5 k' }- K1 h. k* G0 r" c
// Then we create a schedule that executes the2 a0 x) K1 w8 v$ v7 q( L: N0 f. X
// modelActions. modelActions is an ActionGroup, by itself it, X* j6 Q- z8 O% D
// has no notion of time. In order to have it executed in0 C% f7 a; o% [/ \( c$ L, N
// time, we create a Schedule that says to use the
' S$ e" e: W0 p' z! Q0 m. ^ // modelActions ActionGroup at particular times. This
. C7 ^" j0 L2 e0 M, Q' c! L // schedule has a repeat interval of 1, it will loop every9 m- D+ R5 V( j3 F
// time step. The action is executed at time 0 relative to
8 q0 p# i, f8 \8 I( G5 [: b& E6 @ // the beginning of the loop.
$ T: E- L! Z1 g) }1 l8 s& Q9 E* @5 z/ y- f
// This is a simple schedule, with only one action that is1 B' T7 j" \$ @$ G+ Z
// just repeated every time. See jmousetrap for more
3 n. n( |4 C0 E" m0 h1 R // complicated schedules.: Y5 j; Q% x0 y# A
4 V7 w* t3 | G/ g" s, `
modelSchedule = new ScheduleImpl (getZone (), 1);0 ~3 x- W. z- d6 e& p9 U! }
modelSchedule.at$createAction (0, modelActions);" O# f7 v z5 ]
1 C8 r/ w1 a/ f1 }, X! H
return this;& n3 t4 v3 S* W. |7 t
} |