HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 `( l# {& t& L4 q# j
+ m+ T3 r% c7 F: R public Object buildActions () {
6 |1 Z0 Y' B) j) f super.buildActions();
; O, Q5 `% B z
+ Q! Y& s$ }! N% K9 F: H) ^# {! E // Create the list of simulation actions. We put these in) L+ X7 _+ x% Y, Q2 ]
// an action group, because we want these actions to be4 U: W% w. [6 L% C
// executed in a specific order, but these steps should7 t- b6 E d; O6 l
// take no (simulated) time. The M(foo) means "The message
4 O- p0 b- f5 M D2 {) V+ p // called <foo>". You can send a message To a particular
: T# S4 H+ S0 t9 r // object, or ForEach object in a collection.
! \. `! S& A$ c. M3 k& z / ?/ T0 a* G" p& U
// Note we update the heatspace in two phases: first run
. f! K H1 ?/ ^/ V0 r3 T8 q // diffusion, then run "updateWorld" to actually enact the( ~6 j% A1 H! q, ~$ h, j
// changes the heatbugs have made. The ordering here is( ^- Q2 X/ h$ t6 o. S
// significant!
9 G) B/ T" Z: ^ % j. B0 Y& {) { Q
// Note also, that with the additional
$ w* [; x, c+ A. E* F // `randomizeHeatbugUpdateOrder' Boolean flag we can3 f9 x9 m; I H: A
// randomize the order in which the bugs actually run
# T; M( v" }+ \5 J1 V* s // their step rule. This has the effect of removing any
. @1 H9 k) f! E$ k" j. N7 b* E) g // systematic bias in the iteration throught the heatbug
; V! E" Z1 L7 p7 V. N2 d // list from timestep to timestep f" v, Z {% U: B6 @. ^" P2 q" [4 T/ B8 o
5 ^: d g q* M. v5 A8 ] // By default, all `createActionForEach' modelActions have
& ]' ?5 ^' i. N& L) {' N( u, c0 [ // a default order of `Sequential', which means that the5 U3 X! h$ M B4 Z
// order of iteration through the `heatbugList' will be6 D7 w) q1 s7 y5 L# `
// identical (assuming the list order is not changed
- ]0 U& E( O4 S: K ] // indirectly by some other process)., C% _5 e9 ~, q% w
& p8 x; x! E1 N$ o5 M
modelActions = new ActionGroupImpl (getZone ());$ W6 t' ?7 h% ?, X& J
7 `1 e1 O7 D. _5 o' i. Z, c
try {
K: K( `0 @( l( L modelActions.createActionTo$message
5 H; B8 ~: r* n (heat, new Selector (heat.getClass (), "stepRule", false));
_& c5 a1 m# A+ E- p } catch (Exception e) {
$ P. P# P' _& [& R System.err.println ("Exception stepRule: " + e.getMessage ());* @5 {, j+ ~2 G
}8 ]' @" B/ p, s& T7 ]
& p! s+ l! l4 M+ B. u& {0 ~
try {3 i7 ?1 Q2 J( h3 u: _# u, [
Heatbug proto = (Heatbug) heatbugList.get (0);
4 i: p3 @! N; s; u Selector sel =
- B9 e8 _* v; k2 [$ w5 W new Selector (proto.getClass (), "heatbugStep", false);
4 o% X3 o: P6 e; L1 \ actionForEach =
7 Y- c H& P9 r$ K modelActions.createFActionForEachHomogeneous$call
$ W+ N9 Y8 \" ~+ @( V+ k (heatbugList,
% t" F9 U- }1 O9 b+ q- n. G new FCallImpl (this, proto, sel,1 l" y. y0 m u. r
new FArgumentsImpl (this, sel)));
9 t% ?) {& u7 e; c; a5 L } catch (Exception e) {4 a B( K" \% D( h/ _2 @9 U
e.printStackTrace (System.err);: P, X5 V$ b" M
}
9 c- O$ T9 P) w7 w) q4 A+ O : Z S& P* c7 e# R' u5 c
syncUpdateOrder ();
& t( o7 R/ j4 G3 o3 j6 P
# D% E$ E& a/ X# C$ P try {, J7 i7 X( \/ c: V- ?3 J
modelActions.createActionTo$message
% K, Z5 h, ?; q& x, ? H: B (heat, new Selector (heat.getClass (), "updateLattice", false));7 F/ E' a$ z7 a6 ^! W" K8 U
} catch (Exception e) { [1 ?3 }" F Q% `# c. [
System.err.println("Exception updateLattice: " + e.getMessage ());
7 I. R1 C. s4 H% n+ }# t }7 G' S5 ]' q$ G+ p3 @8 R q; ?
^" c$ M8 A* x2 @' ^( h5 L
// Then we create a schedule that executes the
! _7 W8 M4 p) b( X // modelActions. modelActions is an ActionGroup, by itself it
- x9 j/ V& i4 e8 C \ // has no notion of time. In order to have it executed in
+ y3 o5 T9 F5 D6 v8 ]5 C // time, we create a Schedule that says to use the
8 y( a0 l) f( Z- D/ ~+ r // modelActions ActionGroup at particular times. This
" r' B9 a/ x; A+ k$ S& }# H // schedule has a repeat interval of 1, it will loop every
0 \7 t: Y& X& K! R6 N // time step. The action is executed at time 0 relative to
3 @, E: r: S2 L2 ]- C1 e: @' h // the beginning of the loop.( e6 U4 p a p* i: [6 s
8 h2 @( K" I9 D A/ I# D4 p // This is a simple schedule, with only one action that is3 g$ E0 R, X' R/ A$ _1 t- s
// just repeated every time. See jmousetrap for more
: }9 H# e x& }5 |% _1 U) y1 x8 V // complicated schedules.0 U. o0 N. j% X+ ?) z! b
9 M. B( R* m" \& r1 p, x modelSchedule = new ScheduleImpl (getZone (), 1);8 K% K5 H" V" a M, J
modelSchedule.at$createAction (0, modelActions);
6 L3 ]4 k0 n- T7 {# l) s- B
& O# X4 h" o: x% }5 F! k return this;
9 n2 |7 _+ o( R& a: M8 } } |