HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* H! i3 Y7 Y8 B! T# m& I0 V1 V# P& G. G" B/ {+ P
public Object buildActions () {1 b3 v( g3 h; d: o* p0 x( C
super.buildActions();/ s, z2 Y" V8 ^+ i; U e
) i: k# z5 O f7 l$ j // Create the list of simulation actions. We put these in9 A6 t& n: d( T0 k _! w5 ~+ T; x
// an action group, because we want these actions to be( l# R. h3 S. S8 @9 L- X) ]: \$ a
// executed in a specific order, but these steps should
+ ^3 {$ u( C3 `" [! ?1 J! B5 ] // take no (simulated) time. The M(foo) means "The message. S, X& {( I& ~+ m7 t$ F' {4 n
// called <foo>". You can send a message To a particular( f" @ I9 B, \+ n# @
// object, or ForEach object in a collection.
: `* y( q1 W: B" g. b ) I0 B ?& [. d
// Note we update the heatspace in two phases: first run7 \3 M% @( X! {* F5 e
// diffusion, then run "updateWorld" to actually enact the+ k+ {. F# k. b: H7 H: E1 D
// changes the heatbugs have made. The ordering here is" ^- H3 { R: \7 v
// significant!
3 p. W- Z \2 S: H. k& Y . }6 U, D. t( K" f6 u
// Note also, that with the additional
( e0 f/ ~5 W. ]* o+ A. |# m# R // `randomizeHeatbugUpdateOrder' Boolean flag we can, j% i. Q7 { ^5 z m1 w3 t% y+ _2 I
// randomize the order in which the bugs actually run
+ y% N) ^* I% K4 l, c7 b // their step rule. This has the effect of removing any* g l( u' Q( i m, O
// systematic bias in the iteration throught the heatbug
9 o" B+ ?# n$ E9 ]* s3 K3 G2 W // list from timestep to timestep) Z+ v# C8 U' c3 v, p8 b# `* l
9 Q0 g) u: m4 G' v! ^' e5 A2 n
// By default, all `createActionForEach' modelActions have
8 C; c/ K% ?3 _+ u+ n1 w // a default order of `Sequential', which means that the& [+ @& t% q8 a( h# e
// order of iteration through the `heatbugList' will be
4 f" C5 D( Q" ]3 i // identical (assuming the list order is not changed, u0 `9 f( J9 J) |* N, y
// indirectly by some other process)./ v+ {2 F9 T3 x; S& D5 z7 L
/ ? S8 q! x3 v, k% k* P; j modelActions = new ActionGroupImpl (getZone ());
( ]( v( s& Q2 D7 b3 ?, x& G6 Q0 ?' _4 f( u- s* w# M
try {8 g8 U7 Q) ]2 n7 [; G: n9 k# t' H
modelActions.createActionTo$message- Q2 D4 [' b5 h
(heat, new Selector (heat.getClass (), "stepRule", false));
8 P" P0 o# e! K } catch (Exception e) {0 U: S/ w$ V9 c: E
System.err.println ("Exception stepRule: " + e.getMessage ());; S. H; O1 J5 }, n" J+ u; a
}
* x$ k3 p" t, U) E% C% m. H$ ^
* V* ?- s, ~% z2 ?" D! ` try {! U" g- [% m A* u( p$ E
Heatbug proto = (Heatbug) heatbugList.get (0);5 L& ~. N0 S& w. }
Selector sel =
3 B# {: @ I% y& }/ t$ v" f new Selector (proto.getClass (), "heatbugStep", false);- o7 I6 s4 B( J
actionForEach =2 i/ \6 R0 q: s
modelActions.createFActionForEachHomogeneous$call
) ]. v' N' X6 f7 z6 i( @3 _& a) X) R (heatbugList,
) O" d9 `/ S4 K! j9 V* h/ X new FCallImpl (this, proto, sel,
9 [1 T5 p3 a. Q. [" E6 a, N new FArgumentsImpl (this, sel)));( W" ]9 j, U2 t9 Z
} catch (Exception e) {0 S# o5 a3 j9 [% b5 _
e.printStackTrace (System.err);7 F5 n: P- D! u. `: N
}
% j4 u! Y$ c X+ ?6 s% o . S" ^2 k H. Q
syncUpdateOrder ();
: O4 g, K* ^/ k6 B, x+ Q8 y8 Q" _3 V- w
try {
2 A/ C3 B( M. `2 ^$ M modelActions.createActionTo$message
* f- c* x- i& {9 e7 B8 ~5 h2 G+ e3 e (heat, new Selector (heat.getClass (), "updateLattice", false));
4 d; ~. \' u: F) C* Q6 i6 t3 K } catch (Exception e) {
8 K1 e! D& y. ?6 z& z. m8 D9 _5 N System.err.println("Exception updateLattice: " + e.getMessage ());& d0 o# J: V. ~' m# @
}7 p4 _! X$ g* u* @; X. s! A1 b J
4 {0 [" l6 j; u2 Q: J4 N4 Q) c // Then we create a schedule that executes the
2 n P2 r7 z3 Q& R4 W: O( y2 z( g // modelActions. modelActions is an ActionGroup, by itself it
5 c C+ G! W* s7 y' _8 M+ b% U // has no notion of time. In order to have it executed in. Y* M& d4 g/ I- |# B
// time, we create a Schedule that says to use the
/ j2 R0 v4 h0 x9 X! O- g+ a% I // modelActions ActionGroup at particular times. This
' t& Y& ], k7 g- h9 s // schedule has a repeat interval of 1, it will loop every0 o; D, e4 ?: O+ l
// time step. The action is executed at time 0 relative to
/ H, C' L% }: _% @3 c // the beginning of the loop.: p! Q; E4 _# c: d& S
8 j. W. v' @" u1 [& y; b // This is a simple schedule, with only one action that is
0 j4 ]# H1 \' l+ Z3 V8 [ // just repeated every time. See jmousetrap for more& y# ?! [+ G2 P# s% J& F& a) ]
// complicated schedules.) [; Q* I& J: J8 E; m2 @' Z
- L4 Y1 p( i8 M8 v2 b" B# u modelSchedule = new ScheduleImpl (getZone (), 1);% R: J( \" t" o: k. p6 Q
modelSchedule.at$createAction (0, modelActions);3 H3 G& W5 F1 I* o5 B+ h) f- m
1 Q5 G" M1 j# Y
return this;
# h9 s! A3 Q1 T( m& @* d } |