HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: ] Q8 r& ?% }' }: D- M: q7 V( y1 v& F( x( K
public Object buildActions () { k* T8 R; Z' m( [& O' A
super.buildActions();/ S* w4 j* N( R. u" [
$ \7 c A* t- m q2 x' Q7 G6 l9 f& S // Create the list of simulation actions. We put these in
, t8 x" N. b- ^( J4 w+ H' o0 Y+ H$ j // an action group, because we want these actions to be6 }6 P H, r I8 K3 a$ Z0 d2 Y
// executed in a specific order, but these steps should
9 f9 B6 F4 a3 N2 \& _ // take no (simulated) time. The M(foo) means "The message
+ |- z/ |/ [3 ~1 L // called <foo>". You can send a message To a particular
- e) |8 x. b( N4 G! p8 w3 W3 R // object, or ForEach object in a collection.( G! @1 d9 E. b8 L
; h9 [1 Z+ M* B8 b // Note we update the heatspace in two phases: first run
% b" t- M/ O) v2 M, ~ // diffusion, then run "updateWorld" to actually enact the( _, @. T; b; f! p
// changes the heatbugs have made. The ordering here is
4 P- R! K* X+ f% x( o+ Q // significant!
2 x( s. z7 h; R3 j+ b5 c: a
$ |' z9 f- j% d6 Z/ |6 { // Note also, that with the additional- e4 R: `- V; n) p
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! S/ ^7 S* S6 c5 N) n0 x // randomize the order in which the bugs actually run
) o. t% \) ]) | // their step rule. This has the effect of removing any+ d0 H; O6 J/ u6 E
// systematic bias in the iteration throught the heatbug7 ~2 G9 u- B* U8 t# q
// list from timestep to timestep9 x8 N0 x; W: Q# K
4 i9 i. S4 B+ \ s9 V // By default, all `createActionForEach' modelActions have/ w( x, J+ _# u; y
// a default order of `Sequential', which means that the; ?# F Y% S/ B4 q' p; S/ P; v
// order of iteration through the `heatbugList' will be8 T* m# p6 Y% {+ u2 m* p+ d( p
// identical (assuming the list order is not changed
' i# U" G' o$ M // indirectly by some other process).
! Z# a" C- n! v! y; t! }0 \! E ' {% ^+ P& d* E3 U0 }. S4 @
modelActions = new ActionGroupImpl (getZone ());2 h2 f, u; y8 z8 J
8 a2 v# G8 g' ^5 ^ try {
' B$ ?5 O+ ^& r' ^5 H modelActions.createActionTo$message
% k8 K& T! `, k: p (heat, new Selector (heat.getClass (), "stepRule", false));
7 f. _: j0 |0 v# f8 c- F } catch (Exception e) {
7 r+ b) c k- E' ^, u System.err.println ("Exception stepRule: " + e.getMessage ());
9 x/ h% {4 K7 `) @: g- d }
. Y _4 L: w5 L2 D
& \8 v m; d% N2 {# }8 L1 _ try {" ?* q5 O( D; p6 @7 y1 J
Heatbug proto = (Heatbug) heatbugList.get (0);
0 i& ]6 r5 C( F5 z7 g Selector sel = % E, X7 _, u* ?' r4 N
new Selector (proto.getClass (), "heatbugStep", false);9 L) U: L2 o+ F" v o `
actionForEach =* h) L w! c5 b. k
modelActions.createFActionForEachHomogeneous$call
0 M) O8 y" k6 L5 {2 A2 i Q (heatbugList,
0 f5 S; j4 j& I new FCallImpl (this, proto, sel,
) Q3 ]' Q6 `; V0 f6 y/ @ new FArgumentsImpl (this, sel)));
0 g0 _4 I' P1 k# M8 F i- B$ ^7 D } catch (Exception e) {
+ P. X* i4 a( d: B" B2 A7 I2 k3 W8 H e.printStackTrace (System.err);' f& Y5 m# O6 M" _3 t: @9 t# i
}9 U; F" S, \1 h; `: ]
5 ?2 ]. p: r( l3 N
syncUpdateOrder ();
; ~. _0 K W( {# E* t0 ]; X9 ?
: X. J9 ?1 ~+ c/ t try {
% B/ [3 ]% f! E9 i z' S# ~3 w. m* A modelActions.createActionTo$message
- H7 V' W) m/ p8 k: @; I! K2 R% @) P (heat, new Selector (heat.getClass (), "updateLattice", false));) Y, n5 [* q8 B7 {
} catch (Exception e) {
$ w5 r- H; m( [# ~ System.err.println("Exception updateLattice: " + e.getMessage ());
9 Z9 K. `% I) o) [: S6 v+ U }
' ]( i7 a2 V5 _* | ( j' g" a0 T' Z0 w
// Then we create a schedule that executes the
% ~; _) c( L) e' M% n* i. h // modelActions. modelActions is an ActionGroup, by itself it
3 t6 R9 F) x# k5 d' m1 h // has no notion of time. In order to have it executed in7 b8 z9 P. z3 S+ y0 V
// time, we create a Schedule that says to use the! c" O; f w8 N, Z X6 c4 k5 z. ]
// modelActions ActionGroup at particular times. This
$ L" M( n3 F4 ~" K. s; n8 H // schedule has a repeat interval of 1, it will loop every; L1 x. E8 \9 A: G+ T
// time step. The action is executed at time 0 relative to2 w1 E6 Y' X% [/ d* o& i; e
// the beginning of the loop.1 ~. k+ O( `0 I0 O0 X& Z% s
( t% I/ a$ H& ]5 p$ h // This is a simple schedule, with only one action that is
% D J6 m# U1 E4 E9 \7 g6 x$ U // just repeated every time. See jmousetrap for more
6 w2 L2 n3 B0 A // complicated schedules.
9 k5 @2 c, v, Y! \: Q0 g6 Y, G2 U; q
2 B! h" j; [0 A. [" O modelSchedule = new ScheduleImpl (getZone (), 1);, z& F/ A# \) L: v/ r7 G
modelSchedule.at$createAction (0, modelActions);4 I3 K5 I0 c# B" j1 O- w
+ h2 b8 z5 M7 d! u A
return this;" f- t) k6 Y0 T/ E( j
} |