HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 g& _& d( W5 P
5 N' H; J/ C$ p; k$ R& l) T public Object buildActions () {% D7 T' q* A. H* Y% e7 P7 D
super.buildActions();, d5 R! A W! B# k' M0 h
: ?/ V" r/ o4 M6 \& v: c // Create the list of simulation actions. We put these in
6 Q3 T0 v3 v8 T3 Q. } // an action group, because we want these actions to be. o4 g F, b3 g, X0 P" Q6 {
// executed in a specific order, but these steps should) F8 G3 V3 K" }* J% L( ?
// take no (simulated) time. The M(foo) means "The message
% v* D9 F; ~2 P // called <foo>". You can send a message To a particular- D5 x/ J/ {, v3 J
// object, or ForEach object in a collection./ a& f* X- t) Z$ O4 z4 {4 x$ h$ l
' [4 z0 F7 ^" R( t4 F" H9 ^/ Z1 w' j // Note we update the heatspace in two phases: first run) t: h- w( L2 r; ~8 o2 f' a
// diffusion, then run "updateWorld" to actually enact the8 m# |" K8 `" b1 l, c u" i
// changes the heatbugs have made. The ordering here is
J; M$ n1 |- `5 [& G5 {. v // significant!) h" c: E9 z7 [8 Q. \9 d2 d Z
2 I7 c$ N8 M# l* X& M1 J) D, W2 `
// Note also, that with the additional
+ {: T, A" R) I: M! ^7 o // `randomizeHeatbugUpdateOrder' Boolean flag we can7 n6 x/ l& _8 d: f1 O5 p" u, P
// randomize the order in which the bugs actually run8 o5 {6 a: E, _1 B; }- f; m3 @
// their step rule. This has the effect of removing any! m2 E p I7 T. v0 V5 E
// systematic bias in the iteration throught the heatbug3 o2 F( j2 B4 B' F0 N0 V
// list from timestep to timestep
0 W0 }' C1 [' f6 y 1 M1 r( P5 `$ u
// By default, all `createActionForEach' modelActions have
. ]7 @ v7 P$ z! O h7 {6 J // a default order of `Sequential', which means that the
" v5 ^# \5 X7 ^2 r* [# `5 y; @ // order of iteration through the `heatbugList' will be
2 U9 z6 t9 z+ v // identical (assuming the list order is not changed
. ^/ t% s$ l' b( T6 E! \$ u // indirectly by some other process).+ ~) Y1 d4 s+ x) A* d9 v
5 ^, y6 S4 o+ p; [ modelActions = new ActionGroupImpl (getZone ());
1 e6 R6 i3 K7 G1 J" C( r# z0 o# s9 J/ s5 B# A" Z; q# i8 W
try {
0 `- O6 ^/ h5 Q$ C- K modelActions.createActionTo$message9 ]1 }) n! g- D" g3 z) U1 Y
(heat, new Selector (heat.getClass (), "stepRule", false));
- w, m/ R/ k# n& O& `1 A } catch (Exception e) {
1 i2 l: K3 R6 \& L) I System.err.println ("Exception stepRule: " + e.getMessage ());8 a% J9 E% [5 [4 {) Z! ?
}
2 m! a. o' A' c& J! m
+ I2 |: |2 g% j4 x# o2 h: b try {' Q: i9 G$ u$ T) b
Heatbug proto = (Heatbug) heatbugList.get (0);! k5 {7 b. a% y7 n+ g2 P
Selector sel =
6 h" t5 I2 Q+ O, n2 n- @. Q. v new Selector (proto.getClass (), "heatbugStep", false);9 `* `: F) O7 F" S
actionForEach =
' I7 n$ M1 m# J4 _* t/ L modelActions.createFActionForEachHomogeneous$call
3 ?+ \+ o" @" y; c- t& F( _ (heatbugList,
/ x" l0 e" O& I- k( J; B. i new FCallImpl (this, proto, sel,
6 K- w) C% M( e7 _& P' y, { new FArgumentsImpl (this, sel)));
* d) y$ x4 X# W9 }4 _ } catch (Exception e) {, ~, k3 d3 T3 N2 m
e.printStackTrace (System.err);
" u0 o7 X" i2 _' M }. @6 H1 x7 m2 k2 E
! B* v# P& u3 b9 i. H G. g syncUpdateOrder ();7 j3 Y0 _! ^* h) q5 c) D6 G0 K9 X
7 z! p K* F- d. P
try {
9 K T3 E/ w2 V3 n modelActions.createActionTo$message
6 I' d# A" ?1 {. @ (heat, new Selector (heat.getClass (), "updateLattice", false));
" Q1 G( Y3 i( R6 Y5 B8 n } catch (Exception e) {& e8 p4 J' K( n& v& W
System.err.println("Exception updateLattice: " + e.getMessage ());
# |# a0 ~- V* }) Z# j }+ a5 k- D( @& [! g3 V
. v3 W0 `/ d1 q: o$ P
// Then we create a schedule that executes the0 R5 N$ F ^8 s2 r* j
// modelActions. modelActions is an ActionGroup, by itself it( u' B" G1 i' E; d0 y; i( z" ~2 Y
// has no notion of time. In order to have it executed in
$ K, W2 P/ R6 Z) v3 D1 f u // time, we create a Schedule that says to use the
9 h0 k5 a4 B7 s* g5 ?: F // modelActions ActionGroup at particular times. This( x7 _. r' Z: H* \8 O- E: S
// schedule has a repeat interval of 1, it will loop every! S) j" M" a2 D
// time step. The action is executed at time 0 relative to; F# u" Y' R8 x% \
// the beginning of the loop.
3 T, b: l0 w. ]/ }. f+ @. r
' Q. V2 D/ C1 j( Z/ a# W i // This is a simple schedule, with only one action that is
" z2 {/ Q. R2 b0 y2 P U0 V9 v // just repeated every time. See jmousetrap for more7 O+ R1 z$ v& B4 N
// complicated schedules.
. T6 v; I. m( N6 L; F I) _
$ H- b! j) [/ y( p x% A4 V modelSchedule = new ScheduleImpl (getZone (), 1);
2 D/ ^' c& Q% o& ^ modelSchedule.at$createAction (0, modelActions);
6 n& G6 H2 X; W9 J) B
+ }# M- j7 l# o5 G" y0 _8 u- E+ C return this;
4 j# w0 S4 c7 E! P/ _+ r9 r# f } |