HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
5 v; h0 Y$ o) Y [) S; C1 D) g, c8 v# k5 s- @7 a# Y W
public Object buildActions () {
& W* r$ M4 X7 K- [* o super.buildActions();/ @9 P `4 w2 D
4 l- \( W: P' l3 c+ f // Create the list of simulation actions. We put these in* [5 ?. z4 q; N
// an action group, because we want these actions to be; G; R6 F6 }8 w$ E
// executed in a specific order, but these steps should
6 n7 `. H0 j" d$ x# H9 E, @ W2 U$ L // take no (simulated) time. The M(foo) means "The message
6 G& `! [2 R' H // called <foo>". You can send a message To a particular
) u- \* ?3 L6 @6 `5 H // object, or ForEach object in a collection.
+ o8 c* Q$ I# @( J " P" h. `% n6 V3 l/ L
// Note we update the heatspace in two phases: first run S" e, B8 w! h% n' P; R( N1 k6 R
// diffusion, then run "updateWorld" to actually enact the
: i7 `) x* v5 \# g, `2 v // changes the heatbugs have made. The ordering here is
# d, Y) ~6 \# U/ d( Z$ n // significant!
3 O* r$ x1 `5 m; G! M2 j
; z N9 \" `/ k1 K- j( j // Note also, that with the additional3 s @& O( o# R8 J6 ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 D5 m) a# H3 w- k, z/ N
// randomize the order in which the bugs actually run
0 D* V2 G. K: B% F, S# i, F // their step rule. This has the effect of removing any% J- C f% [$ g: O; z, [
// systematic bias in the iteration throught the heatbug
! F% p" w1 z- [1 ~7 s5 j1 I6 N+ d // list from timestep to timestep* a. `' e2 x3 @3 \3 b
. {* T9 J4 v8 f# Y" j // By default, all `createActionForEach' modelActions have
6 k7 x% C% ~+ D0 ?: W6 j' i // a default order of `Sequential', which means that the; S4 H: F0 O: \8 y3 x( p& l
// order of iteration through the `heatbugList' will be
7 E3 v" g% {3 B. V$ z // identical (assuming the list order is not changed
+ x! x7 q7 g# x: l // indirectly by some other process)., h" I# l& y( e& R0 m' e
8 X4 t1 d! I5 m) _0 ^. y; O3 ~
modelActions = new ActionGroupImpl (getZone ());
6 M. k+ ^+ q+ @9 W; I. e+ e0 x1 j- Y: `6 r' U& }" I
try {
" u& \+ [' G& d) y modelActions.createActionTo$message" J E8 |. o/ T. ?
(heat, new Selector (heat.getClass (), "stepRule", false));2 |8 _: N: R' h% @
} catch (Exception e) {
( I# e( X# J) e8 O3 F# q System.err.println ("Exception stepRule: " + e.getMessage ());
( |( L, m1 K: ]& q% t }$ L, q0 H. p/ a) B0 ]
4 ^ x+ K+ C/ Z4 A5 O
try {( Y2 y8 [! `4 p: v5 `
Heatbug proto = (Heatbug) heatbugList.get (0);* n* @ H1 C* J+ }) |4 G
Selector sel =
* P; o- y" t# ^8 B new Selector (proto.getClass (), "heatbugStep", false);4 j9 ]$ w) B) I$ ~' q
actionForEach =9 M$ e3 K# u" t( r9 N# a+ J
modelActions.createFActionForEachHomogeneous$call
# R5 @! Z6 D2 y' j1 ^ (heatbugList,
* ]6 T# f! C3 Y @' m new FCallImpl (this, proto, sel,1 S5 v9 D$ b5 c8 u4 D" w6 @
new FArgumentsImpl (this, sel)));
/ v- V; \: K0 ~& |& m } catch (Exception e) {+ o& d: E% P* c8 _6 t
e.printStackTrace (System.err);, s# m3 c' S* i+ X4 D. a8 Y, H! V
}
) n& [+ C6 _7 U$ u; B
2 [2 _8 c- P0 x4 k+ I' \# S$ t! v1 u syncUpdateOrder ();
2 x/ y$ s9 [2 b
" n- s; i3 o0 j8 ]- _$ A3 I try {' V" t. K0 S/ J) G" O. Y; K, X
modelActions.createActionTo$message ! D5 |; J5 k" x$ m* n
(heat, new Selector (heat.getClass (), "updateLattice", false));) A2 `: Y" ?$ n* e
} catch (Exception e) {
% T' ]7 t+ J! b1 y; |) D7 H5 ~& W) g$ E System.err.println("Exception updateLattice: " + e.getMessage ());
" |/ _6 E- P# M n: @* v5 k" b }) C7 X7 x: v/ j1 h0 b* L$ e
; Y% P( C5 T0 a/ p# s7 j2 i
// Then we create a schedule that executes the) s5 @( ^" V& P2 g& D, [, O
// modelActions. modelActions is an ActionGroup, by itself it
4 l+ j$ u- e; ^* Y- f O: v1 L // has no notion of time. In order to have it executed in
0 w8 P7 M' @, F1 W, s L // time, we create a Schedule that says to use the5 D( D; v4 r# V# t+ ^
// modelActions ActionGroup at particular times. This* o% }0 [& q! L) f
// schedule has a repeat interval of 1, it will loop every {: m* I' f7 c) U
// time step. The action is executed at time 0 relative to4 H& Y# |; T: D, Q+ g7 f3 S
// the beginning of the loop.& k; w# ]; R. I3 ^. l# ^8 R
4 R" g& q4 O2 Y1 H" ]5 j5 n, D // This is a simple schedule, with only one action that is
4 L) n) f( |' G8 } // just repeated every time. See jmousetrap for more
$ X0 \: u8 F8 {3 e |, B$ W1 r // complicated schedules.7 H5 u7 u( G5 a- ~# ~- E
5 }6 S& r2 I' c4 W4 j8 I
modelSchedule = new ScheduleImpl (getZone (), 1);, q+ m' K# O: L& {/ N9 O
modelSchedule.at$createAction (0, modelActions);- m5 f- o. F# u4 U2 E" V' Z
& J5 p4 L/ q- E5 ?* E4 ? return this;' x+ s$ N0 s* B, I, p, q0 y2 T
} |