HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 L$ z% {) K9 u4 h* z
6 g% Z2 c& d& a; [1 g4 C public Object buildActions () {4 j$ n k1 _0 {7 _+ C, z
super.buildActions();. Q0 p6 x- ~- t8 K9 Z) h3 Y/ _) I
! Z3 I0 V! g4 r4 B- C+ K" e# q& t/ J // Create the list of simulation actions. We put these in
6 P- _ M9 ^) N3 `4 h // an action group, because we want these actions to be
k* U7 N2 e. `1 B& n // executed in a specific order, but these steps should4 u; c+ I- \" g. X1 J& h* F
// take no (simulated) time. The M(foo) means "The message( q M) F$ u. Q3 q( k, i5 x* }& w
// called <foo>". You can send a message To a particular) m7 M6 h& u8 [1 |4 d, b
// object, or ForEach object in a collection.
0 I* g9 Q, O- o" ^
$ x* {7 I7 m0 Q1 a. F // Note we update the heatspace in two phases: first run
+ a: E0 f, N7 P# b // diffusion, then run "updateWorld" to actually enact the9 ^* ]6 W5 X E4 I3 b5 |" P
// changes the heatbugs have made. The ordering here is
0 p8 [8 }/ Z* E5 X T6 }; j2 d! B6 i // significant!* s- w* S& h, H: ^8 }
$ H) h' i+ ~& I/ c" Q+ u5 Z
// Note also, that with the additional, W! f! p) f$ ]7 G( O# \ _: Z. v
// `randomizeHeatbugUpdateOrder' Boolean flag we can: R N4 Y$ h J) {5 r
// randomize the order in which the bugs actually run
n! Z+ `' y) y% o // their step rule. This has the effect of removing any
z/ l6 t: \+ v // systematic bias in the iteration throught the heatbug
" b; v# I1 M2 f! T" m2 X* ? // list from timestep to timestep
1 t E4 L0 `0 \ 4 r5 U5 A+ B2 n# s6 x& `
// By default, all `createActionForEach' modelActions have z( F5 ]) Q+ N$ ?5 @8 \( l
// a default order of `Sequential', which means that the
* \/ ?+ z0 d" c8 o& \3 o // order of iteration through the `heatbugList' will be
/ U: }# s8 v% H% H. k; U3 i* m // identical (assuming the list order is not changed
; r5 l* n- r5 w2 _' L- | // indirectly by some other process).7 A% y% N7 N+ c+ m# Z, ?) Z
2 w2 ?8 w- G1 E9 o' Q
modelActions = new ActionGroupImpl (getZone ());
& d! F8 W g6 q' d+ M/ ?0 h0 e0 Y4 ?
try {
* `2 N6 o) X, c/ X% l, m3 n modelActions.createActionTo$message1 ^& P3 F. j/ w* N; P' M
(heat, new Selector (heat.getClass (), "stepRule", false));, ]" I# H, h: B; b" `+ z/ t/ H) f
} catch (Exception e) {& A4 H; q$ {* a2 n1 Q9 |
System.err.println ("Exception stepRule: " + e.getMessage ());1 H) U- f7 u6 T/ K/ P
}
( X3 c" d h' q( Y; q- q* O" ]! Q2 K8 g5 t1 v8 z
try {
! ?) N/ B& P# S2 J( Z+ r. B7 r Heatbug proto = (Heatbug) heatbugList.get (0);
3 Z! Q9 B6 _5 V: m+ d5 n( @ Selector sel = ) u! P) o- r6 ?
new Selector (proto.getClass (), "heatbugStep", false);
! ?% X4 ^# q6 s. n/ J# D actionForEach =3 @0 w) Y$ A2 G( N# E F2 m. i
modelActions.createFActionForEachHomogeneous$call* H7 n8 g) B: s* I- ]( p; p
(heatbugList," Z- v" c; `5 ]9 z& [+ W8 C
new FCallImpl (this, proto, sel,3 `% H* G9 C) g5 q9 [
new FArgumentsImpl (this, sel)));
+ f( p, g# d5 q } catch (Exception e) {+ n9 O, V4 b5 ?" e
e.printStackTrace (System.err);+ y- X' E0 m- Q* g
}
. n9 f3 J) O/ J4 e3 x4 y3 Z9 q
+ q+ F$ v. u" z# {- t- N syncUpdateOrder ();
0 H* U; p( G( e+ y5 a; z- Q# G
8 R6 `5 E. O! W5 u. g try {
7 I% }1 k; x4 r0 Q5 Q modelActions.createActionTo$message
: J% b7 s+ |- v" m* z+ [3 |+ O: w (heat, new Selector (heat.getClass (), "updateLattice", false));
( N% Z8 T* {6 x- P& D: L8 u* z } catch (Exception e) {. o0 y( e) e" k3 F
System.err.println("Exception updateLattice: " + e.getMessage ());$ Y0 U# N9 C. c5 j4 w0 m4 F6 N! ^
}) F. K# i# C* |6 d
/ p) B% p& P0 C8 H
// Then we create a schedule that executes the; p& g! g( E' f6 ~; |
// modelActions. modelActions is an ActionGroup, by itself it( @" `( Z5 }' i& _* G+ z
// has no notion of time. In order to have it executed in
8 ]1 x' v {* r' F7 l // time, we create a Schedule that says to use the2 U) v) c4 g4 B
// modelActions ActionGroup at particular times. This
& w N7 R2 Y& R& X+ t# |) t // schedule has a repeat interval of 1, it will loop every/ ^6 X- U! ^( J) f, k
// time step. The action is executed at time 0 relative to
5 w1 m( B3 [' r4 I // the beginning of the loop.
* O, R) Z3 k4 F# P3 F8 M+ R! ^! ~
4 K) h! k: H0 V s. m // This is a simple schedule, with only one action that is8 [/ J; K. I* t0 Y, u! m r F
// just repeated every time. See jmousetrap for more$ M* {" E; H0 C2 @, A
// complicated schedules.
' S/ n7 E. ^- g& o3 w
9 p2 w) U! q2 |& m. J modelSchedule = new ScheduleImpl (getZone (), 1);6 [7 y6 e2 ^- V* Y! ? m4 G
modelSchedule.at$createAction (0, modelActions);
: u. ~" P( w+ W# ?7 Q& G2 A6 `5 e ? . s& l% O% p( i+ }) s; R
return this;
) q/ m4 L" U3 ? A- |7 Z } |