HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ l9 p( C! D) P$ ]4 {
8 c+ b4 U3 L. U( V$ B
public Object buildActions () {
" F' c, H+ R2 A8 A# P% n: u7 @ super.buildActions();- }7 o" L! e3 l& D
$ `, Z0 ]% y4 M8 n- R$ @5 {: K" V' L // Create the list of simulation actions. We put these in3 p8 [( V* f% q5 h5 g
// an action group, because we want these actions to be, a* |3 _4 j1 D7 f
// executed in a specific order, but these steps should
) {1 C/ B8 j$ D& A2 N% O // take no (simulated) time. The M(foo) means "The message! T5 ~3 F3 M" j
// called <foo>". You can send a message To a particular. d5 y6 b, c' y, h# `
// object, or ForEach object in a collection.
. f3 o! G4 M% P g4 ?, ]1 _. ^: c + W+ @) W' r- r5 K
// Note we update the heatspace in two phases: first run, ~* |, k, }3 c1 v0 d7 ~8 k7 v+ x
// diffusion, then run "updateWorld" to actually enact the
, Y0 [6 i0 s- l7 h // changes the heatbugs have made. The ordering here is: K" f2 D* H1 Z7 B4 G
// significant!" J. c3 Z% I4 V% \" b; f% g
% E4 Q e2 [3 Y5 J$ w
// Note also, that with the additional
' Q: |+ N$ G5 ^/ P" g' Q! O) \8 I // `randomizeHeatbugUpdateOrder' Boolean flag we can
# n% ]* x7 `; `4 A0 ~ // randomize the order in which the bugs actually run
8 `" z0 o4 x0 M: D# Y$ o% J // their step rule. This has the effect of removing any
& E4 `2 j- j. | // systematic bias in the iteration throught the heatbug
4 n4 l2 {% x2 ^7 V1 K8 B8 I // list from timestep to timestep
0 c0 C& E- ]) [$ X: q3 s+ R ( y3 q6 _; Y9 O5 N/ } ]: x
// By default, all `createActionForEach' modelActions have( _- m% e/ B0 |! A* c
// a default order of `Sequential', which means that the
* d0 W0 W% f( ~+ U- l/ q2 | // order of iteration through the `heatbugList' will be
1 c2 A4 W) c2 D5 s4 U+ P" b // identical (assuming the list order is not changed0 i; u3 H2 d; B9 d M
// indirectly by some other process).
1 P" a& k) f8 ]7 I 3 R" j1 z# f6 V$ W7 `7 b2 M
modelActions = new ActionGroupImpl (getZone ());4 a, f. |+ c- F' _+ T4 p# u
4 i0 C+ R2 s2 v- K9 l. d1 B try {% q0 M1 E( P! }( |0 k6 Q
modelActions.createActionTo$message( G3 c5 i. U9 b* j) m
(heat, new Selector (heat.getClass (), "stepRule", false));; M! S1 F* F; U
} catch (Exception e) {( H: x2 o8 J$ f' g8 `
System.err.println ("Exception stepRule: " + e.getMessage ());
' U' l$ d8 [# ~4 v } f$ g& u% ~# Z
! l1 R+ b$ W) m6 I% D) c7 F try {
- R( ?2 F+ e0 V Heatbug proto = (Heatbug) heatbugList.get (0);& o9 U! I! D& l: H
Selector sel =
- r) T) K9 z9 t& a0 x u new Selector (proto.getClass (), "heatbugStep", false);
2 T4 e, B) x }& } P actionForEach =
6 d3 A) k# k( Z; o: w5 i modelActions.createFActionForEachHomogeneous$call
: o; _( f) ~' G0 X: R! {1 n (heatbugList,1 P, l$ G/ ]+ N4 i0 p
new FCallImpl (this, proto, sel,$ J8 N3 h) P T; Z1 q6 Z
new FArgumentsImpl (this, sel)));
7 y* \2 R! o( z* k) S3 d* A } catch (Exception e) {
" d; r$ r. u: n" w( p' H, F e.printStackTrace (System.err);
1 G! @5 E, r/ Q: Q* Q2 V, c' j }/ [" |5 {& @9 U) a" S- N
* t. C( y" f/ o! F$ K+ v3 h
syncUpdateOrder ();( ^- z2 K% s: X, q
, W7 Y8 r% W1 f+ ?9 p. V9 i8 m* ^
try {$ |) g+ T) k+ {8 K
modelActions.createActionTo$message 9 m1 X+ z! N# O: c0 O; f
(heat, new Selector (heat.getClass (), "updateLattice", false));7 v, \: `4 t& H
} catch (Exception e) {$ L9 N# s; d+ e4 c" L; o; k
System.err.println("Exception updateLattice: " + e.getMessage ());5 u1 j6 z4 [; c: k8 x* G
}, a L0 c5 V4 u
% Z- D1 C: n( _
// Then we create a schedule that executes the
* g3 ?: t! }6 Z. ^9 _ // modelActions. modelActions is an ActionGroup, by itself it0 j! i$ d) u% X
// has no notion of time. In order to have it executed in
) l! S* N) C/ S* O1 U // time, we create a Schedule that says to use the
: h4 A) t1 g& l: j // modelActions ActionGroup at particular times. This9 a( d- I5 V9 q# t2 }8 I& E
// schedule has a repeat interval of 1, it will loop every
4 g9 G# C( F) L" O' d+ G // time step. The action is executed at time 0 relative to
# o$ t, |$ s a! t2 | // the beginning of the loop.
! z8 L7 d/ h7 c% h7 b# p$ r# C6 y1 J4 T, j4 M: M
// This is a simple schedule, with only one action that is
4 ^9 B" V, k$ O ^6 ~: j // just repeated every time. See jmousetrap for more
5 }, d6 E% ?1 e2 P2 M // complicated schedules.$ W9 J* ?7 l; Z6 B
: f% p f6 a4 P1 q
modelSchedule = new ScheduleImpl (getZone (), 1);
2 H( i; N: {' @. c$ g modelSchedule.at$createAction (0, modelActions);
# o6 d# S: Q6 ~
7 R3 u- i I" V- `. u$ { return this;
5 q1 f! {3 u, e$ ], H$ u% K } |