HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 k: i) U: G, L7 C u
* v# r; s' G% Q& C! {. t+ \ public Object buildActions () {2 G, d- r" ?* i: L" e+ F
super.buildActions();
* W6 w/ S& S$ z+ |# @- E: v . X7 S& k' {- H
// Create the list of simulation actions. We put these in: d! j1 s, W+ {1 [# O9 @$ S' A* B
// an action group, because we want these actions to be
* |& i3 T: J% V7 G' M1 h // executed in a specific order, but these steps should3 D1 J! I Z1 d" ]
// take no (simulated) time. The M(foo) means "The message r* @* w# ^, T- P3 J; g- g" l4 o0 k
// called <foo>". You can send a message To a particular
( D; G7 c, {& q) D( n# t9 L // object, or ForEach object in a collection.
( A& U9 O# R& o% r! P+ h+ d
" G3 ~* F' o% Z7 R5 h // Note we update the heatspace in two phases: first run. }5 I7 F8 {, d$ x A5 W
// diffusion, then run "updateWorld" to actually enact the7 D" i% ~ r. d8 y) S
// changes the heatbugs have made. The ordering here is7 ^! }6 o% _8 U4 u+ b4 w( O- C$ q
// significant!
8 V, F& f0 s% y& [2 X- c
! h" b% x! P' t8 K' ?; r // Note also, that with the additional# A6 P; o* G0 y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" I6 ^4 V3 u1 w; O& E$ z // randomize the order in which the bugs actually run4 S( U% E. f* k: g
// their step rule. This has the effect of removing any
: u4 j) \+ R. P- i2 l2 t // systematic bias in the iteration throught the heatbug/ t7 w- U1 z* ?" p( A4 c
// list from timestep to timestep
: g9 ?0 |4 J/ \0 j$ |& g" d B( p
! r! w/ g& S7 \3 {* h; @ // By default, all `createActionForEach' modelActions have
7 P9 g9 P# i9 n- v6 x5 u+ R // a default order of `Sequential', which means that the0 n7 [8 f* t$ V9 g/ ]" P
// order of iteration through the `heatbugList' will be
$ D( B. L' \4 v6 {! Y4 x // identical (assuming the list order is not changed
6 L0 P" t* n8 i& x // indirectly by some other process).
+ N3 Q/ m% K4 y$ Y- h 1 ?# r; z& Q( u8 q9 I" u* z, g% I
modelActions = new ActionGroupImpl (getZone ());
: Z+ {* Y4 G* d, N9 a+ X& h" j- _
try {5 P3 Q9 d# z8 p! _- x- ~
modelActions.createActionTo$message* Q# B% z5 y0 i: E1 L0 M
(heat, new Selector (heat.getClass (), "stepRule", false));
7 [$ V' F. Q5 \+ _/ d$ W% V } catch (Exception e) {
' r& E! C Z. U System.err.println ("Exception stepRule: " + e.getMessage ());9 H% c) J% c5 W, H( p% [
}9 W S+ K$ ?0 I6 W" M1 S- I0 Z8 Z
7 u% U: I' W( `. v try {+ O8 X0 J1 S# p; V3 ]
Heatbug proto = (Heatbug) heatbugList.get (0);
/ F* X; J. I/ n Selector sel =
' M9 V- j* b3 X, C* X2 |+ z* [ new Selector (proto.getClass (), "heatbugStep", false);
4 g, Z) P: o6 V4 A% y actionForEach =; N4 A( V c: Q; q
modelActions.createFActionForEachHomogeneous$call! `3 Y5 B8 E m9 o+ V3 @) i- ^7 C; S3 v
(heatbugList,( b; m" K, y0 e, A+ }
new FCallImpl (this, proto, sel,7 b6 T& r7 V$ _& D
new FArgumentsImpl (this, sel)));
# }- D E5 K {( {# d- E* V8 v+ r } catch (Exception e) {4 c# q/ c' v; R7 ]
e.printStackTrace (System.err);
( E" r% m, }" u. I }9 D: g" `5 |+ R( B9 { w; ]
6 F0 Z$ [3 z5 X3 }
syncUpdateOrder ();
8 }- h6 r6 G0 ]. Q6 K
7 {; l+ @7 p7 V5 ~) w0 S8 T5 A try {
7 J* @# G* ?3 b" _) k modelActions.createActionTo$message
0 v6 J0 j0 L- I3 `3 z @ (heat, new Selector (heat.getClass (), "updateLattice", false));& u7 _7 {% X! f
} catch (Exception e) {
' n# o4 I, m' }# X/ K System.err.println("Exception updateLattice: " + e.getMessage ());# ^1 K# x7 {0 ]5 l0 |' T
}: @: m9 A; i: P' W3 s/ [
. _$ @( A; _. `4 L2 o$ L4 q
// Then we create a schedule that executes the
, z" X7 R/ ?# ?# V4 j( D3 {! G // modelActions. modelActions is an ActionGroup, by itself it# Z" Y9 k6 P. N# Z2 {& T- x
// has no notion of time. In order to have it executed in. {0 w7 M. A: T- |
// time, we create a Schedule that says to use the
8 C/ P3 Q8 R1 [ s // modelActions ActionGroup at particular times. This
B, T: y9 B% g3 P // schedule has a repeat interval of 1, it will loop every
- D- K% ~. X) z2 C d // time step. The action is executed at time 0 relative to
- r3 h& e; Z- T // the beginning of the loop.
) R+ u1 U9 C% L" B% W* {1 B
0 k: C, m$ A; ~! m' [0 o // This is a simple schedule, with only one action that is& V7 e5 m* L0 V @5 M' E
// just repeated every time. See jmousetrap for more4 L* t6 A/ |9 _) N* a% V9 q/ V
// complicated schedules. g |, M7 V6 }& l6 \( V% }
& I" ]9 ?3 Y( B! ~" `
modelSchedule = new ScheduleImpl (getZone (), 1);
( P+ m6 o& C) a modelSchedule.at$createAction (0, modelActions);
$ s* N- C7 L+ R' F9 H
6 D2 o+ J8 |. N3 S' }) f9 ^: r; @ return this;; a& C! e9 {5 e8 _, w4 x' ?/ u
} |