HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 ?8 Q/ a9 I1 q- J0 g
. r" F2 w2 v6 P public Object buildActions () {
, x% Q# N1 a8 J0 n# K super.buildActions();
6 N7 i9 b# X( k) H3 m. R
' v" _0 y3 i, Q; Z' B; ~4 ^ // Create the list of simulation actions. We put these in
8 ~- X$ Q! e5 T! ~" k // an action group, because we want these actions to be4 D5 t+ h4 G& j' e) ~7 k
// executed in a specific order, but these steps should+ x5 i' A/ u! y6 Y: l% N' J
// take no (simulated) time. The M(foo) means "The message
! L( b. c' M/ U8 Y; B) H& K5 m // called <foo>". You can send a message To a particular
: V0 s1 ~# @5 M/ L) c1 k // object, or ForEach object in a collection.
6 @9 P( b5 o- p m v, f9 s % m, A/ F& }. y3 J) u" k: x; L
// Note we update the heatspace in two phases: first run
* F3 y, H0 W( y+ j* O8 B/ r+ w% ^ // diffusion, then run "updateWorld" to actually enact the7 z9 Q6 v4 p, H. j# g2 I! U
// changes the heatbugs have made. The ordering here is
% Z: {9 P( ]- X! c& | // significant!$ A; L3 f5 u/ {, F
& g) e6 z. }5 _4 i' R# i$ k // Note also, that with the additional
" N2 N7 u9 }) f" O // `randomizeHeatbugUpdateOrder' Boolean flag we can* j d. L% `7 e! J% `, x
// randomize the order in which the bugs actually run/ z# M7 r) e6 k+ m5 i: _5 q- I
// their step rule. This has the effect of removing any: P( z4 |' Y1 }) s. R% F% u# l; @
// systematic bias in the iteration throught the heatbug
! r3 K) l2 u$ I4 \ // list from timestep to timestep- H9 R9 j9 X/ Y x- o, t
$ N2 W1 L2 y0 ^
// By default, all `createActionForEach' modelActions have/ D# j1 a" |2 M7 T' o
// a default order of `Sequential', which means that the
5 U4 m# g3 C0 S" Q- }. T" j // order of iteration through the `heatbugList' will be, ?. Q, s9 e. W$ R3 k" I
// identical (assuming the list order is not changed/ r9 [' Z; m5 c5 K& O; m& A4 x
// indirectly by some other process).2 A( @, {1 g% O8 q
' q/ Q# ? b1 ] o( b modelActions = new ActionGroupImpl (getZone ());- y- ~0 U; {/ Y# W( {% p& s
$ J6 `* m/ X' S* b U0 n8 M
try {
T8 _! D5 z1 r# U W7 i: V modelActions.createActionTo$message
, S6 D1 L1 W/ A- _% X3 ? (heat, new Selector (heat.getClass (), "stepRule", false));
% O$ Z" h( ^8 y6 a7 o9 U } catch (Exception e) {
) G1 z' u- t6 |( C& q' f System.err.println ("Exception stepRule: " + e.getMessage ());) j" D/ D' ?9 H) o
}4 L; ^& E9 K/ b8 d$ S& T m- Q+ y
7 Q' u4 N+ u g' \# x% [0 y try {* k3 m* e0 c* V& a/ L; J6 h
Heatbug proto = (Heatbug) heatbugList.get (0);
- k: [+ W7 w @& C" W; z Selector sel =
) n& T7 M. b, }' E) o new Selector (proto.getClass (), "heatbugStep", false);- A$ k5 s1 Y& J' y& t! s. J
actionForEach =. T( v- f5 o) e0 i- r
modelActions.createFActionForEachHomogeneous$call
- {7 n, ?4 I7 Q2 L, M+ a( w5 Y; D (heatbugList,
, q8 j' Z% Z+ m, `1 _6 g new FCallImpl (this, proto, sel,: ~( S# M$ [% x
new FArgumentsImpl (this, sel)));5 K$ q% J1 C! o
} catch (Exception e) {
! ~5 i' v& {7 M; g3 G e.printStackTrace (System.err);. h& ?% s6 f, F% [" f0 J
} v0 C3 |# R" a5 h# Z% `( \ N
) q# N- i1 B V7 X& y& `6 z
syncUpdateOrder ();
O( y y. n. ~. i" c. [# a, B6 v* z q7 X" j+ O6 y
try {
+ ~* i( d% q% G* W) E7 F Y modelActions.createActionTo$message
1 _( J5 i1 F% A9 \$ @* l. `' k (heat, new Selector (heat.getClass (), "updateLattice", false));
, }2 `; k- G" L, T' _6 d& A } catch (Exception e) {
* V' W R' z+ s! x# Y- I System.err.println("Exception updateLattice: " + e.getMessage ());
% u: v; o$ q8 C- ?( E4 @ }
/ J8 [5 w# d' N8 _9 R' e9 } ( [5 m# N4 a# n0 j
// Then we create a schedule that executes the
% o+ Y5 |2 Z: y // modelActions. modelActions is an ActionGroup, by itself it
5 V. ?+ [, v0 T# P2 n( [ E // has no notion of time. In order to have it executed in
# Z4 c2 @' s2 ?, Y2 [- ?3 v2 Q // time, we create a Schedule that says to use the; Z3 s6 `7 _. j
// modelActions ActionGroup at particular times. This3 V4 ]9 S- k! |! }; h* d
// schedule has a repeat interval of 1, it will loop every# F2 x) X; t7 N9 f% W
// time step. The action is executed at time 0 relative to
" d, j! G; R8 K3 r$ X9 m // the beginning of the loop.
" I$ L6 J8 t& }; z5 t) G) V+ U" c9 D- ~5 a: B- T" I4 M/ G/ ~
// This is a simple schedule, with only one action that is0 j& N+ ?* z' y) M; T
// just repeated every time. See jmousetrap for more
! M+ c4 T9 O* d9 y3 B // complicated schedules.
$ g3 J1 K: H0 u: a2 u( o0 f, K/ ] * r- g0 n$ R0 b0 G1 W
modelSchedule = new ScheduleImpl (getZone (), 1);# \+ ^7 h3 {8 A( K- h* K+ a) R
modelSchedule.at$createAction (0, modelActions);
3 b, B4 F' M/ |# D! z0 z - `+ q" h) M# o0 C5 ^
return this;
; Z) z4 S+ w6 L9 c! C0 r! I8 ]- } } |