HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' @6 E! x, N4 @/ g7 t$ |2 |& E1 p$ v
public Object buildActions () {
, d6 t9 C7 {, _ super.buildActions();+ Z! |' r7 k4 g, w& H
4 l" \ [7 Z3 P, c- H% \ // Create the list of simulation actions. We put these in5 r+ I7 @5 `1 |' N; k7 V; j6 h
// an action group, because we want these actions to be
, D: W. F* z; X$ A; m // executed in a specific order, but these steps should
1 P& U* s: S! J // take no (simulated) time. The M(foo) means "The message
' F$ \+ d0 C' @" F0 _" U // called <foo>". You can send a message To a particular
. _, G& y5 @$ Z+ B& ?* n( | Z // object, or ForEach object in a collection.
% u9 L1 [. g2 q8 Q& [# Z! l # X8 E" n6 N. [5 d' U f; ?
// Note we update the heatspace in two phases: first run) I( v9 a: J- u0 i- z+ {8 S- X
// diffusion, then run "updateWorld" to actually enact the+ f, \5 k) h; |, v( y- R, m2 f, O
// changes the heatbugs have made. The ordering here is
3 p' k% E9 V0 w$ K // significant!
" D" c( K. O5 C
) I X( F! R6 a4 W; o // Note also, that with the additional
% l J9 D9 _! q9 L$ y: h" h9 I // `randomizeHeatbugUpdateOrder' Boolean flag we can& @% Z( K1 P9 t! E
// randomize the order in which the bugs actually run
1 Y# X' P( z2 Z M/ O // their step rule. This has the effect of removing any- G1 c* Z6 |+ g
// systematic bias in the iteration throught the heatbug
; z) m) {1 @( T // list from timestep to timestep
2 \7 i* A* }3 e) [- v, [$ I # L) \3 o9 ?2 L+ x( a! W9 f
// By default, all `createActionForEach' modelActions have
3 r) w0 ~" M6 ~% b: r // a default order of `Sequential', which means that the, Z4 r) G. F, |+ ?/ Q* R+ T. g2 t
// order of iteration through the `heatbugList' will be
- l3 W: i7 ~: G2 A/ @ w' W( D // identical (assuming the list order is not changed/ d% R! O1 p2 C t- H
// indirectly by some other process).# ] _& x3 C" M
, D0 F4 i, A/ z) }, B
modelActions = new ActionGroupImpl (getZone ());
& X, v4 y. g9 g H8 b& \/ w& X! R3 o, ^: s
try {
7 }8 i0 W$ T4 ~" L! ~$ l- [ modelActions.createActionTo$message
5 ? _' a* N/ M2 w; r" c (heat, new Selector (heat.getClass (), "stepRule", false));
# j* A. q4 {4 ?; r o, j) G } catch (Exception e) {
+ J( U5 e8 ^/ M c) o System.err.println ("Exception stepRule: " + e.getMessage ());$ q* ~1 X+ G4 j. K/ x
}
+ c2 L/ e6 b7 R1 U) {& X5 H/ z3 e/ |6 d/ K% i: Y4 G
try {, r6 o( ]* a X) p
Heatbug proto = (Heatbug) heatbugList.get (0);
. n- `6 i2 M5 V+ E7 S Selector sel =
3 O% j7 {& w( r# M; R( T new Selector (proto.getClass (), "heatbugStep", false);! a0 t+ t2 h/ @( F: g7 a+ e$ l/ n: {7 F
actionForEach =! S1 x% P! d( G) w' Y. H
modelActions.createFActionForEachHomogeneous$call$ D+ V! }; E: X; k: f- U
(heatbugList,
* s: J' n0 M; n% N- g! h new FCallImpl (this, proto, sel,4 ^# h8 c; v& O. E
new FArgumentsImpl (this, sel)));
, i* C7 u' }: F* ~ } catch (Exception e) {4 ?: V: B% R3 h' D7 T7 L
e.printStackTrace (System.err);
5 y/ P* w4 e0 F- J# z! P8 B }5 }4 W: b: D: C, s) x8 x* i
' A" O% B5 ^. N& }
syncUpdateOrder ();# }1 Q; A8 Y+ @. W3 m1 [
( y" D' v: R8 M2 v( n9 V
try {
' Y9 p0 N. J9 U5 n) N modelActions.createActionTo$message
- [- K7 ?) ?+ u. x3 g9 I/ c% q (heat, new Selector (heat.getClass (), "updateLattice", false));
. C. g( X3 o9 I% s8 A2 D; ~ } catch (Exception e) {8 c$ z! t( v5 v9 K6 E' | s q3 I& c
System.err.println("Exception updateLattice: " + e.getMessage ());; s# D! x* ^& W8 l% P ^
}
, o& R. F* m* c9 @+ M, w7 S % g9 Z$ }$ |! H1 |8 g2 ` E
// Then we create a schedule that executes the( P- n% \3 S$ S/ _; Q1 O+ k/ F
// modelActions. modelActions is an ActionGroup, by itself it! v4 v! U* _- J- w$ ^
// has no notion of time. In order to have it executed in
2 R; h7 o$ z( Z; G. U; H& O) X( _, ~3 m // time, we create a Schedule that says to use the* _& K! r1 H0 u0 }7 r# H
// modelActions ActionGroup at particular times. This9 w7 j) ~* P9 r* V1 @/ [: c# x
// schedule has a repeat interval of 1, it will loop every8 T3 h& |9 C% g9 ]6 T! ^# }* p
// time step. The action is executed at time 0 relative to4 e5 F. t8 [5 q- r' a2 l
// the beginning of the loop.
; u$ Y2 c) Z: _( L! C7 `, j0 A
) `) E/ c+ u w$ Q0 |8 k( c // This is a simple schedule, with only one action that is
) j1 s3 _+ k2 g. p/ O# T3 Y% C // just repeated every time. See jmousetrap for more
7 l5 p0 D& u8 V% L/ y% E) Y; q // complicated schedules.( j3 j7 c7 d( O- h4 M$ K
; f, y4 L$ n" }& t1 j e0 C modelSchedule = new ScheduleImpl (getZone (), 1);, n9 [* {* K5 I x- I
modelSchedule.at$createAction (0, modelActions);
, Y, g$ U+ m- Y4 W4 o) f: Z * c0 ?7 d, X9 R: r
return this;
4 G/ m2 e& f' B; |. U0 s } |