HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; H, E1 W' [! D
5 Q% b, p- P9 d7 ?! n! W5 m public Object buildActions () {
; W0 t# S# y+ t9 m super.buildActions();8 |4 {" v; o3 B- {0 a1 W
, R- Q2 [* W- g4 M' u; I
// Create the list of simulation actions. We put these in
% z& a" _# X2 E) m* U1 a. U // an action group, because we want these actions to be2 l! c/ u- p; N
// executed in a specific order, but these steps should9 D" X5 L) b# s& d9 H* A7 C
// take no (simulated) time. The M(foo) means "The message
& z) W2 |9 Y( I8 [* Q // called <foo>". You can send a message To a particular2 k/ h: ^8 X ]& |
// object, or ForEach object in a collection.6 v7 u# \2 G4 t- F( ]9 O, k i% `
& b/ y! t+ s5 D: F5 C9 s* C9 @ // Note we update the heatspace in two phases: first run( P+ u2 b" }" P& [6 N% G8 N; ?/ N% W
// diffusion, then run "updateWorld" to actually enact the
* ?2 A. M1 `5 _8 D" o0 [. | // changes the heatbugs have made. The ordering here is. O8 a$ b- k* t- T1 R
// significant!! X! B9 I: A9 d! G1 y
8 D# V( J9 C9 Z5 d& O0 s4 x2 K
// Note also, that with the additional8 V6 s- P. H1 W2 E
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: m N$ x8 V% D // randomize the order in which the bugs actually run8 t# a9 C* E8 `1 b4 L% E
// their step rule. This has the effect of removing any
, B( S$ j" ^* o, F // systematic bias in the iteration throught the heatbug
( Y7 G/ V2 q5 X" j, z // list from timestep to timestep; Y3 m% I1 p- J! `; g! t) e
0 N2 T, a/ d) S$ \ ` // By default, all `createActionForEach' modelActions have$ @. s- }: k1 x
// a default order of `Sequential', which means that the$ d& [' ?# r* K, K* f
// order of iteration through the `heatbugList' will be
8 Q1 p& k- Y5 K; B* q // identical (assuming the list order is not changed- y ?3 r" M2 {
// indirectly by some other process).1 o6 c6 e4 E9 g; w
. k; z. R, Z0 j4 S. \8 T- _; c1 e
modelActions = new ActionGroupImpl (getZone ());
) s N7 H, d8 O2 M! M8 g
5 O% g+ M- `5 y% F$ q) s try {3 ~9 ]7 U. B. ~! I1 g1 a; H
modelActions.createActionTo$message3 m6 F# p. b) W9 V
(heat, new Selector (heat.getClass (), "stepRule", false));; y) ]* Z0 R+ [5 x* A( T
} catch (Exception e) {
# L1 T8 r' ^2 A; R( H5 ?6 K/ e System.err.println ("Exception stepRule: " + e.getMessage ());
9 K8 p7 o/ |) O" P9 Y0 v2 ? }
- R! p) Y" u! D) ^$ [4 U/ Q& f, f/ q! v5 @, ?
try {
6 v- U7 k2 }* l5 b# j Heatbug proto = (Heatbug) heatbugList.get (0);
7 T: _8 x" W6 T( [% C) Q Selector sel =
5 D2 n3 J- \$ _3 v9 W new Selector (proto.getClass (), "heatbugStep", false);
' J! [+ l: ^( m, L. m! H actionForEach =
4 k, E4 I, V, N: j4 R3 S h9 o modelActions.createFActionForEachHomogeneous$call
% P2 h$ z, `$ d; O _ P1 i (heatbugList,( @, }9 _8 }( N( p( x
new FCallImpl (this, proto, sel,' v- w/ F% G/ r% m* V/ ^% e! ]( P
new FArgumentsImpl (this, sel)));
$ g n! @5 Q$ p: S4 _ } catch (Exception e) {, c, P( D3 }$ B7 j4 g% [1 U* B4 r
e.printStackTrace (System.err);. |# L& u8 X' F
}
* F! s5 v9 S: l+ w
~! u C& z* S5 V- s4 R8 B syncUpdateOrder ();
X3 R- {, ^* q& y6 }6 Y% |: _5 I* A8 K$ m, h, `9 F
try {
, p7 P8 _2 ^( N modelActions.createActionTo$message ) ~/ m+ s' C5 |) N, l4 }7 u2 R
(heat, new Selector (heat.getClass (), "updateLattice", false));
- q& u. ]% ~" Y% C5 q1 d' E- r0 w# E } catch (Exception e) {3 T# G$ r; |8 U5 k
System.err.println("Exception updateLattice: " + e.getMessage ());
' R2 R* D7 }' ?. r }) F5 n1 {! ]( `5 C( W R
6 p% j8 T. M* Z // Then we create a schedule that executes the
' q Z# F+ E- @1 |# f" }: B // modelActions. modelActions is an ActionGroup, by itself it
5 Q1 o8 a# ^4 L' f. X9 C: G6 T // has no notion of time. In order to have it executed in( j& g! L; X, X" b% P: J
// time, we create a Schedule that says to use the3 x* f' R; m e6 f3 w
// modelActions ActionGroup at particular times. This
9 x* g* e; d) c. l // schedule has a repeat interval of 1, it will loop every6 e7 }. z @9 I" ]/ r
// time step. The action is executed at time 0 relative to
: u2 I' l! _3 @! V4 m3 S // the beginning of the loop.% O5 g9 q" t! u# I `/ q. s+ h7 }5 j
# ?2 l5 ^- e- [1 B8 ~: ]3 e* B // This is a simple schedule, with only one action that is# V1 @# b/ L; |2 k' W$ m+ m! [' g
// just repeated every time. See jmousetrap for more
( h _1 y5 ?& u3 ?1 N' X7 V1 n // complicated schedules.
/ \ m1 C3 w6 k; t2 x
$ }; t. N0 Z) v; G modelSchedule = new ScheduleImpl (getZone (), 1);- |+ \, N/ S, G& [
modelSchedule.at$createAction (0, modelActions);
" i* [/ x" i1 Z
9 \% h4 f1 |& U+ U# p: ~ return this;
3 N& M h, N- _8 S8 D0 |7 L } |