HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* ]! E: k; g% w5 q' M& D3 u _" X% j
: Y4 n+ }6 Y5 I' S
public Object buildActions () {* }+ b0 v' ?4 P+ M) ~, X0 u+ t2 c6 O
super.buildActions(); b. [" h" Y% D7 O. Q7 \" C* o1 k$ b
6 V$ N- Y" D+ u' \; g2 e: A7 s
// Create the list of simulation actions. We put these in; R$ P+ K9 B! F- I( {2 z
// an action group, because we want these actions to be! Q% b2 H; M$ b3 H
// executed in a specific order, but these steps should" T# N5 L) N4 x- U; Q* q
// take no (simulated) time. The M(foo) means "The message- ~8 x9 x. \, d% K' e
// called <foo>". You can send a message To a particular5 ~% D- H( {. w& U0 O$ f' v
// object, or ForEach object in a collection.
: n. z3 T! L) h$ ~/ L5 Q % |# E) B% @1 L/ m
// Note we update the heatspace in two phases: first run
x& K% U5 b6 X: Z p% v$ s // diffusion, then run "updateWorld" to actually enact the
# ]1 _2 _6 w; }) o // changes the heatbugs have made. The ordering here is
! ?- ?8 a- X) z // significant!
- I% ^. h* o9 K ; [% E. k8 T8 o+ a* k& J7 G9 b
// Note also, that with the additional" J) y8 Z' T7 m! z/ s& Z" Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' \- R6 j6 W N7 s; B // randomize the order in which the bugs actually run
4 Z7 R; H% {- f/ `* k( c // their step rule. This has the effect of removing any/ c' A" N$ @* c% ~! H' F
// systematic bias in the iteration throught the heatbug
% y& c9 j+ g' c: x // list from timestep to timestep! Z0 Y+ D5 [7 Y
O: S( r; Z) B2 \9 K+ R // By default, all `createActionForEach' modelActions have! a$ S8 v) ~) y0 X5 X7 B1 E: p$ V" [
// a default order of `Sequential', which means that the6 x. a4 {% a3 c
// order of iteration through the `heatbugList' will be0 r2 `$ \. K2 R& e0 R
// identical (assuming the list order is not changed
- o+ W3 [. T, z9 q9 e% x' V- k6 G // indirectly by some other process).
2 S2 t/ O/ G+ m- X- l, m
1 Y4 l X$ F+ Z9 I6 s% d( h) X modelActions = new ActionGroupImpl (getZone ());3 E8 o1 R5 ~* I# t8 b8 s( e: ]' g) o1 F
; Y2 i: Z) {0 ^5 M7 i3 T6 F7 @+ j try {
: J4 L6 P D6 E/ }2 S modelActions.createActionTo$message- ?1 ` d& ^+ R$ w* }
(heat, new Selector (heat.getClass (), "stepRule", false));( r( @+ k5 c2 l9 ~$ `' r* U
} catch (Exception e) {
$ A! f6 G: i/ M( X8 k System.err.println ("Exception stepRule: " + e.getMessage ());
* u( K! i* M! d }
/ |% q3 F' `* G. ^/ C' j' {
7 V0 v* J+ I \0 ` try {& J( L. X# U: e% P6 ?& \' q4 E. U$ E# c
Heatbug proto = (Heatbug) heatbugList.get (0);
( I& }+ S' E4 f$ k Selector sel = / D j/ l! ~" U, C! Y( O- v
new Selector (proto.getClass (), "heatbugStep", false);6 F' k" u6 p; U
actionForEach =7 s" Y8 P9 q" s, r+ k: g
modelActions.createFActionForEachHomogeneous$call# L3 {0 d* t2 L5 x, o" Y* h" X/ G
(heatbugList,
+ r# ~9 o8 ^7 H* y l: K0 _ new FCallImpl (this, proto, sel,
6 S7 Y' u$ [; I% ~ \ new FArgumentsImpl (this, sel)));
0 ~7 b" V5 X% C( a2 [1 ~& D7 m } catch (Exception e) {3 }- J; l% G8 V$ N% s% q* _* g
e.printStackTrace (System.err);0 g$ X$ @5 c# I! t, ], z
}
$ p$ {7 a9 G" } S7 f% e( G
3 R* p' p/ Z5 A syncUpdateOrder ();. ^ F* Y# X8 e
1 d( C/ Y% Q m9 {
try {
! W& A2 ]& X4 v# n' D+ T modelActions.createActionTo$message 7 T6 a! ], E- @4 _* H/ Q) Z: C
(heat, new Selector (heat.getClass (), "updateLattice", false));8 S, D" ^, j' E9 A! i! r
} catch (Exception e) {
$ V) y" W5 y8 T( J' A# I! o System.err.println("Exception updateLattice: " + e.getMessage ());
" d' m; ~( ^9 q! j! R }/ ]* Y; q( I0 v ?
s6 } a9 X. p5 G1 K8 e- l
// Then we create a schedule that executes the$ h( {: P# ?' F; {3 P6 r
// modelActions. modelActions is an ActionGroup, by itself it
' h9 u* `& D. i6 F // has no notion of time. In order to have it executed in/ g' Y+ G& P0 x) _ L6 M; L. r- [
// time, we create a Schedule that says to use the2 ^& X! o! o0 U3 l( A5 h
// modelActions ActionGroup at particular times. This
2 I) r, o0 u& W7 _1 r8 b // schedule has a repeat interval of 1, it will loop every! J6 l; [; c! Z2 m
// time step. The action is executed at time 0 relative to
, g j( i) f: }9 x% c+ ?8 D0 k8 B // the beginning of the loop.- Z! C( R: r" S/ V& d$ M' Z+ S
+ H7 J* ?* u7 O4 S9 v& R // This is a simple schedule, with only one action that is$ s. Z1 A9 [, [6 Z
// just repeated every time. See jmousetrap for more
" F+ G3 o5 P9 E1 W // complicated schedules.$ D2 Y6 t# x: N, w4 H
, N/ {7 N# p( | modelSchedule = new ScheduleImpl (getZone (), 1);; \7 J" p) c5 {* P6 i) S6 f
modelSchedule.at$createAction (0, modelActions);! U# u9 \! a, u$ `( }# l0 h4 A
; r" T# d6 x; n+ ?0 h return this;
9 t. i2 [! u# H3 s% ?3 i/ V! R8 { } |