HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 i* z' K/ P2 P& q+ }
% j! S4 |4 y3 E# n$ C public Object buildActions () {
: g* p F1 c( M0 ] super.buildActions();
$ r! j# a- @) w2 B5 m3 r: H 5 J& U3 U. O0 M
// Create the list of simulation actions. We put these in d/ c) W- W8 {9 E0 Q. e
// an action group, because we want these actions to be+ f# U- }# K- k( R, |3 W& p+ a
// executed in a specific order, but these steps should) X1 }2 w* W* s1 O( q) X
// take no (simulated) time. The M(foo) means "The message
6 S3 D( T _6 i% P7 M // called <foo>". You can send a message To a particular0 k$ ?- }6 d, `( y& T% F
// object, or ForEach object in a collection.
0 p; g* g4 ]5 c1 ?8 Q, [# Y M
+ u& ^" b% J/ Y // Note we update the heatspace in two phases: first run# e8 P9 Q2 @. Q9 O
// diffusion, then run "updateWorld" to actually enact the9 v3 ] ^* f: _9 E
// changes the heatbugs have made. The ordering here is
3 m9 y; y5 K7 y2 c& R& m // significant!* q3 h! N D" v1 i+ M, E1 A- m6 v
$ n2 l8 _' a+ T // Note also, that with the additional( Q% C! a% @9 X8 X( S% U
// `randomizeHeatbugUpdateOrder' Boolean flag we can' a" g5 {* Y" [: |" d; [; e
// randomize the order in which the bugs actually run
9 S% l8 v; v9 O: a( o& o // their step rule. This has the effect of removing any
- Z" }' ~# J( j& M // systematic bias in the iteration throught the heatbug1 @& V* F* A) g5 O
// list from timestep to timestep
$ K* A, z0 a% |+ q
! r, S+ X4 Y, ] h( o, ` // By default, all `createActionForEach' modelActions have
7 l/ G$ k9 m& R, E' m' e7 X // a default order of `Sequential', which means that the
& S) ]. C9 O e/ d e( e. d // order of iteration through the `heatbugList' will be
4 A0 |) E- q1 e/ `/ e/ u // identical (assuming the list order is not changed
& ?7 P w, a! Q! O // indirectly by some other process).4 |8 F! R6 P% S$ S' ?. E1 A, a
, W7 R, @) o& _6 w4 o
modelActions = new ActionGroupImpl (getZone ());
( c8 f$ g x3 v
8 T# k( T6 E& B8 z( A try {
& U) \* L) d5 M modelActions.createActionTo$message
% q: C/ ]" D( y, ~ (heat, new Selector (heat.getClass (), "stepRule", false));5 o& B R8 ^* u4 B3 q9 ~6 b9 `
} catch (Exception e) {
& M' Z& C9 G$ \/ @% d" L System.err.println ("Exception stepRule: " + e.getMessage ());/ l6 S5 W1 V4 t" r
}
/ ?! N- G1 ~! d# v& \
& b% A, z7 }; |2 x+ H try {
. r3 R5 X' X+ Q Heatbug proto = (Heatbug) heatbugList.get (0);9 T( L2 p/ x6 r3 k& Q
Selector sel = 3 h0 I& y: f8 D0 D
new Selector (proto.getClass (), "heatbugStep", false);
5 O$ Z3 u& p2 h& M# g: H4 _ actionForEach =
1 v' M, V! X2 b2 t7 ^ modelActions.createFActionForEachHomogeneous$call
# b! N: r7 z0 E, e# o# S! o( v (heatbugList,
5 z3 s+ T% N9 c- ?7 R( N new FCallImpl (this, proto, sel,. M- N9 F% B3 C* [9 v4 b/ u' |7 y9 p+ `
new FArgumentsImpl (this, sel)));
) T7 V1 J. t. | N6 P. K+ P) ] } catch (Exception e) {
; v: d0 A6 w7 s( [ D ?0 s7 I e.printStackTrace (System.err);
. F/ \$ [/ ]1 g7 s/ Q }. Z p4 t# p; P4 x4 u* S
- M: v+ A) L, C( l2 q: } syncUpdateOrder ();
# m0 T6 {* I" u: E$ g4 F1 m3 _% B7 \
try {0 l) T2 o) m$ a1 j( [/ c; v
modelActions.createActionTo$message
4 ~2 q# P& t+ S8 i: M (heat, new Selector (heat.getClass (), "updateLattice", false));4 ?' j2 n- A6 L; _
} catch (Exception e) {
; A, [2 |: E1 _6 A System.err.println("Exception updateLattice: " + e.getMessage ());0 r: ~$ h* ~2 |$ ^
}( }+ C2 B5 ^0 J2 D
5 ]# E3 B/ K" v/ U9 K1 ]
// Then we create a schedule that executes the
$ O9 V& g, m' G; { // modelActions. modelActions is an ActionGroup, by itself it, _2 U0 D+ F' @. r9 y5 {
// has no notion of time. In order to have it executed in* g1 `6 o# H) [( n) s6 G
// time, we create a Schedule that says to use the
9 b8 f; o/ Q* ] // modelActions ActionGroup at particular times. This# {& a9 S- T+ F* k. w) I; ?
// schedule has a repeat interval of 1, it will loop every* R) H5 u9 u; H+ U, n# w! p
// time step. The action is executed at time 0 relative to
# E) x1 P. `; w& } // the beginning of the loop., f1 ?& i5 b) t
/ v" c: [9 R s# T
// This is a simple schedule, with only one action that is
; R% h$ R: @ Q# I // just repeated every time. See jmousetrap for more# G3 q+ K0 A1 V y& [
// complicated schedules.- E1 \5 y9 U( v O6 a6 V1 A
$ j: }9 }" e& Z6 S
modelSchedule = new ScheduleImpl (getZone (), 1);; @' X0 s3 D% u" J! w; `, C
modelSchedule.at$createAction (0, modelActions);
( P- r0 R i( h4 K; i0 t9 O9 i
8 i1 N; y1 b" f. R" } M return this;* i& U7 Y! V& \+ E' H6 A. T
} |