HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
h+ H9 O" S2 m8 J) J
( m" e( i; Q# l' d: d1 J+ y public Object buildActions () {
' m8 T+ ~, b2 Y6 J: @" Q super.buildActions();
' B7 @+ `: U. Z. r 3 S$ \$ d/ c& b$ H6 O
// Create the list of simulation actions. We put these in
g" F: `5 H5 m% G // an action group, because we want these actions to be
+ B8 {/ I, I0 |5 W4 z4 s // executed in a specific order, but these steps should
2 L+ g1 Q# e5 \/ G' @ N! L. }; | // take no (simulated) time. The M(foo) means "The message
; N: i) B8 t: m2 T a // called <foo>". You can send a message To a particular
6 m5 Z# }" f6 ~0 q( f // object, or ForEach object in a collection.3 h; O7 X. i2 t
& ]# U/ Z9 F1 p
// Note we update the heatspace in two phases: first run6 d5 o) c2 m/ n6 k: ~3 b1 M% b
// diffusion, then run "updateWorld" to actually enact the
; i" A: g3 a K$ G- Q9 }9 m+ _ // changes the heatbugs have made. The ordering here is
0 v8 C; T* T9 \& ^ // significant!
5 c$ u9 h9 E6 P2 V1 g" j4 ^2 o" s3 J ! U" A* U, O( g: N$ e F- a; {
// Note also, that with the additional
5 _. M- f+ j: o2 E+ C // `randomizeHeatbugUpdateOrder' Boolean flag we can) E: [- S0 {7 O* d+ |: M
// randomize the order in which the bugs actually run4 g3 K1 `7 g ~7 @' r/ i
// their step rule. This has the effect of removing any R& e) ?" G& j0 v3 B. y# M* `
// systematic bias in the iteration throught the heatbug
% k V! W' }4 K+ ]8 u // list from timestep to timestep7 }2 O! B, x6 t- e2 B* B; n1 P3 f
* q1 o9 @2 r! `, } // By default, all `createActionForEach' modelActions have; }$ v1 \& s7 o; e T7 x
// a default order of `Sequential', which means that the
/ s! J3 c8 T! m // order of iteration through the `heatbugList' will be
* o* H! h1 J0 q4 a9 I7 j" V // identical (assuming the list order is not changed ~& d Z. l( J+ k
// indirectly by some other process).
' @, s4 N0 a$ a/ d+ Z
; l1 k6 Z+ J4 ?0 B) e- J# K modelActions = new ActionGroupImpl (getZone ());
/ W1 E0 l% _9 a/ Q: h2 \3 v/ i5 e9 o/ r2 v0 l
try {
% \* D" B7 N4 b* z" B7 N3 _( ] modelActions.createActionTo$message
( T8 O, ^1 K5 y" l& l0 ?/ o (heat, new Selector (heat.getClass (), "stepRule", false));! E4 Z: j$ r' L+ \2 b
} catch (Exception e) {
, O1 t) s; |, {% u4 E1 y0 f. S System.err.println ("Exception stepRule: " + e.getMessage ());
) J9 F8 l+ `& w5 x; B0 Z }9 [1 h- \- ~0 w, @, e
7 t, ~, _3 {- T# Z/ |. B& E
try {+ n/ e3 Y' W, D \
Heatbug proto = (Heatbug) heatbugList.get (0);
. K8 l- o6 u$ f8 n- p Selector sel =
& ~6 i" r$ V2 Z& q. C+ m new Selector (proto.getClass (), "heatbugStep", false);9 G G: `9 [7 [& N* o. {2 T
actionForEach =
' b* h, w$ W# C modelActions.createFActionForEachHomogeneous$call; x7 t& U1 P- n/ U. ]! ^9 m1 K
(heatbugList,) E4 d/ H7 v* k1 F; s0 X
new FCallImpl (this, proto, sel,- V7 t6 i7 w/ B) b
new FArgumentsImpl (this, sel)));
+ W+ r- F9 j) y0 A ^ } catch (Exception e) {+ g9 ~% r$ H% D- d6 B, _
e.printStackTrace (System.err);
1 d+ K; x8 F+ _" Y/ H7 E }" y. |! {2 d. a0 Q9 Z( `/ @$ U
7 r; Y( o7 l9 }+ o5 S syncUpdateOrder ();
4 M. m3 {$ p" o6 _% p8 I* N, g( T: @2 d' v7 p0 {8 D# s% j- J) r
try {" H+ B0 E6 {; D. P' z
modelActions.createActionTo$message
' f" f0 w3 C. L" e1 O (heat, new Selector (heat.getClass (), "updateLattice", false));
: t' q L- i! e+ \! M1 V } catch (Exception e) {! }6 i2 o* l: d) ?9 E6 A
System.err.println("Exception updateLattice: " + e.getMessage ());/ |+ z0 i" G q# c
}# e% _; F6 z# ?# f9 C
4 Y$ a4 a& v3 Z1 } // Then we create a schedule that executes the5 P4 m/ x( D! K6 Z& @2 u7 O4 b- D
// modelActions. modelActions is an ActionGroup, by itself it! K, E7 }* P' C) O1 X. J
// has no notion of time. In order to have it executed in
: h6 ^9 i& @( J5 o // time, we create a Schedule that says to use the. x$ [$ k1 [. o; h* |
// modelActions ActionGroup at particular times. This
3 V* t5 S) [% M1 S( D$ Q // schedule has a repeat interval of 1, it will loop every
, K: R7 f4 B9 |! Z; n) b6 [ // time step. The action is executed at time 0 relative to0 y9 _+ i7 S; Y( v( W n+ }
// the beginning of the loop.3 D7 p" [! V- e, j
) N$ R$ L4 q" e" _/ N( Y // This is a simple schedule, with only one action that is
) o/ g0 D' |: r8 @- u // just repeated every time. See jmousetrap for more
, ~/ r6 w3 H; V9 P9 O9 ~ // complicated schedules.
- g* p2 V6 y) j, {$ r 5 |( Z( E% \1 C# e' B- `' H( K1 v( g2 }
modelSchedule = new ScheduleImpl (getZone (), 1);( |! B G/ h7 f& T" o7 |
modelSchedule.at$createAction (0, modelActions);1 b4 A( b: b+ I
1 W9 A* O, C9 ]" R
return this;* t; e3 K2 Z/ e, u9 l
} |