HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& k- r6 E8 W* o3 {) j' k9 c) m8 T8 N- z2 ?0 U2 e/ K
public Object buildActions () {. t- k8 C# d% p* s5 s& }
super.buildActions();. r2 T! N# U; ~' d) b* D- ]( w
! y, r' d3 F- a* |7 O( b0 ~8 A
// Create the list of simulation actions. We put these in6 A6 ?- U# G |3 p6 Y
// an action group, because we want these actions to be; |' V3 ~) A! B1 D, Q
// executed in a specific order, but these steps should. A. q/ o" I& O8 i
// take no (simulated) time. The M(foo) means "The message4 a' q# [" w2 @' Z/ E; L
// called <foo>". You can send a message To a particular
/ ~( Z2 f4 u6 K: e* N3 E2 U // object, or ForEach object in a collection.
_2 T" M! B0 @$ x4 q2 d
2 }- W4 O( m2 j- I0 ?2 {* j // Note we update the heatspace in two phases: first run4 S+ G: f( Z0 C- e) o. T# m% F
// diffusion, then run "updateWorld" to actually enact the
( j$ H6 \/ u% y9 `/ w' v // changes the heatbugs have made. The ordering here is, ^* P* ~0 K- d/ Y1 Z0 N
// significant!
, v4 I3 g3 D, s) f! B1 Q7 T$ Y6 L
7 x. Q+ l# @, Z& M6 y* C5 h8 Q" g // Note also, that with the additional
% Q3 C, c& q1 P+ z // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 _- P" i" @/ f7 J // randomize the order in which the bugs actually run$ M& s9 [3 O ^ Z1 J
// their step rule. This has the effect of removing any1 M0 S3 Z: m! q1 m8 N7 J1 D! V7 X
// systematic bias in the iteration throught the heatbug
! |/ O* f: I% g# o. B9 t4 c6 _ // list from timestep to timestep7 j; ^- N; C% f% @2 Q
; \4 D" n+ ~$ M$ z7 u7 j // By default, all `createActionForEach' modelActions have
N0 h/ i3 L' e // a default order of `Sequential', which means that the3 s1 I* g% {. X* t3 L) C. T- P- o
// order of iteration through the `heatbugList' will be8 ^7 X7 h& v5 A2 O( ^
// identical (assuming the list order is not changed t5 T5 [, N" H/ Q, g1 I# e4 v
// indirectly by some other process).: J( h2 ^# U- S4 K4 w. d
7 b" U. Q+ \ y
modelActions = new ActionGroupImpl (getZone ());1 c' [5 I& @. j4 Z1 b
( M! _& ^! M) Y9 O# i O try {
+ L7 i( L7 @! `* r* y* u modelActions.createActionTo$message' Z L/ H" I' M& g9 E
(heat, new Selector (heat.getClass (), "stepRule", false));
! O7 k }8 }& X! S; W1 a% @# n5 d } catch (Exception e) {
+ j E2 \- _1 C1 G, e) u8 T! U System.err.println ("Exception stepRule: " + e.getMessage ());
) [! _$ e7 J6 u }
/ O8 Y, t/ W3 S
! l3 k, \) @! m* x# a! Y" z try {5 ?' m) I( G: C p) c
Heatbug proto = (Heatbug) heatbugList.get (0);
) S7 B% A! |8 a# i* X Selector sel = 9 p7 f4 C0 `8 r0 F
new Selector (proto.getClass (), "heatbugStep", false);* |- A! V6 F N6 C, q: G2 [
actionForEach =2 u: t; f; G% K$ P& z
modelActions.createFActionForEachHomogeneous$call
- B5 I5 L& N$ G @ (heatbugList,
; s3 ^ \# h8 f V* L6 _' Y new FCallImpl (this, proto, sel,
4 K' N' V% `) D d new FArgumentsImpl (this, sel)));
0 R$ R5 T, m; k& E' Y* R- K } catch (Exception e) {, {' N4 v) j0 a( G: A* H
e.printStackTrace (System.err);
% m; v3 D( x( ~' W }
y0 |* H: J6 I" r1 |% p6 a $ N( a! M9 s( M3 R% g
syncUpdateOrder ();
: i7 N( P n" x/ S
) V$ k8 z% W# V0 Q. q try {# L! {7 A6 O5 S; r+ ]! h; i
modelActions.createActionTo$message 8 t0 a$ P# k6 U/ ^
(heat, new Selector (heat.getClass (), "updateLattice", false));
/ Y' l% i# ?! h7 D" P8 ?9 M# I0 R } catch (Exception e) {4 } }( d4 ^8 W' ?" M4 ^6 Z
System.err.println("Exception updateLattice: " + e.getMessage ());
6 H/ T. l2 p# y' E( }4 L0 Y }
7 D) n2 u6 c R& |) M- P 3 B) o, u) U4 J( z, h9 ?2 t
// Then we create a schedule that executes the
/ K Q! ` e4 Y+ Y+ s8 S) u // modelActions. modelActions is an ActionGroup, by itself it
- B6 v4 x* g# \5 D% X# a // has no notion of time. In order to have it executed in' U( r; S1 n( l7 |" ^# U p
// time, we create a Schedule that says to use the
4 x2 W9 D! A$ F, j3 d. z // modelActions ActionGroup at particular times. This
% R* `, {) m* Q" u. P7 ~6 z( K7 O // schedule has a repeat interval of 1, it will loop every3 C! t. v( j0 U; r& A& z$ i
// time step. The action is executed at time 0 relative to
7 O% M$ z1 ]9 H3 j8 A7 S // the beginning of the loop.
3 l! y% u1 n- T$ h: a
& R' ^$ a/ w) r4 i/ ] // This is a simple schedule, with only one action that is. }. R5 v+ Z5 `/ I( L! ?- w+ ?& j
// just repeated every time. See jmousetrap for more7 x0 L; G8 O/ m, b Z/ v& J
// complicated schedules.3 g4 L9 R1 x% i0 i
1 K$ @; a9 U a6 L+ ?& M. I modelSchedule = new ScheduleImpl (getZone (), 1);
4 u) J5 `* h& _ modelSchedule.at$createAction (0, modelActions);* c$ M) _9 B# U/ D! L& D! }$ C
. L: M1 x D0 j# |7 w return this;! z' X7 x9 w9 U. L# T* C: q3 K, }
} |