HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 i, r% k; K0 s- [
/ R1 K9 |, i: {% k; }8 _
public Object buildActions () { M% s; J7 F# F2 y
super.buildActions();+ d# |2 `* D7 o: c. U: O0 f8 A4 D: z6 v
* p5 V, J' x( m. J( D
// Create the list of simulation actions. We put these in% ?3 Y5 J1 }* b
// an action group, because we want these actions to be% B, m" j2 Q- q$ @
// executed in a specific order, but these steps should
2 A6 A7 x! ?% M D) [" h1 j; ] // take no (simulated) time. The M(foo) means "The message
" v* f3 M1 q O- I& p; [2 X1 _ // called <foo>". You can send a message To a particular3 [3 ]4 g5 @* q1 x
// object, or ForEach object in a collection., @* F: u' Z$ U3 a+ _
+ A+ Q: U: X( _6 j3 P/ T1 Y // Note we update the heatspace in two phases: first run
" Q* b- Z" D$ O# h& B1 M ]* i // diffusion, then run "updateWorld" to actually enact the/ n A8 h9 u, v& S6 M: E
// changes the heatbugs have made. The ordering here is9 n( c3 ?3 {8 X3 l
// significant!
' Z; d: x- _( _+ k3 d9 W9 p/ K
7 h9 L! a2 T# T // Note also, that with the additional. l5 I( x, t/ E" T, D9 h
// `randomizeHeatbugUpdateOrder' Boolean flag we can# k9 H" H8 O$ o1 _* b6 t! d9 {
// randomize the order in which the bugs actually run
5 z& \/ a7 |- y4 m- C- J$ R. D // their step rule. This has the effect of removing any! I. U. h0 k6 }) ^" Y7 h, N, K
// systematic bias in the iteration throught the heatbug
& y q6 ]) ~, x D% p // list from timestep to timestep
$ ?4 g: q& p' [! c/ B T9 I
' J. D! t1 M& o! p // By default, all `createActionForEach' modelActions have0 @) b1 e, y# D1 x8 `. u4 x
// a default order of `Sequential', which means that the7 @4 o# ^6 b/ V# x/ s% V
// order of iteration through the `heatbugList' will be
6 G3 L4 d" \# w! D. ?8 r4 d' Y' Q1 ~ // identical (assuming the list order is not changed
) i2 r/ y- R$ v* p @4 ] Q // indirectly by some other process).( | ~) x! }: w3 Q
* _+ N {% N- |9 h" A: b
modelActions = new ActionGroupImpl (getZone ());
9 j- s8 D, a# p& k) h+ j
( ]0 p3 W% W9 P8 @: W) Z try {5 g% S: V/ Z6 w1 T f6 C& m
modelActions.createActionTo$message6 f4 h* X, X; }9 ]# e3 b; c
(heat, new Selector (heat.getClass (), "stepRule", false));9 G1 @* m' {. u7 i' l' d0 `
} catch (Exception e) {
) l# |! ^8 ?, Z: V5 }* f System.err.println ("Exception stepRule: " + e.getMessage ());
' L H7 Y3 ^$ M8 h4 T$ a }8 a4 m, U) e, K' Q
8 K: y- l& ]: r, t& ^+ r _) j
try { X) O0 @: j" g. k
Heatbug proto = (Heatbug) heatbugList.get (0);# L9 ?9 r, I9 o( Y( ]
Selector sel = , V) s) s- C- G2 \5 I
new Selector (proto.getClass (), "heatbugStep", false);: {, c* S+ h4 K; h
actionForEach =
! o- g0 S0 ~& S1 l+ F0 b modelActions.createFActionForEachHomogeneous$call
% G6 {) b( L( x& K# ^ (heatbugList,
X+ Z) i2 j G0 I) ~- ?8 Q# T new FCallImpl (this, proto, sel,0 H+ I. I' J% H& O' @0 Y8 I
new FArgumentsImpl (this, sel)));1 ^! ^1 L8 c; J8 j" O) \( d0 t; p
} catch (Exception e) {
: p" v1 j' E. p- X( e! F( ` e.printStackTrace (System.err);
$ C) L' P/ _$ W* k5 G' A }
8 D+ l* n6 Y6 L& r) B ' e, N- R" L! r" l/ W; S/ ?! k
syncUpdateOrder ();* m) h1 ?4 L' u
7 Q0 Q9 {+ [$ B, u: r' C; | try {8 ~: G8 b1 r2 _5 E3 h: C
modelActions.createActionTo$message + p: H6 C! a8 w5 {) H4 |% k
(heat, new Selector (heat.getClass (), "updateLattice", false));8 R6 L$ F) X6 e: | r/ j, A
} catch (Exception e) {
3 _) |5 t0 z9 K9 q1 \8 W) d System.err.println("Exception updateLattice: " + e.getMessage ());
. s. j9 p. \7 P& L6 M! i: { }
. N% M d" f1 } F : M7 ~, K3 g0 I! }) z; J
// Then we create a schedule that executes the: W% S0 f& a+ s5 g& @' p) ?/ W3 J
// modelActions. modelActions is an ActionGroup, by itself it
% A1 A# i) I9 O( R+ i! ?+ i // has no notion of time. In order to have it executed in
7 |! @# p! E9 S: Q7 i // time, we create a Schedule that says to use the
6 d- C* _8 D0 x3 K% ` // modelActions ActionGroup at particular times. This
+ G$ }3 V- M. L; ?2 |6 N // schedule has a repeat interval of 1, it will loop every+ _2 n* q+ N+ N( T7 P+ k- I. N m0 a
// time step. The action is executed at time 0 relative to
. {5 _3 q$ O% L8 B/ p+ z; x // the beginning of the loop.
; y/ S: S# l/ B4 ~
' \! k t7 p7 b5 p6 l- z // This is a simple schedule, with only one action that is& P8 W$ y- {9 X% V; f
// just repeated every time. See jmousetrap for more) l% R! W8 V6 E
// complicated schedules.
; @2 F/ H0 u4 H/ _; H# S' D
, D! V4 @# H& U; X; r modelSchedule = new ScheduleImpl (getZone (), 1);+ Q" r7 n5 y' k# X: G$ p
modelSchedule.at$createAction (0, modelActions);
# ^# X! D) ` s" d" `% z' d : u' A% M+ N; |: k
return this;
9 f/ e& A' _0 w# [7 O! U R# x* ` } |