HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 M8 W! J2 Z2 P/ m- {' W
! D6 {; @ F' E& h public Object buildActions () {- j7 L' G* J$ x( }
super.buildActions();. N) ~ Y+ u B, z" p
7 z' D* R( ?" d0 U
// Create the list of simulation actions. We put these in
6 S4 ?1 p2 A" s) w- E6 e // an action group, because we want these actions to be
* L3 w; V6 R x% O( ? // executed in a specific order, but these steps should2 ?" n7 x1 ]: n- n2 A# q, z: f, T
// take no (simulated) time. The M(foo) means "The message# [4 @3 v0 g' _1 ?, _# C9 ~+ W7 V* Z. R
// called <foo>". You can send a message To a particular
5 t; B1 m# q/ N6 Z // object, or ForEach object in a collection.. G2 `9 v7 m. m
, C+ K- g3 v: `% B9 O1 U+ k! N
// Note we update the heatspace in two phases: first run
i1 M( A! u0 Q, {" n- f5 u: t // diffusion, then run "updateWorld" to actually enact the/ b8 t% W4 c: M' B8 g! z% q" t
// changes the heatbugs have made. The ordering here is+ I4 S5 x6 f0 t8 a3 m" x0 b
// significant!
9 n2 \* _: b/ R/ c 6 y4 @; H; v1 G+ e& e( A
// Note also, that with the additional9 d: B+ A7 f4 p2 x; x1 @# Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can- o! w) z8 F% x3 C/ P, M
// randomize the order in which the bugs actually run
- q" ?6 D8 c9 C5 \ // their step rule. This has the effect of removing any
5 d8 H' ~$ F" [: w // systematic bias in the iteration throught the heatbug. w9 C6 l4 @: Q
// list from timestep to timestep+ }5 m9 ~: Z: I1 B0 Y
2 Z7 o% S, d9 z+ x% r1 o } // By default, all `createActionForEach' modelActions have
: b) i2 v+ `: r! ~' t0 q // a default order of `Sequential', which means that the
+ `' @. n9 Q8 E: m9 H3 T. \- V // order of iteration through the `heatbugList' will be
. D6 y S# D! v4 T! G' H! M // identical (assuming the list order is not changed
, E" V9 S: J/ Q* Q' ]6 d // indirectly by some other process).
7 q+ _$ i( T& W) a. d9 w
& r) z8 g! W g' L* f5 V modelActions = new ActionGroupImpl (getZone ());9 ?1 u, _$ ]6 D' [
( ~: o5 O4 X. Z: E* \8 E' U% E4 v try {4 p) U9 O& e( k- s0 Y7 _
modelActions.createActionTo$message: k! R, F- ]$ @
(heat, new Selector (heat.getClass (), "stepRule", false));
! t. Q2 ]* p/ b } catch (Exception e) {) t$ n9 }* b# r
System.err.println ("Exception stepRule: " + e.getMessage ());
% @8 P7 ^: M+ C6 m g }
4 y1 Y: v$ A. d& f0 i7 T; g$ M- {' b+ W9 k( m! m0 H3 Z. @
try {/ n! b, S# ^* x* N* L
Heatbug proto = (Heatbug) heatbugList.get (0);
0 o/ t! h. w2 o% X( M+ | Selector sel =
2 I" V: |* A" R7 w$ U2 k) { new Selector (proto.getClass (), "heatbugStep", false);& I8 z5 H' O. N A M% f% F; x8 n
actionForEach =. o3 ~/ t5 U, J* D& j0 M/ @4 b S
modelActions.createFActionForEachHomogeneous$call
7 Z' Y* [# Q; ?9 S1 _6 H (heatbugList,
0 \3 o; F0 o8 F# Z6 \ new FCallImpl (this, proto, sel, [! W' x. @6 y. I" K- G
new FArgumentsImpl (this, sel)));
) x' G) e9 ^$ [7 Y" y1 N } catch (Exception e) {
, G0 j7 I+ A( M- g* ^8 {1 G" y, E e.printStackTrace (System.err);
o5 K5 P+ U; q, m% U& m }4 `, _8 K. A% A5 I$ ]* r* S
/ v. v* X% U# x syncUpdateOrder ();
- ?% B% i: ]6 r2 X5 C( s: P5 U+ ~; N& R
try {. o% D, a: ?6 A8 U
modelActions.createActionTo$message
. K7 N" v5 X- B6 }* f0 a8 Z+ Q6 ] (heat, new Selector (heat.getClass (), "updateLattice", false));
$ I! @6 o! V7 m4 [1 z+ @ } catch (Exception e) {0 V( g0 g. J/ z2 s$ C @. v
System.err.println("Exception updateLattice: " + e.getMessage ());' ] e( P( i7 f) X; H/ ~* J
}) X) _7 c; H8 N* z5 h2 S6 R& W
+ \- Z) M1 x; h7 N1 ]! t' n // Then we create a schedule that executes the; F. Z( v, [4 x2 D! h
// modelActions. modelActions is an ActionGroup, by itself it: |8 g! Y' P$ e) c
// has no notion of time. In order to have it executed in
# F7 v( y; a8 i0 O+ E9 N2 T // time, we create a Schedule that says to use the
5 x6 L, I& o3 ~/ r. k' u- c' Q // modelActions ActionGroup at particular times. This
% F5 h& u' G6 {/ l8 B5 s; B // schedule has a repeat interval of 1, it will loop every$ P' D! d5 l4 v: k V# Z
// time step. The action is executed at time 0 relative to/ c* X, K4 b) J# h: n1 n( L
// the beginning of the loop.
& H% p; ~4 a; e8 J b: @
4 ^# J j0 k# l% Z // This is a simple schedule, with only one action that is
! }3 w: r3 G( X/ p# \& i0 F6 V s // just repeated every time. See jmousetrap for more# w) ]- C* U9 w" t1 m* }8 V* F
// complicated schedules.
) _. S) l7 w! T8 K
& a- ]8 E* |" C* w) ` modelSchedule = new ScheduleImpl (getZone (), 1);0 Y2 U# K) r- y5 I' N
modelSchedule.at$createAction (0, modelActions);
8 c5 f& i% L4 b- F- t $ q) ]# a5 p f, ~/ G
return this;; h6 [* P. H2 z2 ` S* P4 R- O
} |