HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( n6 x* V5 X. K8 }/ e
" W5 h/ H$ g' R+ R5 e1 M public Object buildActions () {
K! q: Q" L' I9 B super.buildActions();
& V' k2 v! h: a % `5 |5 x6 F. s/ `' S) l8 C, F
// Create the list of simulation actions. We put these in
9 ~% {+ X& D$ T3 F // an action group, because we want these actions to be
, o7 `5 w0 {0 f: _ // executed in a specific order, but these steps should) j5 `* |+ q$ C" _2 B
// take no (simulated) time. The M(foo) means "The message
! A: f* C( Y3 K/ N6 U // called <foo>". You can send a message To a particular
' G. N1 N0 R/ ^. s // object, or ForEach object in a collection.( p. e: U3 v1 F; o* _7 v9 H
& r; c/ }, T f4 {3 m // Note we update the heatspace in two phases: first run7 h& \* p+ t$ F# r) S9 x9 `- E L
// diffusion, then run "updateWorld" to actually enact the
8 M# Y# u0 l. i0 y. A4 } // changes the heatbugs have made. The ordering here is
h' X# A5 r5 n+ ]4 s // significant!5 G5 z# x7 ]5 k ]
) w9 e2 A! H9 k
// Note also, that with the additional
1 F: r9 a: S. { // `randomizeHeatbugUpdateOrder' Boolean flag we can2 ~ b# V, s/ v& H
// randomize the order in which the bugs actually run
$ O8 r! R% i4 Y. R8 m // their step rule. This has the effect of removing any
/ n3 ?; F- d% N1 u' L // systematic bias in the iteration throught the heatbug
: b- n. G5 q) Y6 l; K6 [1 ] // list from timestep to timestep0 r; Z7 D5 m% s0 ?
X' A5 h1 K6 ^3 a# t
// By default, all `createActionForEach' modelActions have. o9 {3 T9 Q# J
// a default order of `Sequential', which means that the0 W# `! k4 f: U3 k7 E
// order of iteration through the `heatbugList' will be
' b4 y7 V1 W) E% G2 ~ // identical (assuming the list order is not changed
& V5 A' N) [/ I5 B // indirectly by some other process).# M$ V. c) M/ q) F0 d% }/ ~
) l$ ]3 Z/ |' a8 n0 e% a
modelActions = new ActionGroupImpl (getZone ());
0 h1 a* D0 C# `
7 M: i8 l; y- A& @$ V* ] try {
5 ] B' a6 q$ f0 h% Q1 i modelActions.createActionTo$message: |. f, X, q) }4 B
(heat, new Selector (heat.getClass (), "stepRule", false));9 d& S2 q& ~& o O
} catch (Exception e) {
& s" T. k7 _) m$ d3 O System.err.println ("Exception stepRule: " + e.getMessage ());, N q: p2 x' \
}
# w: f1 p' L, O1 |- ?8 G, X
6 K9 B& ^- J5 b4 j5 L6 b, M try {
/ I6 j: L3 |% H- \/ ]: f0 O2 c Heatbug proto = (Heatbug) heatbugList.get (0);6 e. I. [! Y" ^ q% I3 L6 s5 T4 P- u
Selector sel = + D# O7 H: ^, }, P* P1 J
new Selector (proto.getClass (), "heatbugStep", false);+ b: N% t1 ?' A/ u
actionForEach =# u0 V& A6 {! m* V
modelActions.createFActionForEachHomogeneous$call
?# D# O' {8 Z. H" ] a (heatbugList,' T$ F8 O6 E4 R# c
new FCallImpl (this, proto, sel,
R# A- e: }% m+ m, ~ new FArgumentsImpl (this, sel)));
' @. G: W9 o7 O; j } catch (Exception e) {
2 N9 `! P3 \5 D e.printStackTrace (System.err);
* ]1 p# `6 S+ s$ M2 D5 A. c }
; ^" ?7 q r \5 R2 _ : n* E# U# l& h$ ?4 I
syncUpdateOrder ();2 a9 E4 v( h, ?$ w
# s2 M1 O3 B! x
try {3 R% V; F, F6 ~
modelActions.createActionTo$message
. F* z& @% W" { (heat, new Selector (heat.getClass (), "updateLattice", false));2 }9 m( N8 n% f m" Q
} catch (Exception e) {
; I# u m$ Q9 y) ? System.err.println("Exception updateLattice: " + e.getMessage ());& w9 k. G- Q" t/ m9 _' a: ~
}8 q0 f' Q! d$ x
. A; D6 N X' [& G. D& z
// Then we create a schedule that executes the
1 f- P* g/ M+ `- f A" _/ M // modelActions. modelActions is an ActionGroup, by itself it6 m' T) K8 p4 N1 z$ |' s4 N$ S
// has no notion of time. In order to have it executed in
+ `- p; |+ R+ W // time, we create a Schedule that says to use the$ h7 X: ^! r- c9 {& Y) ~% R& I* a" c" d
// modelActions ActionGroup at particular times. This6 v. z7 c7 G7 J' x, m9 \" A8 E
// schedule has a repeat interval of 1, it will loop every
# c1 W0 {7 q2 ^. R$ v* ~& i // time step. The action is executed at time 0 relative to; S/ b7 h- {) `4 n8 B c) g0 B
// the beginning of the loop.
. X5 b5 k: t! U
" t% w1 E/ p R) {, z8 A: F // This is a simple schedule, with only one action that is# g7 ?3 `: R; [* k! E4 K5 Q7 g4 s& ?
// just repeated every time. See jmousetrap for more
7 A+ ~7 x \) k+ F" F' _ // complicated schedules.
: M' u1 |# x9 V' L/ F. C / C# Q h+ F* |1 O X# F
modelSchedule = new ScheduleImpl (getZone (), 1);" H k/ d7 d$ b. r* d, k7 R
modelSchedule.at$createAction (0, modelActions);# z0 z3 f) I& Q( G
0 Q9 r$ I! u; ]$ p4 v& }: S return this;
0 `! _5 F* n+ c) S$ V+ b2 S } |