HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) e6 ]" e2 Y4 R- |) s0 X# J# L
. D) p* F: r% z) k public Object buildActions () {7 p: p/ S, U3 H( x. C
super.buildActions();
" L6 U8 h% I: v2 m% ?6 u( R/ W & v& y6 c6 s; O, S
// Create the list of simulation actions. We put these in
4 Z' h- L8 k0 X, ^& P- f" } // an action group, because we want these actions to be5 w6 o9 ?' T7 |
// executed in a specific order, but these steps should
1 b8 ]0 @7 O: m4 T0 L2 a // take no (simulated) time. The M(foo) means "The message
4 e3 e: F+ [7 h( O1 C' y @ // called <foo>". You can send a message To a particular
9 @. D9 R9 s( S8 } // object, or ForEach object in a collection.
1 Q e% t# L8 D8 A- y+ Q0 R
b6 x9 O1 r _4 M& S // Note we update the heatspace in two phases: first run
- G( V; }6 H! G0 ^$ K; | // diffusion, then run "updateWorld" to actually enact the
; h# O/ O# Z: \$ q- l // changes the heatbugs have made. The ordering here is
. X4 t5 u: C. l& ]' X // significant!
0 c8 X) i6 M9 f
0 |" I5 T0 b+ ^3 j: R9 H // Note also, that with the additional7 R3 @- M( _6 L2 f
// `randomizeHeatbugUpdateOrder' Boolean flag we can) P5 g) E7 o; }8 n
// randomize the order in which the bugs actually run
/ L" w! Z9 o7 n0 y! c/ A* m // their step rule. This has the effect of removing any
7 [1 i" m8 N1 ]0 n! H // systematic bias in the iteration throught the heatbug0 }/ w8 b) c6 l" y; Y6 f
// list from timestep to timestep. M6 T% a' P5 _" W
: V# a% X, u( l8 o9 w // By default, all `createActionForEach' modelActions have( _* _0 |& |& @, U- ]4 o, \+ [
// a default order of `Sequential', which means that the
$ q" B. \, U! Y4 E // order of iteration through the `heatbugList' will be* i2 K$ h3 ^7 O4 H2 c4 f c
// identical (assuming the list order is not changed
1 }' K/ ~% |, @3 P! Y- B9 | // indirectly by some other process).: K* w; F6 r& W p6 ]# Z1 T
3 i/ r# k2 l+ Q8 R modelActions = new ActionGroupImpl (getZone ());0 e6 O) m5 ^6 }0 l! Z" D, I4 Y
+ l( y6 a) B9 G( L5 ?
try {
" G) w9 q, r$ R# K8 t0 O modelActions.createActionTo$message
% l6 i9 u3 G; _: G' g" H7 A (heat, new Selector (heat.getClass (), "stepRule", false));, F* ~9 ~ \% p; j( V% u
} catch (Exception e) {( _/ W2 S& W5 ?* Y& @$ z
System.err.println ("Exception stepRule: " + e.getMessage ());
' ^, X* t5 _" v4 r; p& ?- e5 Y5 S }
1 l: c* \* p# k( b+ a+ l. ` A8 m( h# l! t6 Z4 P
try {8 b* m% ]) W6 ^# ~- A: l
Heatbug proto = (Heatbug) heatbugList.get (0);/ v) j$ O1 e: l4 E& _0 L
Selector sel = " d3 S U2 n$ j, J; K. n* V
new Selector (proto.getClass (), "heatbugStep", false);
+ V" S0 A2 }6 u0 \ actionForEach =/ T3 I1 A4 D* h) S
modelActions.createFActionForEachHomogeneous$call
9 y I7 a7 o* M& }1 ~ (heatbugList,
3 o& b3 ~& X9 M) X7 G3 s new FCallImpl (this, proto, sel,! U& a0 Z) E0 Y, q" v; e7 h% o
new FArgumentsImpl (this, sel)));3 [$ y6 B) \; J2 ]+ E; X1 F
} catch (Exception e) {0 E* ^2 R b9 c3 p/ Z& |7 e
e.printStackTrace (System.err);
! [6 I V# e0 @% x }" W f) t: ~/ a
, |% |. @; b7 V5 \8 m
syncUpdateOrder ();8 P' g9 g5 k, v6 `7 o. }/ f
& @4 V3 v( E9 ~0 T try {
5 H( Y! {& u& W modelActions.createActionTo$message 7 u4 C$ V! s! h$ ?! W% ^5 f
(heat, new Selector (heat.getClass (), "updateLattice", false));
' c W% M' f0 Z$ z } catch (Exception e) {- J; ~! |9 V. z4 C
System.err.println("Exception updateLattice: " + e.getMessage ());
1 W9 r( L0 A( y; n( c }8 D4 R( }; e# V* S
4 z, A- F/ ] b4 D2 [2 Z4 o) H Q
// Then we create a schedule that executes the
, L5 X0 H5 `% M // modelActions. modelActions is an ActionGroup, by itself it) @! \- m- D* i K
// has no notion of time. In order to have it executed in
* M) a) @7 T) R3 t& S/ W0 A // time, we create a Schedule that says to use the4 s9 d( y8 {0 @, g2 w! S
// modelActions ActionGroup at particular times. This
+ _) O/ N$ v8 o7 z+ R/ t/ h // schedule has a repeat interval of 1, it will loop every; O2 j* X2 Q. j- {% _
// time step. The action is executed at time 0 relative to
" J% @2 D* U) B3 b2 j$ M9 c4 ? // the beginning of the loop.
# ~3 V" Z* k& Z6 X9 B
/ M& n# e6 e1 r' R+ W3 b6 t // This is a simple schedule, with only one action that is
5 C* t' v: M8 [1 x' F: ]. w // just repeated every time. See jmousetrap for more
1 j; t8 M) ^4 Z0 O5 { // complicated schedules.. P* y2 b0 _ X4 q8 X* z( @9 b9 Q
9 q, J1 |0 r+ H! M modelSchedule = new ScheduleImpl (getZone (), 1);1 x& {: \1 T1 |8 m, u
modelSchedule.at$createAction (0, modelActions);
8 v9 t: E5 U3 U( k' p" T4 V5 v
3 A; n& R' g- K/ O return this;
2 u+ p: z4 C7 l+ m: {; ~ y } |