HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; `& @1 J% ~3 P( C+ x1 O0 P8 o! {, T
public Object buildActions () {
" K, p! {7 L; v6 n- X4 m/ ~2 p super.buildActions();6 H0 [( \! t! a& T& a2 C/ ]
! S) d$ e5 A& z4 m3 T: w
// Create the list of simulation actions. We put these in6 D# J3 H: L2 f
// an action group, because we want these actions to be& m$ t6 p. o. g8 E! E
// executed in a specific order, but these steps should- f8 D$ D s) `6 w
// take no (simulated) time. The M(foo) means "The message
4 t3 F8 }% u( t. F' l/ j+ [ // called <foo>". You can send a message To a particular
% w! m6 v* D: C, n8 I // object, or ForEach object in a collection.7 x. j3 t3 {1 u ]6 F( w( L
/ x1 N3 Q3 ?$ y. C) T4 K- t. e // Note we update the heatspace in two phases: first run }$ Q3 b+ v/ f
// diffusion, then run "updateWorld" to actually enact the
9 `4 {8 E6 B1 U5 t // changes the heatbugs have made. The ordering here is5 E: N# f% [$ }: l
// significant!- b" j+ s: h: P/ d2 b
! h% q+ S- V% ~
// Note also, that with the additional# x }% Y: \! r; N
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 R/ V# ^" [; q7 F7 D3 q+ Z1 T* @
// randomize the order in which the bugs actually run; j+ y+ k- \- C" v: |6 {
// their step rule. This has the effect of removing any; b, ~0 y8 }, R2 t7 C; c- f" @
// systematic bias in the iteration throught the heatbug
$ A7 @8 B9 p4 _! d // list from timestep to timestep
- }/ e7 k$ ]* p$ F, k; w! I
0 h$ K0 {( N+ z6 g1 C5 S( N+ W, _ // By default, all `createActionForEach' modelActions have5 T2 w" A- g# }* ?& t4 ?9 j0 X
// a default order of `Sequential', which means that the, f$ [7 |7 }* n& n8 y* [. T
// order of iteration through the `heatbugList' will be
P4 i9 X2 `; ~+ Q+ `5 A% {6 c // identical (assuming the list order is not changed
# Z1 _ {0 f* h4 b' {; A // indirectly by some other process).
, Z& D. u: U# m# w X- F) P- x
# F9 {1 i6 b4 ] modelActions = new ActionGroupImpl (getZone ());
% I1 Y+ k) ]6 H5 n6 w* `& l1 U4 Y, c. A* V5 L k+ }
try {, r. M1 H+ F- @. C
modelActions.createActionTo$message
5 ~* x& F) s! m% U6 W (heat, new Selector (heat.getClass (), "stepRule", false));& [' G+ O+ q I# p1 l4 f) p
} catch (Exception e) {
9 J+ i+ B# W p- m& a, S4 H1 D System.err.println ("Exception stepRule: " + e.getMessage ());# E" L+ y" W. B. \ x
}: c: s0 m: ?" S r. Y. D9 o
$ e: j6 x4 k/ g4 _+ g
try {
% W, R$ I5 S1 W' X Heatbug proto = (Heatbug) heatbugList.get (0);7 k, d; e, _" z% H n, K
Selector sel =
7 |8 O2 b( C" ]7 r7 m4 @ new Selector (proto.getClass (), "heatbugStep", false);% Y* s" V2 ^2 u3 Z
actionForEach =
& W8 A* R) q* f+ m$ {1 v* Y$ r3 z' M modelActions.createFActionForEachHomogeneous$call
/ q% s' w0 M4 v4 d: e. f (heatbugList,# Y' s4 I5 {. X" |* f$ g8 D
new FCallImpl (this, proto, sel,
0 M* p5 P7 t6 Q new FArgumentsImpl (this, sel)));/ m1 z2 @* c1 V3 b1 U
} catch (Exception e) {
1 A0 @( C& \; }+ P e.printStackTrace (System.err);
$ n9 ^. c a) I, G1 i) [3 r5 C( d& P }4 C( {3 s: w, X/ `$ K
* ~7 ?* t3 v3 x v! T( W% W
syncUpdateOrder ();; r# g- Y, R3 c6 r5 d9 s
* g a/ f" `% d3 r3 h6 W8 {) S4 s
try {
+ t2 `) A! [$ X; J modelActions.createActionTo$message
7 k* v! }* q' j+ X% }2 n (heat, new Selector (heat.getClass (), "updateLattice", false));
4 _7 E: @7 N" C. O) N$ c; { } catch (Exception e) {
% W* F' w4 q$ A4 e( E' n3 I; F System.err.println("Exception updateLattice: " + e.getMessage ());
8 p' g; H5 ~4 W1 s/ s: B$ A. B. v }
5 W, p6 r8 b& d" C- `6 k" k& F6 X 7 `5 h7 i% Z) X0 U6 K
// Then we create a schedule that executes the) p6 ~4 A8 ]5 F! [6 W; k
// modelActions. modelActions is an ActionGroup, by itself it
! A& D% N- \; q& P$ E2 u // has no notion of time. In order to have it executed in
9 h1 q* U! h, f2 W7 Z // time, we create a Schedule that says to use the( w% R" E5 V! m2 _- l
// modelActions ActionGroup at particular times. This
* G @3 L- _& I9 ]5 W. ? // schedule has a repeat interval of 1, it will loop every
2 ^2 m8 X) t; p7 C U* I- h' J& ` // time step. The action is executed at time 0 relative to1 w, N& x2 V9 W# M* x7 P6 R8 X
// the beginning of the loop.
4 S/ }" t \6 C" x6 ]6 _
. p* M' ^8 E5 X/ x8 o* \" ~ // This is a simple schedule, with only one action that is7 N4 m1 x: q3 t# s5 k8 g; f2 c
// just repeated every time. See jmousetrap for more
8 Y- A. F! E) g' K0 O! [ // complicated schedules.
8 `9 O( a! H0 P' T; J
8 [( K t4 [6 A modelSchedule = new ScheduleImpl (getZone (), 1);
9 H& v# z7 w+ T4 T' [) A Q9 Q modelSchedule.at$createAction (0, modelActions);1 u. h* @ w$ j8 z5 ]' z
. C- ~8 P0 b4 M+ \- j, U return this;
& l5 P6 p- Q0 u+ Y7 m } |