HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; s2 F' V r* a4 D) w+ W
, w& |6 P* L7 u& I7 z2 s public Object buildActions () {5 J9 S/ a! I# O
super.buildActions();, B" R3 S/ G: J: ~. n1 H
5 _' S! }: N4 P( }& {" q Y$ c! l
// Create the list of simulation actions. We put these in' u9 W: L* O, ]+ q9 \* [% J
// an action group, because we want these actions to be5 Q2 a% E! s) T0 ?, k# A' x* |
// executed in a specific order, but these steps should
* }- Y5 Q% w1 h( x // take no (simulated) time. The M(foo) means "The message
E/ _! v, T" ?& h8 I // called <foo>". You can send a message To a particular
% {, P3 M! s1 t' ~ // object, or ForEach object in a collection.
8 z/ a& y V' f! O, D, j ; ]5 o* B2 N' q, n2 Z5 G
// Note we update the heatspace in two phases: first run: C \# V- w/ w8 G8 L" k O# @
// diffusion, then run "updateWorld" to actually enact the
) c q) f3 l$ C: }% f* m# _8 _ // changes the heatbugs have made. The ordering here is
4 w+ m- _9 G( @* C // significant!
: K) o1 {2 d. v! h+ q
8 `0 n5 l L7 z6 Y3 d // Note also, that with the additional, x3 Y% Q' l/ J' S" A3 _% d9 e
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 \) @- d2 M' U0 |( `0 I9 M
// randomize the order in which the bugs actually run
; b& z1 s; ^% r3 j9 x5 p6 o2 A // their step rule. This has the effect of removing any
* Q5 c. v7 r J. e* D // systematic bias in the iteration throught the heatbug9 ]- k+ |0 v8 q7 e. {4 N
// list from timestep to timestep/ e# N" e% Q7 C& y, ~$ p
9 }; \% I2 w6 @) {
// By default, all `createActionForEach' modelActions have' Z D1 {2 D' t! f7 m( _' n; m
// a default order of `Sequential', which means that the% L2 ^6 Y# S$ b# B$ o1 m* B% y
// order of iteration through the `heatbugList' will be
# t: ~" F4 n$ @0 Q% [, z: X // identical (assuming the list order is not changed
4 j! E1 ]) \1 U4 ~% F // indirectly by some other process).
& \* g9 A% _( o# [
m+ W7 E& W L: {6 a1 E modelActions = new ActionGroupImpl (getZone ());
3 L& E$ q: i0 K& K! }0 D0 J9 |7 B* ^* I9 G
try {3 k3 k! \& S. a5 F; m# H( A
modelActions.createActionTo$message
4 g% }% I8 P/ I( v- D! ?) s. ?6 { (heat, new Selector (heat.getClass (), "stepRule", false));- A/ x% a$ O, ?( q5 t. Q' k2 a! r
} catch (Exception e) {
. Z" `6 _& J# y' I$ n2 R System.err.println ("Exception stepRule: " + e.getMessage ());" Z- @8 t# O+ _& {& N5 L
}
& p. J3 i0 K, U
% u: e; Z$ T! [7 Q% Z7 n try {
" c: L ]: E8 y: e Heatbug proto = (Heatbug) heatbugList.get (0);
# F. ?9 l* `/ L0 w$ F* P, O Selector sel =
5 e+ Y4 F+ U- K- J i/ S new Selector (proto.getClass (), "heatbugStep", false);
. {9 H& a1 R, c' m actionForEach =: {+ b/ s* S) ]8 V5 ?0 R
modelActions.createFActionForEachHomogeneous$call! w: i* x5 m0 R0 `
(heatbugList,/ a; i, R0 z i8 z
new FCallImpl (this, proto, sel,
/ V) V- W$ ~" m5 H3 J) ]5 o! v new FArgumentsImpl (this, sel)));8 H* S, B/ K9 }
} catch (Exception e) {3 _/ E2 C$ [ c" o3 P
e.printStackTrace (System.err);
6 z$ j2 k8 p! y/ u4 o7 a+ ?, j I& F }
/ j9 r7 F/ X/ b, m5 _# T6 Q5 r# v
}7 F: q$ h/ ]% E9 u syncUpdateOrder ();
" X3 W0 f* Y: ^ M0 Q6 Y q
T; s# V1 c' g" e* a. Y3 v- K; V1 W try {
7 V; N& @; ]: i modelActions.createActionTo$message ' o0 ~; H7 g f# _ y
(heat, new Selector (heat.getClass (), "updateLattice", false));( |6 a0 D$ S" U: B, r
} catch (Exception e) {
% V o/ S5 c1 x8 m! h/ w9 t& n System.err.println("Exception updateLattice: " + e.getMessage ());; Z5 @, [$ H H8 K$ T
}
! [2 I7 p2 R2 O2 T4 m $ Y- D9 X/ t1 c' O9 ^- P) W3 ^0 v
// Then we create a schedule that executes the9 A& Q8 E# @5 L, W, h' x
// modelActions. modelActions is an ActionGroup, by itself it
: D/ B1 [9 P: Z6 d! S' y0 ~* K- f // has no notion of time. In order to have it executed in' ?: G! ?) M3 f, e
// time, we create a Schedule that says to use the
0 q, C( {, ~/ K6 X' z( q // modelActions ActionGroup at particular times. This; J8 w, _! N+ ]: e1 U5 f- i
// schedule has a repeat interval of 1, it will loop every, E5 Y9 m4 ~2 D# M5 j% o
// time step. The action is executed at time 0 relative to
3 z" s2 Q9 F( k6 f% [6 ? // the beginning of the loop.( I. y$ c9 W1 [" h" i, K
9 O9 i' r! {( ^/ W. i- t // This is a simple schedule, with only one action that is: Y: |7 r0 f- z; F- b9 L/ ?/ l
// just repeated every time. See jmousetrap for more4 Z8 k$ y/ ^+ o7 l# s
// complicated schedules.
5 O; g" L, o( \3 W" a
" |5 R( n" ^, X" z modelSchedule = new ScheduleImpl (getZone (), 1);
$ h L- s/ a1 [# _3 M modelSchedule.at$createAction (0, modelActions);
3 ? v/ h( y0 ]' W
4 J0 }2 X, Z% c# x* V1 B return this;/ @3 d) e9 Y. p9 a; i
} |