HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 c% X2 d: Z7 z j
4 k2 j- Q, T* P5 ?) w, L* x0 ~( t. j public Object buildActions () {
6 ^7 n+ }; B2 w' ^' J super.buildActions();
$ l8 e# m* d4 T& o5 h
" o! b+ q3 i7 V; y // Create the list of simulation actions. We put these in1 v3 C+ G5 ~) j
// an action group, because we want these actions to be# S4 U7 R6 J0 S. t# `" @
// executed in a specific order, but these steps should6 I# z9 q7 f7 M1 @+ \+ p& m" ]
// take no (simulated) time. The M(foo) means "The message: y7 A: Q2 B, T2 `7 K- f& }- q
// called <foo>". You can send a message To a particular/ z2 \6 Y0 @5 K/ S( ]# `- r/ Q& i
// object, or ForEach object in a collection.
( `4 `, o) X5 f+ H# z 2 I& I; t i) x: L* _9 _. T
// Note we update the heatspace in two phases: first run2 k& \% D: \2 f) Z% t3 m
// diffusion, then run "updateWorld" to actually enact the
' [) ]' [( P ?: h // changes the heatbugs have made. The ordering here is& \6 u" T0 l* Y8 R) O3 n8 T1 l
// significant!
6 ]9 e. [6 A! \8 x; T$ k9 P- i
6 g% J" E) j0 x // Note also, that with the additional
9 J$ c( q7 ^3 t6 y6 G1 I/ x // `randomizeHeatbugUpdateOrder' Boolean flag we can: W% W/ Q2 Q) L0 A
// randomize the order in which the bugs actually run
' d8 X5 s5 N" ?- h- x0 H2 c // their step rule. This has the effect of removing any
% a+ m. N2 c) p5 {3 o+ c" i // systematic bias in the iteration throught the heatbug: ^1 }* ~- o0 Q+ Z/ @6 L, `8 d/ I
// list from timestep to timestep
# S8 } q1 w/ d) [. y: j ) O9 i* f8 z! J) q$ ^
// By default, all `createActionForEach' modelActions have
. K+ h% H' a* F& l // a default order of `Sequential', which means that the4 z6 k$ h3 m L" [
// order of iteration through the `heatbugList' will be
! A; Q* O. T0 h" o" W // identical (assuming the list order is not changed5 N, o8 p- O% P) d; P3 ]: a
// indirectly by some other process).7 o& U0 j" `% z% S
& z R, n0 U4 p* b8 |' y
modelActions = new ActionGroupImpl (getZone ());
& O; v' o/ C; P- r( n
, d- |/ K+ a7 U% S( x try {
# r2 `- ^6 i t7 x% z" T modelActions.createActionTo$message1 n& x& T: \# v+ r$ F N; u
(heat, new Selector (heat.getClass (), "stepRule", false));' d( H0 x! h/ v! d" _4 f
} catch (Exception e) {' E# b) V. Q' q' T) U& D8 C9 x
System.err.println ("Exception stepRule: " + e.getMessage ());
0 \& R$ [" K! v5 d4 y! @ }$ W C* t# j0 G+ L G* l# v a: V# d
0 R: Y ~" e! Y8 C# C( o [ try {& [ t2 F# A0 T8 W, m4 w
Heatbug proto = (Heatbug) heatbugList.get (0);8 @# P$ b( R8 y- k( _1 h
Selector sel =
1 X2 [' m( [# n3 z5 c" H: {4 z new Selector (proto.getClass (), "heatbugStep", false);" P( i) |8 E" Q1 C
actionForEach =
. \% t8 q9 T% i$ L1 i2 |0 h& q, G modelActions.createFActionForEachHomogeneous$call- T' @" O, P% z) U4 m) c
(heatbugList, y% l1 n# b" j: Q
new FCallImpl (this, proto, sel,# F1 `$ Q" h4 W1 K8 @* N2 s2 r
new FArgumentsImpl (this, sel)));* i# W* t1 \, {$ q. o* o
} catch (Exception e) {
) @7 \9 ]6 q6 V# s& ` e.printStackTrace (System.err);
8 j. z+ ^) ?8 n5 |6 ^ }" H" v1 `8 m p* w5 t
O( R0 a/ V" F syncUpdateOrder ();
8 c- ]/ N8 l& c- x3 j
" q+ W y, B, m7 I' Z& W, ?$ Z try {
; z& N/ `1 h* B modelActions.createActionTo$message ! M" H( @+ U# G( Z
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 G9 R' D7 B! v/ U5 _" {0 H } catch (Exception e) {4 q; N- X; H" W2 `$ G ~5 S/ A
System.err.println("Exception updateLattice: " + e.getMessage ());
: L! ~2 w" B. f }
+ a+ N& w4 v& x' u4 c' b1 `
) x; |0 v( n' s" F) W4 M- v // Then we create a schedule that executes the7 y7 J% V7 [1 j, I
// modelActions. modelActions is an ActionGroup, by itself it
3 e& h+ I0 ?; D! u' r: v/ U$ H // has no notion of time. In order to have it executed in) }8 o [. p2 O$ D
// time, we create a Schedule that says to use the' b% y2 E4 W' P% a
// modelActions ActionGroup at particular times. This
! k8 v- I. l( I) S! p // schedule has a repeat interval of 1, it will loop every4 n0 a$ \5 e* X6 l2 m; @
// time step. The action is executed at time 0 relative to
, B4 Q [% P2 L' `! e // the beginning of the loop.
. p% i" b7 e3 Q
$ `' j4 [1 m6 E // This is a simple schedule, with only one action that is# c- [ _' y% T# d9 }! |
// just repeated every time. See jmousetrap for more4 _5 T& m- \$ x
// complicated schedules.
" q& T2 M7 j& @) W' M2 r( q ; ^- v+ q9 u' a1 o
modelSchedule = new ScheduleImpl (getZone (), 1);( v0 U4 t6 m* `
modelSchedule.at$createAction (0, modelActions);( R6 o1 o d6 H7 C4 d6 M* f/ X
6 p5 o' f" n% w# {/ g return this;
; [* {2 p) l% ?6 Y3 p/ E* d } |