HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 c9 |8 }8 E% @
% c( h% ^% f5 ?( q- k+ L* [0 X public Object buildActions () {) X6 A& j+ p3 b; ]. M1 d4 b
super.buildActions();
& k0 A0 W' |5 W/ W; E
$ d/ t* |, ?( H5 @0 B( I // Create the list of simulation actions. We put these in& z9 s0 N9 T+ J6 C9 @/ z/ J
// an action group, because we want these actions to be
; X5 ^' p+ h4 Q7 @/ ~5 { // executed in a specific order, but these steps should
3 ]- y% _' g0 I& ?5 _+ T9 ]/ a // take no (simulated) time. The M(foo) means "The message# Z; `2 f! _* e( x
// called <foo>". You can send a message To a particular
- `4 R7 }* I B2 a" P4 w- a // object, or ForEach object in a collection.
: c0 M5 G/ b" p
& k; i$ S% y7 a5 n$ R' F4 o$ L // Note we update the heatspace in two phases: first run
; C2 H7 Y/ L$ y4 W% L+ f: k2 ^ // diffusion, then run "updateWorld" to actually enact the" b! v2 }! h- Y9 w" O9 L2 \" |2 Z
// changes the heatbugs have made. The ordering here is' j# U0 J+ n& X @' _ h
// significant!# q* \8 _; B2 Z3 q( J( U+ j
, y8 o" w0 m5 j9 k2 i- [) J // Note also, that with the additional
3 G; p h) A& N8 F$ B // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 W0 @' z( H7 T4 I8 x // randomize the order in which the bugs actually run
& s* @- [/ H2 G6 o: O // their step rule. This has the effect of removing any* G: d' `% O( O0 c6 S& d, y8 X( E4 Z2 ?
// systematic bias in the iteration throught the heatbug# x! s+ X6 ?7 L4 Z7 T
// list from timestep to timestep
* {) w. _: }# V% @1 j
0 U$ Y+ w2 [* s4 F. k // By default, all `createActionForEach' modelActions have
+ I- g6 _ F- W // a default order of `Sequential', which means that the
) R& l% l+ g6 ] // order of iteration through the `heatbugList' will be( `5 G' ~1 S5 }
// identical (assuming the list order is not changed
6 }) t2 g: V8 {# G+ E0 x7 T9 t) k // indirectly by some other process).
- i" g7 x* b x: v2 { ( e! F+ Q* P% u; {+ @3 T
modelActions = new ActionGroupImpl (getZone ());
" a* X+ t. U$ N# K; ^3 N4 `! [. f7 B f( C+ [1 a
try {$ ~" z- i! S, e7 {7 p$ d
modelActions.createActionTo$message
9 Z8 u/ P9 Z1 s (heat, new Selector (heat.getClass (), "stepRule", false));& b ?" F( o5 y+ ]0 F
} catch (Exception e) {
. D8 s3 r& W _* @0 n" k System.err.println ("Exception stepRule: " + e.getMessage ());* C6 x% ^- Y9 e' B4 ^% K9 v
}
, P6 O% K! G d- g3 {- `
3 Q( L2 X) m- C7 w try {9 Z \( I* i/ A& m, m
Heatbug proto = (Heatbug) heatbugList.get (0);: i' N. [: C* i3 U
Selector sel = ! ^8 @+ z( V5 J
new Selector (proto.getClass (), "heatbugStep", false);) I6 v/ U% V1 j% f
actionForEach =
3 ?4 b: ]/ e4 ? p, n' k modelActions.createFActionForEachHomogeneous$call; Y# A& P/ ?4 p3 d# K [
(heatbugList,& Y: B/ \7 h6 n. l; t0 H* }
new FCallImpl (this, proto, sel,2 |+ @' ^" G/ K2 C( ^8 O7 l* }% y
new FArgumentsImpl (this, sel)));; x9 P) A7 o, P. ~7 t
} catch (Exception e) {
! `7 I1 M8 x0 a& \ e.printStackTrace (System.err);) T6 B1 i& n( U
}
$ y: {& n. g% m% y2 u/ ^+ d0 G
8 w8 Y; Q B8 q3 q syncUpdateOrder ();$ F1 b) k1 n0 k- [3 Q
) n) R M- s% Q% u7 w, h- N try {
# X& z/ C& u9 x+ q modelActions.createActionTo$message
5 t2 a H/ y" m) K (heat, new Selector (heat.getClass (), "updateLattice", false));
6 R/ F$ t5 W: k, l- } } catch (Exception e) {
' e" ?. K( c9 q* r4 i2 H: ~1 ? System.err.println("Exception updateLattice: " + e.getMessage ());- k/ I+ w$ r8 P _9 ~
}
# M) }+ m% W: y2 H m: G 7 H' n$ C! v8 C. B, L% w
// Then we create a schedule that executes the0 T# q; l3 i) F4 T
// modelActions. modelActions is an ActionGroup, by itself it9 s( g' k0 N9 D
// has no notion of time. In order to have it executed in
# @7 e P- G$ D$ \" i. G' q // time, we create a Schedule that says to use the9 f5 @* r3 G+ h
// modelActions ActionGroup at particular times. This; u Z* I: x8 ]) ]6 k5 A( p' R
// schedule has a repeat interval of 1, it will loop every
$ P/ a6 v d' c3 | // time step. The action is executed at time 0 relative to/ G2 x1 ~2 q: u: H1 v
// the beginning of the loop.3 `3 i, }+ b9 C
! d' m% I/ h9 i/ S0 t, V2 u
// This is a simple schedule, with only one action that is
# G8 _6 V. r) a! e // just repeated every time. See jmousetrap for more
0 B$ f- b" z2 h. o; f- y1 T" _ // complicated schedules.* U4 o+ D2 O* }8 S$ n$ C
' ]( V- R' r# o& X+ n3 d# t3 Z
modelSchedule = new ScheduleImpl (getZone (), 1);8 Q9 D: X4 R* R% Z
modelSchedule.at$createAction (0, modelActions);6 u/ r4 L+ N: }9 C5 U+ \5 {. d0 t
, y/ Z1 Z" e9 I" O
return this;
3 J9 w! y; c$ F7 d } |