HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 U$ i+ E* {: v3 P8 q
/ d; ^- G+ W9 V2 h$ n/ A5 } public Object buildActions () {
. {0 V$ ^" E; q3 T5 N super.buildActions();9 c8 j: |' K+ \
2 H; v- T8 \+ ?
// Create the list of simulation actions. We put these in
4 |( {% ^+ O( V% ^# K3 n+ I) L' f // an action group, because we want these actions to be E) I0 |1 D' d6 t7 T
// executed in a specific order, but these steps should
$ W3 v/ A" g; r7 X- { // take no (simulated) time. The M(foo) means "The message0 X/ [* |$ z$ }% i0 V
// called <foo>". You can send a message To a particular
* Y( K4 r7 `& j) o v // object, or ForEach object in a collection.1 M8 C. R+ }* h4 z
2 z: A: h) y2 y
// Note we update the heatspace in two phases: first run/ h( m& H; L' L" h0 y
// diffusion, then run "updateWorld" to actually enact the
: E$ G( A$ e" x( \ // changes the heatbugs have made. The ordering here is
0 {5 y( X* X. J: _/ T // significant!( j8 B5 l# y( l
$ \) l; R$ E* y8 u, R // Note also, that with the additional9 }$ l- ?5 N9 a, O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 s& Z& V% P' n0 a2 k; l2 R" ? // randomize the order in which the bugs actually run
) W' J9 C4 f' K _9 @1 d // their step rule. This has the effect of removing any
; \1 D: [7 m% o$ S // systematic bias in the iteration throught the heatbug& c E" q2 b1 {. j% A+ p2 J4 T
// list from timestep to timestep: I. ^3 l: t4 O3 c. E& G6 O
4 L- s: v4 e9 W8 ^& _5 x // By default, all `createActionForEach' modelActions have4 h1 p# |5 j" O4 G
// a default order of `Sequential', which means that the; H$ y! w3 T* \7 I6 C* o K- E8 s, V
// order of iteration through the `heatbugList' will be
+ @6 l( g1 n* M8 v // identical (assuming the list order is not changed( D0 s& a4 A4 F/ g
// indirectly by some other process).) ^4 w0 }/ c9 i) R F( S; j
7 f9 [7 f) `" D
modelActions = new ActionGroupImpl (getZone ());" D9 M) ?* b6 z' k! V2 s+ e9 |
9 j% z/ t0 c0 m( W' Q: Q
try {
. A# {1 }6 i6 y$ U3 F+ X9 g! C modelActions.createActionTo$message6 z2 X4 a& Q# E" Q( d; @
(heat, new Selector (heat.getClass (), "stepRule", false));* {) r6 i; z0 b o
} catch (Exception e) {
" N6 T6 p8 ?: Y) t9 ]% J System.err.println ("Exception stepRule: " + e.getMessage ());& e* v- X1 P! F
}
# E: f! H/ Z6 Y. V6 j% }$ m) ?0 c6 `6 x8 `) a7 _$ A; h1 `
try {9 [9 J5 w+ V/ u8 a. c8 ?
Heatbug proto = (Heatbug) heatbugList.get (0);
5 ]( t+ @/ o& [) q5 x$ ~0 f( g) I! J Selector sel =
9 ]) U9 _& i+ T5 D new Selector (proto.getClass (), "heatbugStep", false);; i4 U% a* o( {5 n9 W R
actionForEach =
# h6 M+ m4 b6 y modelActions.createFActionForEachHomogeneous$call* g/ V1 [ s }7 _; I& c M1 |% K0 _
(heatbugList,
, }: @1 [8 P( |! ]2 r0 |4 D( R' d new FCallImpl (this, proto, sel,
4 u R0 @; k$ |) T% I: t8 f" X5 q V new FArgumentsImpl (this, sel)));; G7 i$ V! i! l9 Q0 h
} catch (Exception e) {- c, K" h) l+ h# j7 V5 U
e.printStackTrace (System.err);
2 j7 O% e# g& x }, K1 J( Y( V/ J2 D4 H
+ B A* L2 b' M$ K syncUpdateOrder ();
* T4 u' l$ c7 u7 l0 ?4 ?
) n+ e4 Q! }3 J+ g try {( i2 X+ ~& @ q2 H
modelActions.createActionTo$message
6 u. F& V6 X- \# a (heat, new Selector (heat.getClass (), "updateLattice", false));
' L1 [; z! k( }, c4 P5 ` } catch (Exception e) {4 g6 b4 G8 ]0 l, E1 ^! ]
System.err.println("Exception updateLattice: " + e.getMessage ());
. c% b, q5 f) C. w }+ i1 I. C2 u h
. V7 t, A+ S }; B
// Then we create a schedule that executes the6 V5 ^7 z& U; {) ?6 l
// modelActions. modelActions is an ActionGroup, by itself it7 w. y- H; }& v" F
// has no notion of time. In order to have it executed in
" }0 u Q, n2 G) Y G- m. o( J1 P // time, we create a Schedule that says to use the( {5 d- X6 s, M( I
// modelActions ActionGroup at particular times. This7 Q9 z$ K9 I+ f9 \# O! A% \
// schedule has a repeat interval of 1, it will loop every) X' }# t7 _5 K0 @3 T& W
// time step. The action is executed at time 0 relative to
# p- ^& q2 v: o! Y( e7 W& |1 e // the beginning of the loop.
9 l3 c/ }/ [, K; U% R% ?
4 E8 g; H$ [$ O4 V // This is a simple schedule, with only one action that is. x9 p. N/ K: n
// just repeated every time. See jmousetrap for more( r+ E0 {6 x0 u& m" o
// complicated schedules., U0 ?) l) m" P
$ J2 ?6 D9 D5 \/ f" l7 `
modelSchedule = new ScheduleImpl (getZone (), 1);
- k7 R$ ^/ p& a" X modelSchedule.at$createAction (0, modelActions);, R, C- C% ~" ~- ^, ]& }
4 [9 F6 I; ?2 T) |! g
return this;1 e' s1 _4 ?/ a3 @& q
} |