HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 ^) {3 c$ E1 ?
4 C! c3 v6 @4 m6 t% L public Object buildActions () {" p- m; Q3 y/ g. R( j2 V
super.buildActions();( k3 |7 o: X! \ V( N! B2 k$ w
. I3 T. |) W7 E. N. p# q // Create the list of simulation actions. We put these in6 X& o/ \( G6 o* ?
// an action group, because we want these actions to be6 N9 { | t- |, \3 j, X6 C8 p
// executed in a specific order, but these steps should1 P: G% ~9 j4 Z6 U
// take no (simulated) time. The M(foo) means "The message5 T0 |& V; P- o% m
// called <foo>". You can send a message To a particular9 Y/ L# X' T+ p4 z3 `7 U
// object, or ForEach object in a collection.9 p/ {! u4 w- C; M1 Q
) J4 [8 x, S# V1 ~4 G0 c5 f // Note we update the heatspace in two phases: first run
. Y9 U: L+ o/ U, e7 ^; W // diffusion, then run "updateWorld" to actually enact the
' E M Q, o O! a* b // changes the heatbugs have made. The ordering here is
8 C# d _) G& t4 N; W% T u // significant!7 b: J2 c7 u+ i' ]9 X
4 E: P( E9 e" d% y0 k! [$ M // Note also, that with the additional
1 N4 k0 f$ i' i2 ~& E- N // `randomizeHeatbugUpdateOrder' Boolean flag we can2 L6 l+ c- a$ I# B D% N7 q
// randomize the order in which the bugs actually run
0 i& v! F. i( k7 {/ [ // their step rule. This has the effect of removing any
. |! c8 t* J! i. Q // systematic bias in the iteration throught the heatbug
t* v% e6 `: k! @9 y( H6 \ // list from timestep to timestep
9 u5 ]/ J8 N0 n$ C5 f
8 Q& N" u' f/ c# x$ Z // By default, all `createActionForEach' modelActions have! s. G( f) l" c& m; v9 _+ X0 Y2 g
// a default order of `Sequential', which means that the8 f! T6 n- ?) y0 U9 a
// order of iteration through the `heatbugList' will be
% J: j. R8 q: a/ q' v9 P // identical (assuming the list order is not changed
8 z! \9 |* {" z2 B# r // indirectly by some other process).9 a! z% {7 M K% Q7 V: f
7 |5 e b& M2 i modelActions = new ActionGroupImpl (getZone ());$ m9 w8 [2 t: ~8 F n% L! G
1 S0 r* Z& Q% G. O/ R
try {
" D! V B. [; Y2 } modelActions.createActionTo$message
6 L# r8 W% h6 ?- _8 h% G0 c (heat, new Selector (heat.getClass (), "stepRule", false));3 ^& U; W1 D8 R
} catch (Exception e) {
# B( ?' n; o0 r q( D$ z- p System.err.println ("Exception stepRule: " + e.getMessage ());# q8 p+ Z [3 V Z. A
} t' {% y1 s% v- P/ ^ x2 x
4 Q5 I9 T& a, F0 e2 M+ e try {
# ], t! L" g% E# Y7 d; h Heatbug proto = (Heatbug) heatbugList.get (0);( \' l+ U: N$ o8 P0 t: t/ ?# B2 l) h
Selector sel = ) u* p4 D6 _! _' b5 C
new Selector (proto.getClass (), "heatbugStep", false);
$ j# M! d* Y: U7 P, x. b actionForEach =
2 d" Z! M4 M; a, G% @ modelActions.createFActionForEachHomogeneous$call+ i- t, A# Q% j+ T9 Z* Y
(heatbugList,/ x3 H0 Z$ u! S# @( U1 }1 L' u
new FCallImpl (this, proto, sel,: w1 }1 G, O" D* I
new FArgumentsImpl (this, sel)));
# s! K$ c$ P! D } catch (Exception e) {" P$ c& X# L, l+ s& R% _, ?
e.printStackTrace (System.err);9 y' l4 q+ f( N. j+ U3 ]7 j, e
}0 u* b4 B, R1 U* Z" R5 f
1 O0 z8 k& ~! i1 j' N( p$ ? syncUpdateOrder ();
/ p& w3 d* `% L8 s; m( F# N" f6 v& L
try {
! w9 ~' }6 Y Y, A* X# F modelActions.createActionTo$message 2 Z7 \9 n4 T) D0 R# y
(heat, new Selector (heat.getClass (), "updateLattice", false));- d; H& _2 B4 x' R
} catch (Exception e) {
# o! w% f/ ?& b) d, D+ f System.err.println("Exception updateLattice: " + e.getMessage ());
, i p* y- V: e* m" _9 j/ B }" r2 D C+ p2 p' t, l
9 E, k7 ]* B- H& D* l9 t' L" ?
// Then we create a schedule that executes the
' q1 e- K( R8 ?7 N+ ~: P ~ // modelActions. modelActions is an ActionGroup, by itself it% [+ I% c" ?) Q( r% }7 O
// has no notion of time. In order to have it executed in2 g0 Z, F1 i J8 I
// time, we create a Schedule that says to use the
% X; n' w+ M" K7 N( `; W* f( H // modelActions ActionGroup at particular times. This
7 F/ P! y' [: f& A4 |9 h& l$ C // schedule has a repeat interval of 1, it will loop every. S+ u1 W/ `4 Z& j1 h
// time step. The action is executed at time 0 relative to
* M, }+ C, ?) s // the beginning of the loop.
7 w8 y, _1 f) a+ y/ D/ h, b1 }) j* S8 o% v. f+ w! D* \
// This is a simple schedule, with only one action that is
P; I [! t T [. U* c6 t // just repeated every time. See jmousetrap for more
3 g( w* j2 T( {, b, p; @5 ] // complicated schedules.
: L G! h- Y) K0 @( J; `
, S6 D( `' D3 m) \ modelSchedule = new ScheduleImpl (getZone (), 1);# O; }9 T! Q* a1 [0 s6 R$ b
modelSchedule.at$createAction (0, modelActions);
- { o! z5 L, ~& F 2 }' y) G! F& d: }6 e
return this;
% H1 w ]8 `6 W- t } |