HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% K a4 @! u1 F8 R7 g" g0 T
/ v' v: S: |* h/ T B7 I
public Object buildActions () {3 d r5 j0 i& i* _
super.buildActions();
3 V& H& q9 c: z8 Y* i' Q
- m$ [% T) T- j // Create the list of simulation actions. We put these in
: Z2 _0 p" K; S' P4 r5 |9 a // an action group, because we want these actions to be& x; Z& M6 Z2 a1 u1 P' k7 x& c I
// executed in a specific order, but these steps should
1 [& m; b# I& l" Z# u6 m- E // take no (simulated) time. The M(foo) means "The message% R7 x' v1 W1 m& y( |* U$ @: V% F! A
// called <foo>". You can send a message To a particular# V: V& u5 z" U- e: U3 G7 V
// object, or ForEach object in a collection.5 z3 k( ?1 o4 q, m4 Q
9 u5 t, ` O& Y m6 P // Note we update the heatspace in two phases: first run
) y8 q! a! A3 n5 { // diffusion, then run "updateWorld" to actually enact the9 n- l" ]/ Q2 B3 b1 C4 ~% M
// changes the heatbugs have made. The ordering here is
9 K! g1 h2 B; _9 r5 ~ i) n& Q' W // significant!
. l7 K" M9 t+ T
- Q7 O9 [! Q" i. E& T // Note also, that with the additional
4 I. J" W# O: T# l* L1 }( i // `randomizeHeatbugUpdateOrder' Boolean flag we can" j0 q7 n- P5 l4 [
// randomize the order in which the bugs actually run4 X0 _8 ?, [2 L- ^
// their step rule. This has the effect of removing any
7 l, D& P5 @ ]( e // systematic bias in the iteration throught the heatbug \9 u) @/ b X2 E( O/ p$ q
// list from timestep to timestep1 G5 G1 V# d& l, z
# e- o! ?# m9 L3 L- `! l3 U // By default, all `createActionForEach' modelActions have
2 I+ i6 D" C2 c0 f // a default order of `Sequential', which means that the
2 N& H& b" m q5 q' Y // order of iteration through the `heatbugList' will be
# D: P6 @! d5 @$ d- J% U' `4 k: _7 \& { // identical (assuming the list order is not changed
3 _# p0 x9 Q" H& s8 P // indirectly by some other process).
1 E' P0 s5 w ?$ G7 I2 P% J6 ] . B3 `8 E# E+ G t. d( t9 |+ j
modelActions = new ActionGroupImpl (getZone ());: Y* x8 p! Y- u: I, z+ f+ x, t
- U+ [$ L& c$ F+ Q6 C try {$ I* \% \0 ]4 n9 ~6 u" U
modelActions.createActionTo$message3 Q3 I0 u6 ~1 I: b* e" X* K
(heat, new Selector (heat.getClass (), "stepRule", false));
0 ?+ a5 N" R4 C3 z# u# o } catch (Exception e) {
% f- [2 O' m% N2 D. i System.err.println ("Exception stepRule: " + e.getMessage ());( U0 S$ n5 f. ?1 }( h/ J9 h. b0 Y% J) O
}
% b4 J$ \( I w8 P) t& c& V
( O" v* m; A( S5 K try {; O3 j# _9 f$ K0 y
Heatbug proto = (Heatbug) heatbugList.get (0);
: O# [' L8 e! _# d i Selector sel =
* i+ v7 { Y9 ^& A9 E# Y3 z4 y8 w% ?( Z new Selector (proto.getClass (), "heatbugStep", false);1 a8 h; R, E" E% G& X% A2 t8 Z
actionForEach =
( u; X' W( s G- S/ D0 _ modelActions.createFActionForEachHomogeneous$call2 z1 T6 C$ k- O% G* x$ F( K" ]
(heatbugList,
" Z" r' g9 X+ H) C9 ^+ Z new FCallImpl (this, proto, sel,
' k+ p& v' U$ Q( B3 q) v/ Q/ h new FArgumentsImpl (this, sel)));% N8 c( W$ [3 Q
} catch (Exception e) {& L* d6 _2 ]% Z3 u& N3 D, H" L
e.printStackTrace (System.err);7 I `! R8 R* o6 q( C L
}
/ S" c/ }6 }7 c B+ y$ ~4 V
/ |1 @/ ?+ j4 X: R: o7 v syncUpdateOrder ();+ J/ Y4 f$ c+ {
0 G- X" x/ C1 F4 I7 h+ z
try {
7 g8 z" S4 u) Z& r' R modelActions.createActionTo$message
# ~0 ]3 I% l) j- Z, B. \) x! P# [; Y (heat, new Selector (heat.getClass (), "updateLattice", false));
1 W1 F. r" |7 ~5 _' @( H } catch (Exception e) {1 R8 v6 L/ b& {) I
System.err.println("Exception updateLattice: " + e.getMessage ());6 X4 o C1 D& M
}8 e$ }& e; G& n5 Q l
+ E" m6 ~. Y/ a // Then we create a schedule that executes the1 k* G3 m' h' C" v2 a# n
// modelActions. modelActions is an ActionGroup, by itself it! s" K9 \# Q" D) w! Q- f
// has no notion of time. In order to have it executed in* H) O$ s! A% k6 p
// time, we create a Schedule that says to use the! Q: G, I& F9 E1 B. o
// modelActions ActionGroup at particular times. This% m* m6 }. [+ T( q0 R7 K X
// schedule has a repeat interval of 1, it will loop every
3 V" r' w1 W2 Y: @ f' \: M) I# w // time step. The action is executed at time 0 relative to: m! m4 a5 ?! m$ s
// the beginning of the loop.
. d9 y: k x' c; J1 V+ q l* Z& O7 W4 M0 G7 O
// This is a simple schedule, with only one action that is
% J. c; A" p' J0 Q // just repeated every time. See jmousetrap for more4 |& @+ ^9 y+ P& O
// complicated schedules.
. c# O; \5 O2 A& o$ v
1 r0 X3 h( Y2 z4 v( ~3 B j modelSchedule = new ScheduleImpl (getZone (), 1);# p" r, A/ i" U0 E
modelSchedule.at$createAction (0, modelActions);
! o% f/ U. m7 D# j- o0 H $ r: A$ A, j$ O V; ]5 R
return this;% \$ {/ Z0 R2 T, j4 @0 V
} |