HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 m% c8 r' ?" u
& G& u( o* `3 c |$ K* D
public Object buildActions () {4 O; E! p* u0 m, B
super.buildActions();: p- d- N4 `: \7 G% B5 ^% k
Z- v. y3 G+ I) P; p8 X3 m8 G
// Create the list of simulation actions. We put these in
H; f/ |2 g ~5 @ // an action group, because we want these actions to be
; D! B9 N0 q9 K9 p: T // executed in a specific order, but these steps should
" G4 a0 J8 ]* O1 R' t8 {6 s // take no (simulated) time. The M(foo) means "The message2 V0 k5 V$ Q; n% K/ A9 k' L
// called <foo>". You can send a message To a particular& @5 Y2 f* ^) E3 F- C/ q) t
// object, or ForEach object in a collection.
4 X& C+ T1 g* v5 e 1 M- i1 {( O0 _: H+ r; j
// Note we update the heatspace in two phases: first run5 N( T7 U) g: N- n
// diffusion, then run "updateWorld" to actually enact the0 K# S0 }. a6 Y2 G1 T& v: [5 I [6 J
// changes the heatbugs have made. The ordering here is' |& U h. P( y. n& R
// significant!& n- a. l3 p" a* p' ]3 q
& V& b7 @% D: ]5 V5 i
// Note also, that with the additional
; |8 @7 a- w1 Q' Q, J // `randomizeHeatbugUpdateOrder' Boolean flag we can0 j/ O8 w4 v/ O
// randomize the order in which the bugs actually run
( J! }7 L0 `$ Z' k. j // their step rule. This has the effect of removing any
, O$ t3 x; i8 w; Z% r // systematic bias in the iteration throught the heatbug
6 B+ |4 `/ T7 R // list from timestep to timestep
0 [$ m+ }$ p( u6 H& J: k5 d! ^ * @1 F3 P# U; V
// By default, all `createActionForEach' modelActions have5 g% K/ f7 u- M. i2 p
// a default order of `Sequential', which means that the
3 [7 J3 L0 r% L$ a, S // order of iteration through the `heatbugList' will be
' B8 C9 s# v# R/ P // identical (assuming the list order is not changed9 q9 J% S. x" l& f6 s
// indirectly by some other process).
$ a! p1 U3 z9 T6 Y3 v; h& o- \
" ~, H: n9 Q. p2 O% L3 u modelActions = new ActionGroupImpl (getZone ());! _2 U# ?4 J b& r* W% A! C
. F, U; e* ~. u
try {
1 N) t' T. f0 [/ _" R modelActions.createActionTo$message1 Z" N1 R1 |. X; \3 n
(heat, new Selector (heat.getClass (), "stepRule", false));
0 m* p- W/ h! X7 h+ ~ } catch (Exception e) {
5 Z* B2 s/ U, H8 H/ A/ ? System.err.println ("Exception stepRule: " + e.getMessage ());+ M1 c- }: n) m
}$ f' t _ X4 s* h2 i; Q+ ~8 X) E# t( T
* k6 } Z9 m+ k3 p5 j) P" n8 T try {! D O/ o6 D2 i* U: W. h8 @, v
Heatbug proto = (Heatbug) heatbugList.get (0);. b5 H( q( ]- i. i) u5 X4 G
Selector sel =
G% w1 |7 ^: b new Selector (proto.getClass (), "heatbugStep", false);& P% i2 Z7 D7 y0 \
actionForEach =
9 V& ` J0 J: x/ A' x. n$ D# _1 c modelActions.createFActionForEachHomogeneous$call4 E6 D1 u" A7 x$ y) B
(heatbugList,6 H" ~9 J4 @1 T5 O
new FCallImpl (this, proto, sel,2 x5 f! g- @/ Y
new FArgumentsImpl (this, sel)));1 E1 x; P$ _+ Z2 M2 V d7 y
} catch (Exception e) {
3 D0 a" ?8 w6 f$ { e.printStackTrace (System.err);
1 U8 o+ o( S- M0 \3 q0 { }9 h3 e5 f6 A8 C. n( u ~7 i6 K
, Z# N2 \$ t0 p i
syncUpdateOrder ();
! b! l4 U/ e4 B n: f; Z* }- t9 D9 D$ E! t) J
try {4 ~" N! T* x! Q& b5 r2 A! ^
modelActions.createActionTo$message
0 Y) X7 S' {' R9 q/ {; T (heat, new Selector (heat.getClass (), "updateLattice", false));
! F5 ? C: y2 D5 |* N, m' O } catch (Exception e) {
" P9 v1 H6 D# s& c System.err.println("Exception updateLattice: " + e.getMessage ());
: y5 F* n( z- r* i' ]( O* ~9 C }
% M& D: [6 a# e
% L* u; Q" _ B# {/ L6 Q // Then we create a schedule that executes the5 F/ L+ p0 _) x6 F' X7 [
// modelActions. modelActions is an ActionGroup, by itself it$ A; q2 r0 r* Y* D
// has no notion of time. In order to have it executed in
S& C! V# n' n6 J# ?2 x3 A/ r' [ // time, we create a Schedule that says to use the( Y/ R6 c2 C$ e0 R- i4 ~6 T6 S: ^
// modelActions ActionGroup at particular times. This
# Q. g4 k* V1 D4 D g/ w // schedule has a repeat interval of 1, it will loop every
2 @$ t/ Z; k8 n8 {5 n9 [ // time step. The action is executed at time 0 relative to* u7 z+ b, c: l3 T. P
// the beginning of the loop." {2 ` l0 }3 x
8 n0 B3 Y: R* @& J
// This is a simple schedule, with only one action that is
+ E1 t1 }& F; {) J // just repeated every time. See jmousetrap for more7 n; s8 Q, N: W9 B+ }4 h# w# x$ v
// complicated schedules.
1 p6 `) R' r9 O6 s" z 9 K8 l8 P9 {+ ~. @1 _! L
modelSchedule = new ScheduleImpl (getZone (), 1);
8 x5 j* g' o% Z r9 j modelSchedule.at$createAction (0, modelActions);& T% F4 C9 l. `, N. h
0 K$ g8 \0 w, |3 u: B4 I& w
return this;
! h: y7 e+ {% e7 @1 ?3 L1 ? } |