HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 u. }) |1 F8 ~3 {4 \! T- U! m
/ R/ Z8 Z! i: `; K( M3 l public Object buildActions () {4 Z, N8 a6 o. y1 Z% N" {2 Z
super.buildActions();
- N, G/ s- S( K p. V" G8 s8 L9 ?
// Create the list of simulation actions. We put these in! L' B7 V. ~0 {4 Z; |' V; w/ Y
// an action group, because we want these actions to be2 n5 ^" o4 U5 v
// executed in a specific order, but these steps should
) h8 b; M0 d$ p5 X/ [ O. o+ ^# T // take no (simulated) time. The M(foo) means "The message: I K2 s. Y. e
// called <foo>". You can send a message To a particular
8 M. Q: b5 d* [0 T* y( K // object, or ForEach object in a collection.
9 r9 o! V. k' Z. m1 f x
+ P5 }% q- [0 z/ ?6 n5 | // Note we update the heatspace in two phases: first run
. r' G5 W3 q5 U0 O: C9 ~ // diffusion, then run "updateWorld" to actually enact the
6 g) p* m0 C5 z) U: v // changes the heatbugs have made. The ordering here is
`: ~3 T4 f6 D // significant!5 Z$ @. ^- H. m* t0 E! V: C5 L
/ ~ ?, v' x' d% X. T7 L# r6 o6 ^
// Note also, that with the additional
o t- A* k! b# F( ? // `randomizeHeatbugUpdateOrder' Boolean flag we can
# v5 S1 @& z" q( p7 y- _. l4 h* P // randomize the order in which the bugs actually run
5 \/ A, G, c& _; u // their step rule. This has the effect of removing any9 W# k( g2 d# f- v/ V5 j' J# \
// systematic bias in the iteration throught the heatbug+ s% j" q3 h+ e; V- t4 m, {& a
// list from timestep to timestep
- G, @. w3 I' \5 D) |: I" h. J 2 i: @5 t m7 k9 d9 K, Q- N3 Z
// By default, all `createActionForEach' modelActions have; Z8 _0 c0 v p" y/ [9 x. f% W
// a default order of `Sequential', which means that the* a& g1 X# v* P, o
// order of iteration through the `heatbugList' will be1 B' W7 Z( b& i1 w! h6 O; ]
// identical (assuming the list order is not changed
4 |8 u8 Y( D3 r8 K' [9 } // indirectly by some other process).
& k( S7 U$ r( q& l8 e ; I) O( a. G/ e" N( L7 o" B
modelActions = new ActionGroupImpl (getZone ());1 M" b3 V5 V% [
6 p u! P! P% I5 f7 T8 D
try {( R& o6 q3 S* _5 A' K6 B
modelActions.createActionTo$message' m" J9 r* y6 }- j
(heat, new Selector (heat.getClass (), "stepRule", false));
6 Z% p% l' ]4 `' J$ f } catch (Exception e) {2 v1 {2 `' ]$ Q+ T( ]
System.err.println ("Exception stepRule: " + e.getMessage ());
4 ~7 R& Q( c0 a$ R2 Y }0 X8 @' r* O! p
- ?* Q4 F+ M6 t! M
try {
` k9 b4 |# ~8 Z' t+ S6 y Heatbug proto = (Heatbug) heatbugList.get (0);6 } I: U2 D U- L% ^) T1 R' O
Selector sel =
# J+ k) [: N: [! \* E% l2 [2 a new Selector (proto.getClass (), "heatbugStep", false);
0 @6 E- C8 F0 s& J2 }$ j actionForEach =
5 R9 `% R+ O. U- N. r4 S4 Z modelActions.createFActionForEachHomogeneous$call. u2 _2 `/ J+ Q
(heatbugList,
8 e& T( @* z3 T new FCallImpl (this, proto, sel,, f- o2 S1 a, ^& u/ b; ]
new FArgumentsImpl (this, sel)));
9 B: c2 C' G& c, { } catch (Exception e) {
2 F2 o. I& F9 b e.printStackTrace (System.err);& R5 X8 y' d6 \. Q/ X8 z
}
C9 Y7 e2 n* n: r
4 u( r& z$ W3 w' X5 V, C syncUpdateOrder ();
/ ^3 R5 {0 y. o l" T4 p7 h# V% X0 ~7 @, @6 n6 [$ \) i
try {
6 S4 F5 `- k% m& s: h) H* T7 U modelActions.createActionTo$message / k% R! f1 o6 r$ p% R2 O1 o0 a
(heat, new Selector (heat.getClass (), "updateLattice", false));% N3 ^, S% D. f' |9 y, C3 t' w( Z
} catch (Exception e) {! E. @2 b" e7 E* V& ]# d4 {
System.err.println("Exception updateLattice: " + e.getMessage ());
: O/ Q e& U% i# V }
7 B9 d2 e0 P( N' ] ' V: n1 q% v* ~9 @6 X8 S
// Then we create a schedule that executes the6 K' R8 u! L) [0 D: T. r) e
// modelActions. modelActions is an ActionGroup, by itself it
x& G! S# m8 b# h# ? // has no notion of time. In order to have it executed in
; c6 R/ l, u; o$ q* V% w- j // time, we create a Schedule that says to use the
" g& d& \! c- C- M6 R3 |2 b // modelActions ActionGroup at particular times. This2 t y0 Y8 U) m) ?% Y& b7 T' h
// schedule has a repeat interval of 1, it will loop every
/ [$ L8 m$ q* k$ i. q1 ]2 r& B // time step. The action is executed at time 0 relative to7 k* Q, R' ?" k. _, L' V
// the beginning of the loop.
! g0 r1 e5 ~) W7 q9 Z, X d/ w
5 d6 g+ N$ ~5 \+ a5 ^ // This is a simple schedule, with only one action that is
5 }2 L2 V Q2 a5 D // just repeated every time. See jmousetrap for more% ?- }; S- @- _; m$ \% \
// complicated schedules.
: O( @4 V8 X E
* w3 F3 A! ~! h# u/ z3 ] modelSchedule = new ScheduleImpl (getZone (), 1);
) ?3 d- E( P* w+ u modelSchedule.at$createAction (0, modelActions);
. M- }/ I. u) a, ~$ ]1 c) c- L 8 U9 W3 T& o5 j9 ~3 a
return this;
7 U1 O; A. z8 z0 m- T: ~ } |