HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( j) y8 Y' P$ n5 ~& c* a, d; L* R! V5 L* t3 @9 Z0 X. y
public Object buildActions () {- z. A5 l0 F: C0 i
super.buildActions();1 A: m$ I) p# h
6 k1 L$ b u$ v+ K- n1 [ // Create the list of simulation actions. We put these in) H: m6 f2 W! {3 w; j9 Z
// an action group, because we want these actions to be
8 k8 g2 M5 a5 l( N4 G; y! `% Z // executed in a specific order, but these steps should
; z6 o, L" e& w // take no (simulated) time. The M(foo) means "The message
& \: p% m& g7 P+ ?* U) k' I // called <foo>". You can send a message To a particular
% J' O! A0 }. G1 q5 Y4 U // object, or ForEach object in a collection.+ F- g- e5 K1 ^0 z. {3 Y% ^5 q- {. ~4 J
7 |5 r6 k; B9 D7 F // Note we update the heatspace in two phases: first run2 e; _: {. k! i. W
// diffusion, then run "updateWorld" to actually enact the
; I( {' r5 m: }2 [' d // changes the heatbugs have made. The ordering here is( F( w. U b0 \& x. C+ e9 t$ @
// significant!2 O7 B5 E% t' ]/ [
! {, _1 R; c2 G7 Y4 y& i
// Note also, that with the additional
5 {" ?; R0 q1 Y/ ?" B( p8 ^' ` // `randomizeHeatbugUpdateOrder' Boolean flag we can
: D# R" R6 P+ T$ U# @/ k9 w2 ]! } // randomize the order in which the bugs actually run3 c/ L, y: u5 I) ?
// their step rule. This has the effect of removing any. \6 S, Q! g. `: v) v
// systematic bias in the iteration throught the heatbug
9 A/ S; R5 }2 c! o // list from timestep to timestep
# V% ~, Y( U; Z7 B2 F0 R
* L/ f* f$ p* c) P9 D // By default, all `createActionForEach' modelActions have
' A/ \9 ]( `/ h' `' Q* e* o // a default order of `Sequential', which means that the
& X! j% N0 V; n$ S4 n4 o% O5 V // order of iteration through the `heatbugList' will be. j* c; f3 G. a2 N
// identical (assuming the list order is not changed
: h$ R1 F( o. m( a& Z% ]/ C // indirectly by some other process).3 b9 l, U. _. ?. m" @# w7 @
* E- `. u% R( A% z# G
modelActions = new ActionGroupImpl (getZone ());4 j( U- l- W- }& b
& e/ o! W1 W! I- V, D& v
try {1 C7 _; b7 N5 ]6 v0 R
modelActions.createActionTo$message; C. k) y% u$ B( ]. r% F. E) X* u4 V+ X
(heat, new Selector (heat.getClass (), "stepRule", false));
4 B. m8 F4 |- b, h } catch (Exception e) {1 k: @0 C2 Z9 K3 w8 Z& E8 t3 c
System.err.println ("Exception stepRule: " + e.getMessage ());
J3 Z2 H( o8 }( P# O }0 h. L B. x% d1 h. ]+ U
4 D# A( ^9 z5 ?4 I1 ?
try {
! I$ h8 r5 K! x3 K Heatbug proto = (Heatbug) heatbugList.get (0);2 w5 n- p7 m# i* M" @6 d1 E( E9 x
Selector sel =
! w) f% l* z7 E9 O new Selector (proto.getClass (), "heatbugStep", false);
, }) s1 s. z& A% R/ e' L actionForEach =
. A' G" W$ P: O& S modelActions.createFActionForEachHomogeneous$call9 V! K1 e& L3 `# G& |
(heatbugList,
( ^: S. Q- `* U new FCallImpl (this, proto, sel,
5 @. p0 S1 W, w6 e$ r% H5 \# R+ v new FArgumentsImpl (this, sel)));% H* ?- t. y3 H* I' X7 v
} catch (Exception e) {
0 u; @4 d0 ?, |* v9 O+ N8 W# _ e.printStackTrace (System.err);
; D( w5 ~% |* i! X; b$ @$ R }) w" L9 A- f$ R
7 W: C% a5 p# o4 r: W2 t8 c
syncUpdateOrder ();+ b$ ]7 l5 A9 X: I3 P, d! G
5 J- L- d+ C& [0 a ?& }1 ^
try {
4 ]- Q7 K! t& |& a8 G modelActions.createActionTo$message ! G4 g& f) U' s0 a) q z7 [
(heat, new Selector (heat.getClass (), "updateLattice", false));: r3 X9 [- R2 O0 g+ o0 w' c
} catch (Exception e) {
9 P! S ?9 _9 c) @7 ]6 t3 } System.err.println("Exception updateLattice: " + e.getMessage ());
, B9 J1 u; b0 j6 E r }7 o; }- U3 Y( y% Z
7 ?& e7 l) S$ [; ]2 w
// Then we create a schedule that executes the
9 Y# z1 T- b0 z" z) R: R // modelActions. modelActions is an ActionGroup, by itself it
9 W0 H% ]0 w/ w& c // has no notion of time. In order to have it executed in) E4 X( Q- j& k7 s$ ^! w0 x
// time, we create a Schedule that says to use the
3 r/ c$ H* h5 B. T) B+ A0 ]; X) ` // modelActions ActionGroup at particular times. This" O4 }! Z3 P% u8 C! L) [/ @7 A
// schedule has a repeat interval of 1, it will loop every
, ^$ p d, v4 x // time step. The action is executed at time 0 relative to
8 @; T g8 n( d# z // the beginning of the loop.
9 t/ L6 w. @- @# k* `, V: P7 ~) i
// This is a simple schedule, with only one action that is( f) J2 ?- B. G) [+ O
// just repeated every time. See jmousetrap for more
" _4 f" C# M3 N0 m; N // complicated schedules.
8 [/ B, d4 @8 t- q, \ ( X# V6 D$ |( v1 {# I: _6 C6 n
modelSchedule = new ScheduleImpl (getZone (), 1);
4 e4 E5 ^3 h; S: k: t" \' u4 h modelSchedule.at$createAction (0, modelActions);! m0 Y/ D5 U3 a1 J9 e4 c
4 Q [( Z' J& q5 s j, f1 `
return this;
k: z4 H' Z7 d4 t } |