HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" V7 ?- H, p/ P) C: G# m' T( P7 F3 w
public Object buildActions () {3 ~9 j0 W6 C- r3 Q9 @) y
super.buildActions();' s! Z" c5 ?$ d Z j- `
s7 j5 t# h N; O! ^9 k
// Create the list of simulation actions. We put these in
( W% K' `% H3 N4 }2 W% q // an action group, because we want these actions to be2 I8 [% U! r, r
// executed in a specific order, but these steps should6 u. I6 ?& J1 o) x+ o
// take no (simulated) time. The M(foo) means "The message
, H* h( j/ U4 |7 e% g% ]( t // called <foo>". You can send a message To a particular6 W: t. ^; W1 s, N5 a
// object, or ForEach object in a collection.2 D! w- W( n# K' t- J6 b! t' }* o" Y" a
: h# S. U# p. r! G) d- _% b2 c# N
// Note we update the heatspace in two phases: first run
$ q# g }8 Q7 H5 M4 M& s // diffusion, then run "updateWorld" to actually enact the
% r! n7 }+ B+ _- ~ // changes the heatbugs have made. The ordering here is7 T: i% h8 O4 }9 O0 I
// significant!7 d" n1 u; W4 p! i% [( P. q
6 Q& A( z* a% Z0 N // Note also, that with the additional, n; p0 }0 [ f4 C) Q& R+ ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ x; m, G2 F# B3 y( B // randomize the order in which the bugs actually run4 T1 Z" _3 T; T7 P$ s8 z& i
// their step rule. This has the effect of removing any7 _: O% j r4 y4 y( O
// systematic bias in the iteration throught the heatbug6 G. {5 j% @1 t* T. B+ x" t
// list from timestep to timestep
: R( m' ~, s1 G$ \3 r
3 Q& J8 l) C* w2 s/ ]6 h, f+ Q // By default, all `createActionForEach' modelActions have
( c! m$ ]' o7 R* V( X // a default order of `Sequential', which means that the
* J+ L4 J% m D! g // order of iteration through the `heatbugList' will be
% ~! e2 A: t* {! @; N // identical (assuming the list order is not changed
7 l2 E# J" J z$ A5 `1 w // indirectly by some other process).
+ K; Z4 Z. L% K0 G( `0 i! o A : v# W9 j* X; Y# t' [' M1 g
modelActions = new ActionGroupImpl (getZone ());! Z1 K" D$ X. d) ~4 O1 S1 j% q/ y
) P2 A- Q% c h, B3 S, e, O5 L9 I
try {
+ ~- Y' }: @1 i# J( J c9 L+ ] modelActions.createActionTo$message
( I& [4 _# E& ]2 }! Q- V (heat, new Selector (heat.getClass (), "stepRule", false)); l' j8 R, r6 u
} catch (Exception e) {
I- Z, b4 d1 f4 C% H System.err.println ("Exception stepRule: " + e.getMessage ());
- k( e7 L. P; ?1 F- ~. W- V1 g) z }
: e# t! \0 E0 ?( P* A/ C: [$ d1 c( S& H+ o' z$ v
try {; P/ Q+ }, E: h* m" a" T a$ Z* r
Heatbug proto = (Heatbug) heatbugList.get (0);2 p, y3 `, }0 ^5 [+ r4 c U6 X
Selector sel =
C1 V: V4 C% k new Selector (proto.getClass (), "heatbugStep", false);
+ m l; i" Q9 ?# v actionForEach =9 K$ i* ?" B% K2 ~* K4 t$ O
modelActions.createFActionForEachHomogeneous$call8 {9 l( Q. t2 E j, ~# F4 E
(heatbugList,
; R3 |$ q7 H# i( _ new FCallImpl (this, proto, sel,2 a/ r/ s& U& _' {' `
new FArgumentsImpl (this, sel)));
: Y! w/ @( P0 U( D5 \7 i } catch (Exception e) {8 e# v w2 b/ P& j* m3 z
e.printStackTrace (System.err);. m b# j6 t6 [3 c# V; ]
}
( F: p+ c6 Q ]; T2 n$ L2 g' ^' @: z8 P3 X
/ w1 M' ^' O! {* c/ v/ y8 P# _ syncUpdateOrder ();4 H1 p8 ?" G/ I
$ U: I0 D0 W4 N, g( g, z
try {0 A) ]4 ~! A% A$ e. M0 @/ f: v& s! o- _
modelActions.createActionTo$message
3 b/ @" w: h, C' ^ (heat, new Selector (heat.getClass (), "updateLattice", false));. I+ J! x( ?! D) C. O
} catch (Exception e) {
: J! A) ?/ H7 P! [8 @ System.err.println("Exception updateLattice: " + e.getMessage ());- _; R- t0 X7 {
}
) }2 p" {# W: ?9 V
+ g; g# F8 t7 g# O' \ // Then we create a schedule that executes the
& p. Z# i7 Y* ~ // modelActions. modelActions is an ActionGroup, by itself it8 l6 P4 i! g. Q, _ {
// has no notion of time. In order to have it executed in( A( ]- i" C# Y1 ]9 f8 x
// time, we create a Schedule that says to use the# ~0 M# ]! c* O$ u8 s* Y/ i; S) K
// modelActions ActionGroup at particular times. This4 Q' v: h. S5 g$ ]9 U0 ^. S$ c
// schedule has a repeat interval of 1, it will loop every
5 F) {7 x3 \0 n) N o! o // time step. The action is executed at time 0 relative to' ?9 } h' j$ U4 ?
// the beginning of the loop.
[# N, @# I1 d+ @0 I( k( c8 W% b+ H
// This is a simple schedule, with only one action that is
' l# K$ r1 L1 `' y3 l8 c& c" I2 i& Z1 v // just repeated every time. See jmousetrap for more1 M$ B- G8 C* V( f+ J
// complicated schedules.* M: m7 N+ _) z3 ~5 _( s1 n
& H' R! Y# M% A& i! U0 Z
modelSchedule = new ScheduleImpl (getZone (), 1);
6 l5 E' Y) ^" `( A+ t modelSchedule.at$createAction (0, modelActions);
5 e# l M# Y* T2 c* G$ W% E n 3 t2 \5 }, f7 s. P
return this;! N. r6 ~3 {- i) l! Q( z8 i5 R
} |