HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 ~2 r+ V6 ]2 r# U
1 @2 w1 \6 U* Y: i. H
public Object buildActions () {
' m. Y1 \4 G1 q2 L) g6 @# u, |' a super.buildActions();
9 \7 ]; ^9 A: G+ u4 ?. c) M6 u! F
7 h4 G1 B7 F: r/ v1 c // Create the list of simulation actions. We put these in% q3 r1 W) |& O- f6 r5 @- G" K; L
// an action group, because we want these actions to be4 B0 p, z# |& B1 j
// executed in a specific order, but these steps should
. o/ R' e" p5 a/ T // take no (simulated) time. The M(foo) means "The message
% _$ s2 [; L. v5 g& B // called <foo>". You can send a message To a particular- n& j# O* W( q4 J
// object, or ForEach object in a collection.6 j* s: h& N9 u; `" C
8 [4 \+ D& X. X8 L) O
// Note we update the heatspace in two phases: first run! i1 J6 U' u1 G2 K
// diffusion, then run "updateWorld" to actually enact the
6 o: i; {( a+ ~/ _ x // changes the heatbugs have made. The ordering here is/ k; L* ]- P; o, E0 E
// significant!
/ x+ c% ^! S# R5 R9 Y ' k8 ?; g1 ?! V9 ^1 R
// Note also, that with the additional
( {7 y: j1 ~4 R1 T+ m // `randomizeHeatbugUpdateOrder' Boolean flag we can2 I+ {3 d5 ]) S& _. m
// randomize the order in which the bugs actually run6 a; u3 l' l; R( C' e
// their step rule. This has the effect of removing any* T& m) Y4 D- b/ e; o7 P
// systematic bias in the iteration throught the heatbug
$ I$ c9 ~) j. m3 R8 K' j0 a // list from timestep to timestep$ N. V3 ]7 L; B
; `6 o8 i h( P // By default, all `createActionForEach' modelActions have& j6 x! w# ?6 d T- ~0 O
// a default order of `Sequential', which means that the
4 K! c5 i3 z. C // order of iteration through the `heatbugList' will be
' ^; e" s2 {2 V // identical (assuming the list order is not changed
7 r( w7 h6 |' P- q+ e // indirectly by some other process).
1 r1 A1 h% v* d4 A1 {- j- R
; b1 K' x* a8 D7 |6 S; t+ D! d modelActions = new ActionGroupImpl (getZone ());& ^" q3 `3 t _) Q3 J W4 m6 w; c! Q0 ?6 j
- D& g9 b! |( s6 F$ @; m
try {3 X7 g9 F/ c& a" n* W' [( F
modelActions.createActionTo$message9 C! _) i, l% r+ ~& `# _/ f: g
(heat, new Selector (heat.getClass (), "stepRule", false));
7 m. i. u' j' h6 u# g! x } catch (Exception e) {
7 u! M* m3 k" [ System.err.println ("Exception stepRule: " + e.getMessage ());
, o) e9 b+ V0 B% H7 I6 ? }8 e- w* S1 a' P. ^! H8 O4 X
" h+ t5 \: }+ I# z try {% C" d2 o8 E. I& ?$ a
Heatbug proto = (Heatbug) heatbugList.get (0);
% O5 Y7 t3 d; f( @! P, ?9 M# Z/ C/ K Selector sel =
0 E5 k0 b0 N+ c2 z* r8 k) t1 F( U new Selector (proto.getClass (), "heatbugStep", false);
( k3 n9 }/ P! [+ I actionForEach =0 j& x) I- G# M
modelActions.createFActionForEachHomogeneous$call4 w( \+ s5 U: G
(heatbugList,. L+ I/ ~3 M% `) U: P
new FCallImpl (this, proto, sel,
, c4 z+ b! z$ i4 U* Y new FArgumentsImpl (this, sel)));$ c6 U7 T& |( |0 M- D
} catch (Exception e) {
. j2 v) c! Y$ r( q e.printStackTrace (System.err);; u" X2 l& s- ?" U) ^
}
/ y2 _% I; h/ r( s
! ]+ U% q; M ^ syncUpdateOrder ();" }0 i. C. ]9 K) M
2 u3 s% b5 Z0 H" U8 ^ p
try {
* H! l+ r# {* f, i a N& R- O1 v modelActions.createActionTo$message ( e( G; X1 O. @2 `
(heat, new Selector (heat.getClass (), "updateLattice", false));
. B) J' K+ J i } catch (Exception e) {
( K1 m. j4 e1 h" q System.err.println("Exception updateLattice: " + e.getMessage ());- U* z: w0 C( O' ^0 i
}: F4 z+ I. ~9 d7 A7 y0 d
% b7 s- u7 u: ^, C% \ ?4 F
// Then we create a schedule that executes the) o" d# q8 l: E0 C, T& q
// modelActions. modelActions is an ActionGroup, by itself it0 v0 Y7 t: p+ f! E: c# t( l
// has no notion of time. In order to have it executed in# L R! f/ M- ]; `
// time, we create a Schedule that says to use the9 d5 Q A8 r" f0 e/ n# N& F* o
// modelActions ActionGroup at particular times. This
. J6 O$ ~9 G8 X4 \* q" d // schedule has a repeat interval of 1, it will loop every
+ y/ a! l) q: r4 | // time step. The action is executed at time 0 relative to
& g5 B. t' Q& |8 B // the beginning of the loop.
+ ]) x4 y9 K- I5 a- F2 T8 D6 v# p
// This is a simple schedule, with only one action that is4 {# E1 U7 D5 Y* p, a$ y/ n0 K
// just repeated every time. See jmousetrap for more$ q/ N l/ Q( l$ W6 f
// complicated schedules.2 @( f0 V# Z0 ]' d! o X
' r) i) ^" R8 x* t! F: C
modelSchedule = new ScheduleImpl (getZone (), 1);
5 I: @& \# L! x modelSchedule.at$createAction (0, modelActions);0 @# S& Z6 B' e( Y7 a [
" p5 y& @6 c/ d8 g7 J2 r1 o% ?
return this;* g1 b8 ]& e/ F
} |