HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* L0 z8 }1 n# v3 L- r' n: W0 S+ M+ [: S4 R2 q* W
public Object buildActions () {
. o9 U% @7 u8 j3 ?9 m y super.buildActions();3 x, E- I! A1 U! V5 X
; q9 ?' `/ K% e& `8 S- D // Create the list of simulation actions. We put these in% f$ R5 Z9 I a5 [
// an action group, because we want these actions to be
9 o3 k* s I4 w- r* i // executed in a specific order, but these steps should
: @( W- D* J/ ]2 L // take no (simulated) time. The M(foo) means "The message
+ x1 D F# a3 ] // called <foo>". You can send a message To a particular
; @$ [) T1 R/ A0 |4 k/ V# H, ]0 o // object, or ForEach object in a collection.
5 ]: w2 `& {4 ^- @
$ Q8 w7 U2 t2 n- {! |, x // Note we update the heatspace in two phases: first run
: M6 `! L( I3 ?5 _/ c) H // diffusion, then run "updateWorld" to actually enact the
7 L) C. h5 Y j) F% H s // changes the heatbugs have made. The ordering here is8 P" O6 u% F$ w1 }4 e7 [
// significant!
* s, b: t0 q) k# B3 S( Y
8 X) R3 i5 W! q5 X6 }; u // Note also, that with the additional8 m6 h+ i3 A0 ^+ ]9 ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ k1 [' k3 E2 K( G$ A // randomize the order in which the bugs actually run. K9 r' c9 e. G2 h# I. ^ b- P, z
// their step rule. This has the effect of removing any
( i- @: V4 y+ r0 h% J // systematic bias in the iteration throught the heatbug
! a& _; Q) h7 E // list from timestep to timestep. Z# ?% S( t" P
: {; x& a& G1 Y7 B% e9 ~" ` L: p // By default, all `createActionForEach' modelActions have. z( @7 t" }& ]6 f- S" d
// a default order of `Sequential', which means that the
5 X( L9 Q+ K; B7 |; l // order of iteration through the `heatbugList' will be9 F+ P% k# B* L
// identical (assuming the list order is not changed
) z5 @7 m/ J- g // indirectly by some other process).
( U: V( S N- [8 M) W2 h & _; _1 G1 t5 O/ }7 T
modelActions = new ActionGroupImpl (getZone ());; g, l) I, R' L- g4 t5 m
8 y1 Q4 @( c# w9 w# Z try {
" s6 I) o6 a* ^& K* v; o: x modelActions.createActionTo$message, `. T$ e- B, j# ]1 i1 V/ V
(heat, new Selector (heat.getClass (), "stepRule", false));
0 v( W- g, w9 }! I9 e: _- `9 z } catch (Exception e) {
6 O, f2 G/ a' k; G6 l/ c: A% t System.err.println ("Exception stepRule: " + e.getMessage ());: [; A8 n, ?# ^3 Z Q- @* O) |
}& \- o( W! H1 l1 v) Q
: h, t8 F4 A3 ?8 n try {
# q3 I8 y0 a) U, d$ Y% J Heatbug proto = (Heatbug) heatbugList.get (0);! b: C2 a s: k! R0 S
Selector sel =
9 {+ g" p! Y. Z new Selector (proto.getClass (), "heatbugStep", false);
7 q' n$ h5 g, T* B2 Y0 H actionForEach =9 F: Z# H# |, |2 J& D9 m
modelActions.createFActionForEachHomogeneous$call
+ e/ W! `! L* j& j9 v7 G* D! w% A (heatbugList, t' _9 b6 y; P" i1 ^
new FCallImpl (this, proto, sel, _, q6 \. L2 o- _
new FArgumentsImpl (this, sel)));
3 C1 p- o& ? F } catch (Exception e) {5 Q7 I, o9 V) o2 P' ?* ]
e.printStackTrace (System.err);# G+ u& v% i& _" P/ g
}
& a0 X+ Y& X/ D( f: |
) [" C( C) r' B" e4 y2 g0 b syncUpdateOrder ();
* ?0 M! Y- L1 V; L$ r4 m. l' z% `! [3 w' z/ t! B; ?
try {
( m Y/ J! a! P R! e9 }; P modelActions.createActionTo$message * U6 \/ m0 X% d/ c6 m. z
(heat, new Selector (heat.getClass (), "updateLattice", false));
! F" F* P4 s' y/ C } catch (Exception e) {% t! O7 m6 y p& s5 b9 B0 X
System.err.println("Exception updateLattice: " + e.getMessage ());
2 X3 W y, i" n9 W, ~9 o" y% u; W }
6 o3 Y" S6 `. e# l3 r
^! {- C* ?6 d% }/ ` // Then we create a schedule that executes the
" }, S2 i \) h% n // modelActions. modelActions is an ActionGroup, by itself it" [5 J* e* G* V* d1 U
// has no notion of time. In order to have it executed in
, X* o8 Z6 b' j/ W' e$ x, o" {5 {" r, o // time, we create a Schedule that says to use the& Z* c/ B+ |& [9 H9 c' }9 x
// modelActions ActionGroup at particular times. This2 {# M+ Y( L, X" R& e1 K' |( V
// schedule has a repeat interval of 1, it will loop every5 s0 v$ k) ?( I w) Z/ j
// time step. The action is executed at time 0 relative to% Q3 H0 m- s5 H9 d
// the beginning of the loop.. q" B4 y9 c! O# U$ K& h) `. n
4 ?9 Y+ H& \( G // This is a simple schedule, with only one action that is
8 X' C% _* Z9 l5 a // just repeated every time. See jmousetrap for more
& b; q" ^5 ]" U' G4 g+ o! Q // complicated schedules.
) X. m8 ?* f6 x& y 9 \$ M$ F$ R+ ~! P0 `" N
modelSchedule = new ScheduleImpl (getZone (), 1);
0 E+ \( D3 k8 J4 D7 P modelSchedule.at$createAction (0, modelActions);. y5 _$ D! _" N9 V2 A
- r* b+ k7 Y; A9 \# q. p, B) \4 W7 k7 l$ j return this;0 K9 y5 X! L$ g
} |