HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; B+ S! O e1 w% p4 p
0 R7 L6 P8 `2 g% E. Z$ r7 F; k1 y- Q* B
public Object buildActions () { `' Q! z& O* Z9 z
super.buildActions();
) c6 ?% |: [, O* @8 S5 D4 \ - u, \ v! y& W( `" i
// Create the list of simulation actions. We put these in
% T+ `/ w( w9 `: T // an action group, because we want these actions to be3 O& y6 q& \& c) Z+ a
// executed in a specific order, but these steps should
" ^; d% Y* r, W& q$ M/ T // take no (simulated) time. The M(foo) means "The message3 D C6 T- C6 I* o. h# b
// called <foo>". You can send a message To a particular% P, R* S# y8 ?% }% `# b
// object, or ForEach object in a collection.% ~2 S* K+ O! @5 b9 N
6 Y1 }; ?3 }7 |* t: C& m
// Note we update the heatspace in two phases: first run
& N( h5 |5 y5 \: n // diffusion, then run "updateWorld" to actually enact the2 g3 a' Z7 g. u0 v0 r% n
// changes the heatbugs have made. The ordering here is
" l" A, L& f1 m8 j- a5 E! ~+ G // significant!
9 I3 U2 j, c3 N- u6 O2 P* U! n & N- J1 _4 b7 N: ], k
// Note also, that with the additional+ ~3 t G3 _- q; `: g
// `randomizeHeatbugUpdateOrder' Boolean flag we can. v' J; ?( t4 d1 G
// randomize the order in which the bugs actually run2 Y- a; }( K9 a8 L& z% j5 Z% B8 ~3 m
// their step rule. This has the effect of removing any( ]0 I4 Z" C! ]5 ~& ~# G
// systematic bias in the iteration throught the heatbug+ l+ H3 t* h, O
// list from timestep to timestep
0 a5 b% e* O5 {0 m6 B . h0 w; Q; R" V) T5 P+ F3 ~2 {
// By default, all `createActionForEach' modelActions have" @; g: P W+ l) A0 T: r
// a default order of `Sequential', which means that the' f" K% a' `$ m
// order of iteration through the `heatbugList' will be. W3 _# h+ S1 V/ ^
// identical (assuming the list order is not changed
' D; a: `4 x. o: T // indirectly by some other process).* Y8 W* V: c/ ]# z$ X
) C; e3 A2 C% ]4 _ modelActions = new ActionGroupImpl (getZone ());
5 T7 G1 s3 Z* L; J# a- u
5 v8 R& j( G y# ?1 M1 w' e try {
8 b" x% t- C" ^( O modelActions.createActionTo$message
' e( X( `1 x' N1 s+ [. U (heat, new Selector (heat.getClass (), "stepRule", false));
- ^5 u' l+ S/ R ]5 Z2 \% A } catch (Exception e) {( M- I3 I" O5 Z$ Y# v* Q% F
System.err.println ("Exception stepRule: " + e.getMessage ());/ b, @6 j5 f+ g: [ Q' f
}
, R" d5 N/ R& W
1 e. Q6 X7 h; f- l( W9 Y! s try {/ P; {- z z( r9 _3 g
Heatbug proto = (Heatbug) heatbugList.get (0);
5 {0 f# _0 a& |+ C( P Selector sel = : D& f/ z0 V/ q i$ c
new Selector (proto.getClass (), "heatbugStep", false);
1 o, l' q: d4 C actionForEach =
# V: ~4 s. x8 t+ x modelActions.createFActionForEachHomogeneous$call
, o! B6 _" M: f: r3 ^, z (heatbugList,, p' |' p; s; y
new FCallImpl (this, proto, sel,, a# p0 I* J* t
new FArgumentsImpl (this, sel)));
# w4 @1 J4 q J% e Q } catch (Exception e) {
: N0 s+ x8 s" Y4 D% J( x6 L e.printStackTrace (System.err); T* L" ~7 d3 V* z7 t+ s5 M1 U3 x
}0 C; f; L/ v+ W4 }, ]
2 s, S7 b5 T# F- d4 D4 }
syncUpdateOrder ();' w. {3 S% |& z, Q# Y% n5 t
( O( u' c# U5 a: ^- L0 x2 N& {- k; ] try {
9 L) Z% ~" z/ L. }! ^ modelActions.createActionTo$message
* v; i8 F& f. Y9 i' C9 S (heat, new Selector (heat.getClass (), "updateLattice", false));
# @0 k' ^2 A$ b8 {4 P } catch (Exception e) {2 q* [$ B& O6 K; M
System.err.println("Exception updateLattice: " + e.getMessage ());, X' m! R$ F7 h
}
8 _4 j, L3 j, f- @; ?4 I
8 X( ? t7 S0 `9 D3 W) u' c9 e& F2 B7 A // Then we create a schedule that executes the1 i5 N9 Y0 F' B2 R4 e3 V
// modelActions. modelActions is an ActionGroup, by itself it; J, D4 R0 }$ ]* l. n
// has no notion of time. In order to have it executed in! m' q. q1 }4 E! e% F! ?
// time, we create a Schedule that says to use the
$ g T% ^5 C* J1 L8 b // modelActions ActionGroup at particular times. This" n0 t, T* T& R) m# h
// schedule has a repeat interval of 1, it will loop every
0 u& J8 Y, g8 g7 W# g // time step. The action is executed at time 0 relative to
# N0 ^ g8 ?& j. m. h // the beginning of the loop.
' z( R7 w% l9 L$ s& Z, q: {8 k. }0 Y4 G/ C% Z
// This is a simple schedule, with only one action that is8 S! p. H9 N, T5 f( a( X
// just repeated every time. See jmousetrap for more
$ m: ?4 L1 ~ w/ W% Q // complicated schedules.& C" u4 u8 E' X' R! C4 A
$ O) e8 K' [; \1 y2 K8 `$ R, v9 n
modelSchedule = new ScheduleImpl (getZone (), 1);5 }) ]4 z8 t8 r* @
modelSchedule.at$createAction (0, modelActions);9 |/ I8 |& D9 H' t
( l( }0 k" N2 k1 \& T: _4 a; T4 f return this;
8 N; O) D; l% P; ` } |