HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* U3 a1 h* W' n+ j& }
+ a# \5 V* ]( A! F0 U+ r9 U public Object buildActions () {$ d- E/ d8 Y3 a' c8 h$ I+ G& L9 k: s; {
super.buildActions();
# I i6 o% }1 V; \3 e3 P ! r+ b1 Q9 J# a, Z: I+ f
// Create the list of simulation actions. We put these in8 \( A Z1 P E
// an action group, because we want these actions to be$ E9 a# |& ]: |- n% ?
// executed in a specific order, but these steps should
! u! {, Z" ~5 U3 n6 W7 y // take no (simulated) time. The M(foo) means "The message4 u9 T" U) U2 m/ _0 x" @
// called <foo>". You can send a message To a particular }7 I7 I) U. B
// object, or ForEach object in a collection.7 g; H ?- Z" ]. P. t- b x
/ v1 T6 q& R0 {4 s6 R! H // Note we update the heatspace in two phases: first run
, X2 v$ x% L) C* z) q, ` D% m" ?' ^ // diffusion, then run "updateWorld" to actually enact the' _' F' a. `: p" N+ T
// changes the heatbugs have made. The ordering here is/ A( p; x' p# x2 N S$ m
// significant!1 Y) S6 g* I6 ]* j0 S5 S
4 q; S7 ~6 |) r
// Note also, that with the additional
# m& U0 D# Z- h; K2 M // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 `6 P0 l9 ?$ a F# a& B // randomize the order in which the bugs actually run9 j$ b3 M% F/ S0 {) {
// their step rule. This has the effect of removing any
$ S [/ H+ S! o5 t/ |% a) ^( x // systematic bias in the iteration throught the heatbug0 ]" b8 l. ?- u9 a- q, T, E: A
// list from timestep to timestep
. Q3 F/ ?. E: H0 N& u
7 t& b+ C0 a5 w5 g // By default, all `createActionForEach' modelActions have
: v. S$ R% h" R // a default order of `Sequential', which means that the9 L3 W- {$ P& c2 A/ b. H& b
// order of iteration through the `heatbugList' will be' Q: Y, H1 h. f3 j% R' U3 J/ p# k: f
// identical (assuming the list order is not changed. n, K0 {3 f' P3 |$ e
// indirectly by some other process).
* I3 W* g, e0 T; W7 Y
1 W) ?+ z2 n; I6 v! f+ @# m modelActions = new ActionGroupImpl (getZone ());
% x) ]: X/ m3 U/ k) ?& |9 O: ?0 |! _
% ~4 w2 V0 J' h% u4 x+ p( p try {
/ Q# I/ L2 c% C& K- B+ l modelActions.createActionTo$message/ {' C# j$ T6 _# A
(heat, new Selector (heat.getClass (), "stepRule", false));
9 \5 G4 z% w( X } catch (Exception e) {
, M* N5 F5 {; }" T: V# R$ D! ~ System.err.println ("Exception stepRule: " + e.getMessage ());
9 H! a8 s+ H u+ z" z* Q }
: _2 s# Q. v! S
# N& t6 ~! D0 E1 Q! ]3 ` try {
! w1 g+ R9 ^# w1 \3 d Heatbug proto = (Heatbug) heatbugList.get (0);* j" d: T4 }! A3 ~6 O) X
Selector sel =
5 y6 X2 G+ _% [/ ~0 w) q% _/ l, Q4 V new Selector (proto.getClass (), "heatbugStep", false);
. x' k# v+ I n' r& A; }* M2 |7 Q3 m/ v actionForEach =
6 E2 Z8 D7 z( X8 [, c) Z2 X modelActions.createFActionForEachHomogeneous$call
, s/ Y }+ P) E h. W0 y (heatbugList,
3 _; M& @- M v0 H% `4 f new FCallImpl (this, proto, sel,
6 ?; D- y( e6 {" ^; P2 F8 Q0 o& c new FArgumentsImpl (this, sel)));
$ c/ m, d `6 \: e% M& U* U J" c } catch (Exception e) {. W. a. R/ V( B$ R- E! ]
e.printStackTrace (System.err); O' ~ [1 l5 g! H% e* R
}
7 a! `* g4 M) v
0 f" Y& A, W0 R+ l$ N+ Z: K syncUpdateOrder ();
4 r8 ?$ L* P* ?" I( y3 ^0 Y* l2 `3 q3 [
try {
# L# h# J. O0 P' x modelActions.createActionTo$message ) i& I7 i9 p" { r
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 o' i0 V$ e9 b$ l2 F } catch (Exception e) {
3 W) o6 } F3 f$ o; `+ |+ q System.err.println("Exception updateLattice: " + e.getMessage ());
. K6 p1 e: E* I" A1 t }5 [+ ] N) L1 w h4 D( W
9 Y, o8 p8 S& S5 ? T* u$ Q; Y% U" O // Then we create a schedule that executes the
' D1 ~. X( Y) k- u3 b // modelActions. modelActions is an ActionGroup, by itself it3 e4 h k# H. ]" y
// has no notion of time. In order to have it executed in
- @- M' ]6 ? C& D1 c6 V8 I // time, we create a Schedule that says to use the
) W) K* V; N; V, N" U // modelActions ActionGroup at particular times. This R2 h& n: M# U: r
// schedule has a repeat interval of 1, it will loop every6 ~7 G/ e x+ Q4 O" F/ d; k3 z0 `
// time step. The action is executed at time 0 relative to
/ F" v4 `' R7 K( O. O: p // the beginning of the loop.; o, V. p+ @3 }- M
3 S( e5 W( z4 i. ]. a/ C( W // This is a simple schedule, with only one action that is
& I' m5 Y0 l+ c8 |9 ]0 W // just repeated every time. See jmousetrap for more, q% g. N- W5 r' [
// complicated schedules.6 k) U* V, }) [0 I" v: k
) a6 |1 G6 {, u# N7 }
modelSchedule = new ScheduleImpl (getZone (), 1);2 O4 a: N) z. Z' @) S
modelSchedule.at$createAction (0, modelActions);
* a' k9 S) `- F8 C' x 6 g: G* P3 S0 }) ^) W f
return this;" G& b8 O$ y6 l3 ~/ z+ B; s% o
} |