HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' u" U4 ?" u0 {) F/ g( Q w% ^& N" }8 o O6 U' v
public Object buildActions () {9 |. c' {9 g8 j
super.buildActions();4 M; P9 N6 a- `& R) }+ e Y
, [ ~' @6 J5 v: H2 u# j
// Create the list of simulation actions. We put these in
, T( a9 Q7 j9 j // an action group, because we want these actions to be0 M+ j3 N/ f8 M
// executed in a specific order, but these steps should6 w. M5 t' O+ {2 u4 H- M
// take no (simulated) time. The M(foo) means "The message
$ } f* k8 ?- {2 \. t7 N, F' H* O4 Q // called <foo>". You can send a message To a particular6 r% O2 [4 Q: _! J! s( I
// object, or ForEach object in a collection.
- |) e1 o- c* O7 W' q! q
! [* L4 H% b& R: J" N* P2 W // Note we update the heatspace in two phases: first run
" h) _$ r" ~7 k% u // diffusion, then run "updateWorld" to actually enact the
' S% l8 S& Y- l, c6 w# ~# D2 ~9 Y- X // changes the heatbugs have made. The ordering here is$ E5 q4 ~" {3 V
// significant!
, {& p; J6 m8 Q/ Z) t& T7 {+ E
! K+ j7 ?1 x; f C // Note also, that with the additional& Q, k* y5 g! Z- m) a N# J. S
// `randomizeHeatbugUpdateOrder' Boolean flag we can* o6 I% v/ V6 D8 f' j- R
// randomize the order in which the bugs actually run
" x! f2 H0 M# j8 X4 w) O3 b, U // their step rule. This has the effect of removing any
* W% Z, e- x4 X q* |- f p. H1 k$ O // systematic bias in the iteration throught the heatbug
1 U% Y. E5 v/ w" C! r* c // list from timestep to timestep
# [9 b' v: S% z% d, Z2 n* j ( @3 g8 x; D( o1 R4 T! U5 k
// By default, all `createActionForEach' modelActions have# y: s# ?6 r9 U% o! z" H* {
// a default order of `Sequential', which means that the6 A6 {6 c. [9 T8 S a
// order of iteration through the `heatbugList' will be
& z" x; y' G+ |8 ^9 j" G // identical (assuming the list order is not changed
9 Y! {: k# d, F" i t: p7 [9 h // indirectly by some other process).
' K, m" X2 z" i, k0 I. W2 I
4 m- J3 ~! V! d. s4 `2 A modelActions = new ActionGroupImpl (getZone ());% t) p9 N. Y4 V1 g3 C
0 w# b( h( G! H+ |: j
try {, V V0 n, }' `& s; `6 H* c
modelActions.createActionTo$message% e( p5 i+ B+ Z; r4 m
(heat, new Selector (heat.getClass (), "stepRule", false));( u& I$ _: O( p7 f
} catch (Exception e) {$ }/ N' \8 B% W8 W( B
System.err.println ("Exception stepRule: " + e.getMessage ());, o# x7 S5 M4 g, T9 ~0 N
}
+ [& S" j6 B9 {9 a$ x6 b! K; h% P4 I) W) j- d" c+ G
try {
( x/ v! l5 t0 W; ~; w5 X5 h Heatbug proto = (Heatbug) heatbugList.get (0);
4 C8 y# n, ?; |8 C Selector sel = 5 q: z/ }* U' v( W
new Selector (proto.getClass (), "heatbugStep", false);
5 G1 R. V( c. E/ p7 v* n: ? actionForEach =; y8 X7 Y% d1 [& t6 }
modelActions.createFActionForEachHomogeneous$call
+ ]6 G1 b6 i' e (heatbugList,
5 N5 k* z" V0 v5 @. @- [ new FCallImpl (this, proto, sel, |8 v7 m4 f; k: S- M+ T4 C2 Y' i
new FArgumentsImpl (this, sel)));0 S3 J% l( q6 n& K- m
} catch (Exception e) {
( L5 I3 f, S0 o5 w e.printStackTrace (System.err);* `. D9 c; J* A& A, E: Q
}
' Z0 `: @) G9 p2 Z9 M, S( W, k. }
1 Y! _9 {; R! B. Q C syncUpdateOrder ();, J1 R$ r% C' H0 N- C2 x
: L4 x4 y+ m! @7 O% S
try {1 P5 ~1 R! }" R
modelActions.createActionTo$message 8 e8 n6 N7 I5 Y/ i" ^+ G
(heat, new Selector (heat.getClass (), "updateLattice", false));# [' z0 U& d2 S3 F" M5 N
} catch (Exception e) {8 m1 ?+ Z' q( Y1 W1 B+ D a, ]
System.err.println("Exception updateLattice: " + e.getMessage ());; P/ N1 u5 P* p1 t8 x# n T* |
}
4 m) G. J) L+ _0 z/ |# O5 w 2 i' Z$ d5 V$ K, W8 v6 }% h
// Then we create a schedule that executes the" j$ g5 |0 \( f9 k# g1 J" c
// modelActions. modelActions is an ActionGroup, by itself it7 a7 D- G* J; M& Z; \
// has no notion of time. In order to have it executed in
5 V$ q& N( z3 |- P# J( g( e) \ // time, we create a Schedule that says to use the
( i5 H' n2 o. L3 O7 |: ` // modelActions ActionGroup at particular times. This
7 ~8 B+ E( L+ Z5 ~: r1 ~* s; n // schedule has a repeat interval of 1, it will loop every- d m* ]; h! s/ E0 G, ^
// time step. The action is executed at time 0 relative to! z+ u, J+ F* j0 _+ k j
// the beginning of the loop.
' Z8 A1 L. S& g& x1 k3 Y7 q% y1 ^$ I- [8 i
// This is a simple schedule, with only one action that is
. a% H# x V" u // just repeated every time. See jmousetrap for more
9 V. B) m- m0 i6 l, f2 v // complicated schedules.8 f9 B7 p, {2 a5 L2 {
" R1 Y& N' o5 b/ m! Z- e; e% w modelSchedule = new ScheduleImpl (getZone (), 1);
# x; [$ T: E- A. @ modelSchedule.at$createAction (0, modelActions);
$ D) S9 w. n" P7 {! D% w
. y5 h+ k. \! r9 G% F2 Q return this;& I& a: E( v( p: Q% |8 N
} |