HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; }1 [# x% k7 z, d" y( U
* K; x9 j: W( t) ~5 Y public Object buildActions () {
( b5 K9 S' r- P6 k$ s super.buildActions();
2 ~8 b1 Q$ W6 R9 x4 U2 u7 ^ % E) F) g+ s% C6 x
// Create the list of simulation actions. We put these in
F- A" n( P1 i // an action group, because we want these actions to be4 P. Z6 ~9 c& o- k
// executed in a specific order, but these steps should
- [% Z, {5 e1 y7 N3 i // take no (simulated) time. The M(foo) means "The message
" e/ H5 a# o) {: t, F // called <foo>". You can send a message To a particular
* m3 H& P, S" F7 z5 E // object, or ForEach object in a collection.7 q1 c3 e8 x. e( ^$ e2 w& l6 G
$ i( b5 J1 e/ s0 m0 F. d // Note we update the heatspace in two phases: first run n' L {2 [/ [: w) @, M
// diffusion, then run "updateWorld" to actually enact the
! Z' W: m5 E8 `4 \! W6 J! p // changes the heatbugs have made. The ordering here is; f9 ~! J' Z7 N# d% J, K
// significant!
4 k7 [& z+ N" ^4 N4 V " ^+ X; B7 Y- a4 d9 L" ^: k- H) P
// Note also, that with the additional7 [+ U4 v" j* b# g
// `randomizeHeatbugUpdateOrder' Boolean flag we can! ~% A4 j0 R# A) K% Y
// randomize the order in which the bugs actually run6 e' q I7 }; {2 \2 Q/ F* C3 P
// their step rule. This has the effect of removing any
/ |5 ^/ H' ?8 b4 z0 x; @& ?( C) t4 ~ // systematic bias in the iteration throught the heatbug1 ~" M' @( S% k) k, o' ]. ~9 k5 h) x
// list from timestep to timestep
& A4 l% @2 s8 o' J0 T! ~ P# a " j5 Q; b+ h5 N9 y
// By default, all `createActionForEach' modelActions have
m0 v" h2 R5 C/ a. s2 d // a default order of `Sequential', which means that the( Q: i' ]( _. J/ S. r% v% b+ @
// order of iteration through the `heatbugList' will be9 n3 V" m/ L3 }& `/ r( i
// identical (assuming the list order is not changed
; V& c5 E! X. T; \: O+ A* ? // indirectly by some other process).
6 V9 w* h. h! w2 l7 s; ]
/ I! W* d* i* q& B+ _ modelActions = new ActionGroupImpl (getZone ());) {; G- o+ z4 S; l3 w1 N
0 d, J3 T; E+ {
try {' J! x9 Y$ n& X5 Y9 \5 N
modelActions.createActionTo$message
9 p( I( s0 T; ]8 ~7 W- n (heat, new Selector (heat.getClass (), "stepRule", false));
: T: c! t) F+ G- c% N. Z } catch (Exception e) {
1 \) U- @1 I1 F- }5 l% s2 Y; k System.err.println ("Exception stepRule: " + e.getMessage ());( M$ d$ h2 H0 R0 y4 n, R
}3 f% w% G2 x2 {) `
O" s8 c1 P" t- V, w
try {7 h5 I( ]4 d8 @7 |. C
Heatbug proto = (Heatbug) heatbugList.get (0);
0 B* |- f5 k, b$ N Selector sel = 3 M/ C3 a# O- p# E
new Selector (proto.getClass (), "heatbugStep", false);2 l4 W3 g2 u. U0 [2 y4 T
actionForEach =
" r; c, O5 E9 c( i4 v/ ]$ g; t- a modelActions.createFActionForEachHomogeneous$call( S* d. M9 J+ `
(heatbugList,
" l# l1 x1 T" T. h# \" ` new FCallImpl (this, proto, sel,
$ @) e9 S& k: u0 @8 n new FArgumentsImpl (this, sel)));: V# }+ r5 T" @) [6 l2 Q
} catch (Exception e) {% \9 ^" |; N0 `! Q
e.printStackTrace (System.err);
1 v" \8 o! e; W7 M p1 ` }! x) v! E( Z( @6 V- \$ p
/ }( O7 m# _8 ]9 h9 q& [. O2 S
syncUpdateOrder ();8 ^9 V! C* N8 x# W6 c( A% M
& V. I5 ]0 P% i try {9 l! v2 r2 c \. L# s2 b! S
modelActions.createActionTo$message . k/ C9 r* z* n/ p6 h) l
(heat, new Selector (heat.getClass (), "updateLattice", false));
& e, A c" n6 G+ f' b( d, u } catch (Exception e) {+ T/ l r) E0 D# b A/ a
System.err.println("Exception updateLattice: " + e.getMessage ());
2 O8 R/ ^' |8 ?% s, b }5 Y8 v9 [& V( V
7 j( T& z7 E) J) N9 a" u
// Then we create a schedule that executes the1 U$ f2 Z: U7 D/ J j
// modelActions. modelActions is an ActionGroup, by itself it
4 r. l! {+ {8 U7 u/ O- N1 u$ v // has no notion of time. In order to have it executed in5 _4 ?/ C1 t5 F5 ~/ k ~8 J
// time, we create a Schedule that says to use the
; ~+ p( y4 J4 k7 D: e5 Z // modelActions ActionGroup at particular times. This6 I5 B* h. _4 M& G
// schedule has a repeat interval of 1, it will loop every
' r7 u5 H9 Q. V% A. G // time step. The action is executed at time 0 relative to
2 c; ?5 t0 u. T; K) A/ r5 y // the beginning of the loop.# X2 O( o- d3 N
/ p6 E. }3 Q& E // This is a simple schedule, with only one action that is/ E2 A- r$ n9 H: Q8 }8 ?" h
// just repeated every time. See jmousetrap for more5 c7 p5 k, j* Z) Z, m3 [, [2 |+ \
// complicated schedules.9 }7 j7 [2 ?. U$ F
- q* `! u& N* Z" L modelSchedule = new ScheduleImpl (getZone (), 1);
- v! d1 Z, s) E2 D5 Q# T I/ X; p modelSchedule.at$createAction (0, modelActions);5 C9 d! }7 L& R
$ Y) J( p6 G6 W return this;1 @" g/ O8 l+ f
} |