HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 I/ H. X) d2 p, t6 a+ r6 Q/ n! Z. {, K+ j# e
public Object buildActions () {7 q# @; e4 I4 j0 m
super.buildActions();& _3 C0 O# J, t' Y# ~( l
; v3 a: {( O7 e( M; Y# j, L
// Create the list of simulation actions. We put these in
- R& C/ ^9 W" t$ R // an action group, because we want these actions to be
3 b/ A5 _: l( s // executed in a specific order, but these steps should
0 h# r6 o( L- q- T // take no (simulated) time. The M(foo) means "The message
/ k# Q# e8 y0 u- g // called <foo>". You can send a message To a particular
8 ^; R4 W! v5 }5 ?, |+ E, s4 W // object, or ForEach object in a collection.# S1 G0 _, v2 n5 F8 h* }
) N- t8 A7 T0 J# k; Q
// Note we update the heatspace in two phases: first run3 o0 P& @' b. @5 x9 ~
// diffusion, then run "updateWorld" to actually enact the; Q& J" }3 e" M% Q
// changes the heatbugs have made. The ordering here is; K5 ]5 R+ @% h
// significant!
" v( o& l" n5 S6 U / E/ c2 Y: g3 K$ a4 v. J: K4 C' R
// Note also, that with the additional
+ |+ J3 E* d- L( Z6 m // `randomizeHeatbugUpdateOrder' Boolean flag we can& T B# M1 l4 B$ P
// randomize the order in which the bugs actually run$ v$ ^! e: [0 }% E! q
// their step rule. This has the effect of removing any
3 _) ~/ y1 D" t& G$ Q // systematic bias in the iteration throught the heatbug
; e1 X$ \ D8 ~! C // list from timestep to timestep! u( V: L; D: h; U
9 P4 C, I& J m y" G$ F // By default, all `createActionForEach' modelActions have t. y* t$ G" B+ S# l
// a default order of `Sequential', which means that the
6 t2 h& p8 ?. @( I, V* D // order of iteration through the `heatbugList' will be: i! U$ I- M" K4 g/ Q6 N0 u
// identical (assuming the list order is not changed' ]1 n1 T" a3 e i) C
// indirectly by some other process).
6 b- U2 U. J* z, N! h3 Y/ t; c ( ~, a, T5 z- W; I" u7 l; _
modelActions = new ActionGroupImpl (getZone ());
, f, r/ e( J* ~; _1 v( Y
6 W+ [9 x; M+ X3 Z0 q0 p+ V try {. ?, h2 {, e6 m: J
modelActions.createActionTo$message
2 o- x/ e5 ]8 G! K& v$ K- _7 C' ~ (heat, new Selector (heat.getClass (), "stepRule", false));( y* f) E( F$ ]( Q
} catch (Exception e) {
9 ^& T: X0 Y" E- E7 L& l& F+ ` I System.err.println ("Exception stepRule: " + e.getMessage ());( l2 I% L& N% o, ^8 p
}/ B4 v9 r9 s* Z' F5 q+ m# m
: g6 E. ]1 R* t
try {6 R. e5 N1 V! {7 b2 }; ^0 q
Heatbug proto = (Heatbug) heatbugList.get (0);2 f( R: E7 ~; N! M- p. @8 w$ s
Selector sel = - f b7 T) \: y) v: ~5 [. K
new Selector (proto.getClass (), "heatbugStep", false);
" ]- b- l4 f) |9 E5 t actionForEach =" g# n9 u& i# C0 y |: u. y
modelActions.createFActionForEachHomogeneous$call3 E0 e+ ^" y6 d) i
(heatbugList,
3 R1 L0 y1 N B new FCallImpl (this, proto, sel,1 ?( H, i. m7 }5 r" a
new FArgumentsImpl (this, sel)));
3 Y- K) E( L' ^ o } catch (Exception e) {
G+ i5 q: k' d. d, i" ^5 }2 n3 F e.printStackTrace (System.err);
) s/ Q$ H( Z; v* t9 j; Q: }4 { }
1 ]) B2 i+ y% u% L* F& }
, {4 P3 {& x. m- q syncUpdateOrder ();7 F, _1 F" O( B
" c$ ?+ U; B5 v1 ~, t5 ^: P0 }
try {9 P% K, c* y( r
modelActions.createActionTo$message 9 f. v' S0 k+ {/ S" L
(heat, new Selector (heat.getClass (), "updateLattice", false));& O' o% L1 ]9 \( o, U9 u m
} catch (Exception e) {2 A* Y7 y8 q, I/ d3 b* _3 X
System.err.println("Exception updateLattice: " + e.getMessage ());
2 j' e% |: y" j3 g9 L }
0 M9 C; M& C4 i$ T- U3 w : d- L8 G1 Y M) r
// Then we create a schedule that executes the' O3 Y% [9 W" {: D8 ? ~
// modelActions. modelActions is an ActionGroup, by itself it
, Q) Q G* D% J2 R2 l // has no notion of time. In order to have it executed in0 e+ E$ g4 R! R& h. C3 C" y
// time, we create a Schedule that says to use the4 B8 X. b* ?) ]5 N/ ?; P
// modelActions ActionGroup at particular times. This! J- b0 D/ g$ m" `' R1 ^7 n. y
// schedule has a repeat interval of 1, it will loop every' k" D- ?( L5 ^: \2 ~
// time step. The action is executed at time 0 relative to) W- }* N9 a _6 e" A9 ~+ S
// the beginning of the loop.
' x1 K3 J' t# u% O8 n2 Y- q2 y) k3 M) G
// This is a simple schedule, with only one action that is+ B) h0 i6 f/ s* o+ e2 t
// just repeated every time. See jmousetrap for more
+ Z0 e& d9 l/ g! s! L // complicated schedules.
x' f: M! W6 P
) A4 h1 }3 P5 l4 L modelSchedule = new ScheduleImpl (getZone (), 1);# `7 H7 @; f- P I5 E n) f
modelSchedule.at$createAction (0, modelActions); i0 }* J- f8 o6 @) b
, X+ U+ }3 o6 D' `3 s& k
return this;
; j+ r- V! Q# `: L1 B2 S+ V4 |& x } |