HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 j; t9 x: c; R2 ?7 N
/ v3 o) G" A$ V public Object buildActions () {5 D1 i7 u% c# o6 r! Z1 W! B8 A
super.buildActions();
! }6 M5 L5 V0 ?6 o# G6 C + x7 Q4 f& b- U0 q k8 ^6 ]
// Create the list of simulation actions. We put these in T" w% @' I: r) h. O9 M3 L
// an action group, because we want these actions to be& f8 `0 u4 D! M& Q7 X" e
// executed in a specific order, but these steps should3 e# g' ^# ^! ^3 ?9 J
// take no (simulated) time. The M(foo) means "The message& z8 D) x+ U5 _* \4 H
// called <foo>". You can send a message To a particular- }2 B: d) g: u1 w, U% O
// object, or ForEach object in a collection.
& Q/ h4 z2 S9 g8 ^& A2 e + n3 H5 W7 A1 U- z
// Note we update the heatspace in two phases: first run O( U% l# z- h9 r; b
// diffusion, then run "updateWorld" to actually enact the
. f9 b( l$ b" o! f& Z // changes the heatbugs have made. The ordering here is. g' Q) E: T- J* b% d
// significant!9 u5 e4 n% U- m/ l+ X
7 T( [/ h6 D) Z // Note also, that with the additional
& a: L J6 F, B% v5 S // `randomizeHeatbugUpdateOrder' Boolean flag we can( p- u) o# [8 H4 c& ^9 _. b
// randomize the order in which the bugs actually run- ?0 T3 ]8 v" F; P
// their step rule. This has the effect of removing any
, ^& W% S5 n. S( m // systematic bias in the iteration throught the heatbug
- V0 E+ f$ e7 b7 Z/ S // list from timestep to timestep
# w; E6 D! y; P7 f# r4 S
' m5 c$ ]1 w; W // By default, all `createActionForEach' modelActions have/ N4 o% ^7 ` _/ m# @" c
// a default order of `Sequential', which means that the
; k) I+ K v" S' K2 p" e3 S // order of iteration through the `heatbugList' will be+ n s+ G0 _! R) {' Q" q
// identical (assuming the list order is not changed
. B) U, Y1 B2 m9 @/ m1 B // indirectly by some other process).8 d+ ?0 U: E6 G2 f$ v! V1 E
# x. }; j; w# Z( T! S2 ?+ T) n
modelActions = new ActionGroupImpl (getZone ());; Q6 X+ e$ e* e! i. }
k8 F+ }4 ^$ v* T' { try {
% O- h+ \) y" d9 @) H4 ]* ?$ W modelActions.createActionTo$message+ e7 m r. J' p5 e! M
(heat, new Selector (heat.getClass (), "stepRule", false));
1 I( Z/ d' P9 @1 g } catch (Exception e) {
/ ?3 z7 b! |8 H# N% ^ System.err.println ("Exception stepRule: " + e.getMessage ());
X+ `; j; w6 p* ^ ?) a/ P }
! U/ v) M: e9 |
. K1 F5 k6 A* l# u" x try {
" R( _0 {9 c' ^- I8 m: o. i- v Heatbug proto = (Heatbug) heatbugList.get (0);; a8 n* t. R @: c) M0 L( |
Selector sel = 5 a( Z; r& v1 e
new Selector (proto.getClass (), "heatbugStep", false);
3 {$ U' T/ W5 z& k; [ actionForEach =# a6 K; F3 v! v# T+ E
modelActions.createFActionForEachHomogeneous$call& h; s% p9 r7 K4 Z. ?% E5 q: q# q! c
(heatbugList,
6 i6 f6 Z/ n* u( \% R; L; c new FCallImpl (this, proto, sel,
. ~3 O2 |, E$ z new FArgumentsImpl (this, sel)));
t9 H3 T% a1 t } catch (Exception e) {. y4 C! f$ N2 O4 R- a. T% K
e.printStackTrace (System.err);# V$ M- n" D( N
}4 Y& g! o- {9 L3 L9 r2 A
\9 L, a( @( x4 G syncUpdateOrder ();
: }' Z" S- O+ c+ R2 N$ w8 e- D& N/ x: `- H5 A' n$ b2 v/ g
try {# J6 e& }- a: |( O3 g
modelActions.createActionTo$message
% F7 l" g$ u6 m; I0 H1 N p# U" T0 g (heat, new Selector (heat.getClass (), "updateLattice", false));
+ k, ?$ `2 M1 w) H- V1 n } catch (Exception e) {
1 U1 j" w5 R. z6 h8 i N System.err.println("Exception updateLattice: " + e.getMessage ());
# q$ l+ O3 E# R# c }' o- J8 P) ^' k! y( }
" N1 i. w; }) h! |( Y
// Then we create a schedule that executes the0 B" b& E U% Y0 \& ?9 c: D
// modelActions. modelActions is an ActionGroup, by itself it% B) ~1 X6 L& c; }) B4 \- x
// has no notion of time. In order to have it executed in4 n8 x+ O% ~- n1 }, I- u
// time, we create a Schedule that says to use the- @. ]! c) A* l
// modelActions ActionGroup at particular times. This! C. C/ J& ]/ X! V
// schedule has a repeat interval of 1, it will loop every
; Q- R1 r9 ?( F0 G7 L // time step. The action is executed at time 0 relative to
, c3 n- r3 R, T$ C // the beginning of the loop.
' n! j, E* B5 ^$ k& a
( s1 ?( U' v$ o6 \ v1 \6 p% ~# w // This is a simple schedule, with only one action that is7 k0 p v/ ?8 x( E5 T' ^. B0 L" {2 U
// just repeated every time. See jmousetrap for more
|6 K7 P5 x, t6 a$ }& u* R0 r% o // complicated schedules.
" r4 p* G8 x9 j2 N- h
, w9 q2 x5 t8 J! k7 j modelSchedule = new ScheduleImpl (getZone (), 1);
$ c) Y6 A P/ n4 W6 d Q modelSchedule.at$createAction (0, modelActions);$ O! c, L4 ^. ` }
) B! ^4 a/ e0 S9 C" B3 b+ W return this;: Y8 h" ~" h9 Q; x# _/ A$ ^
} |