HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 g$ v! r( W: o* S+ y6 h' J! ~! D0 A3 V0 N. N2 {+ |
public Object buildActions () {
3 ~) j3 S$ k2 i- Q1 f super.buildActions();( n2 X! m* E" s8 H1 |' B
8 O% l3 W% i; o( X
// Create the list of simulation actions. We put these in
k9 h$ x) W- t7 Y* Y1 v // an action group, because we want these actions to be
% q# F, y+ x3 L) x: X+ x& J // executed in a specific order, but these steps should+ [9 W# t/ m& n) C3 H' G
// take no (simulated) time. The M(foo) means "The message u. W7 h; }* f: V) H
// called <foo>". You can send a message To a particular
8 ]6 I, I _ [* [( S* D // object, or ForEach object in a collection.
' v0 H/ C4 O3 ~2 O$ \ ' [' R4 c2 ~7 A# s _1 T2 g2 M
// Note we update the heatspace in two phases: first run
6 l% ^2 Y9 G6 m, K; |; M6 b) O5 }1 ] // diffusion, then run "updateWorld" to actually enact the
, j9 m& p' t4 J9 W // changes the heatbugs have made. The ordering here is V" s/ j2 o1 P. P% a" _6 y* c! `
// significant!- \& ]6 K2 [) n
# u5 p. }0 C& a7 j0 K // Note also, that with the additional; U( ?7 B: i G; O; S
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. E. l9 k/ x6 [% o // randomize the order in which the bugs actually run' r3 i& b6 w& D- J$ q8 u- Q
// their step rule. This has the effect of removing any
! i5 I% l7 R& t5 c6 `/ K) d9 K0 t( a // systematic bias in the iteration throught the heatbug8 z# M( d' j; J- T. J/ {# \
// list from timestep to timestep
3 B. i* ?1 T Q6 q
; t) z c4 n/ b% e# h2 k // By default, all `createActionForEach' modelActions have
- E* h) P) ^4 E7 ?+ P // a default order of `Sequential', which means that the* ?9 u3 i& o6 t8 e) \
// order of iteration through the `heatbugList' will be
% b9 j5 e; J5 m* m // identical (assuming the list order is not changed
9 p3 v0 D% e: Z8 X, V- O3 v // indirectly by some other process).. \ ]! X, G+ Q
/ l* n+ k0 l% I; G" n* \" Y! y4 [
modelActions = new ActionGroupImpl (getZone ());; n, c' y) }" \
6 H' w" q/ z' G2 R try {2 f1 \$ |8 ?# j: m* [1 Y" g. R! A
modelActions.createActionTo$message8 ?- |4 g0 S. B4 h4 X% N
(heat, new Selector (heat.getClass (), "stepRule", false));& j# P8 e% N5 y ^+ K
} catch (Exception e) {% E( v- x1 R% Y2 s
System.err.println ("Exception stepRule: " + e.getMessage ());$ c. q1 ]3 S0 R) V
}7 H2 x8 }6 l7 d! M
6 C1 m" ]! X2 P try {
# M) ~( E: C3 P. I Heatbug proto = (Heatbug) heatbugList.get (0);
6 h. M, p; X& W$ Q V# j Selector sel = + s v' }! G s6 r- J# G% n, L
new Selector (proto.getClass (), "heatbugStep", false);: q) d4 y* N. a9 V1 u: g
actionForEach =! a" Z& Z8 b1 |$ x% Z8 T
modelActions.createFActionForEachHomogeneous$call
' b( @' A8 Q# u' z (heatbugList,
) ?1 W9 M" E- O new FCallImpl (this, proto, sel,3 U4 g' w& [* M5 D* x/ c: W) _ x
new FArgumentsImpl (this, sel)));
. ]( {5 `. ~& |# T6 Z0 x } catch (Exception e) {8 k$ b2 y5 \8 }! N4 [& Z& P- e9 s
e.printStackTrace (System.err);
, b% A1 [0 I# K8 { }0 O9 C( n( @( R. T8 a! _5 s
* B0 G. n# {6 w8 S( k$ x
syncUpdateOrder ();$ O \8 ^" J4 g/ ^
& C+ t' y- \5 @: ?$ n( y1 ^! {
try {5 u% m$ F" M! t/ w+ Y9 p
modelActions.createActionTo$message * E( _( R W) c4 Z1 Z3 g
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 O4 X. I4 v5 k ^/ A. l } catch (Exception e) {$ k7 C+ k1 o o( {0 g
System.err.println("Exception updateLattice: " + e.getMessage ());2 t+ S8 U' J" M& u( `3 q
}' @ S4 H% t# V
0 u4 @# L: {* ]+ p! ?, b! e6 d: _
// Then we create a schedule that executes the
; g$ A M2 c' ~$ ^0 H, j // modelActions. modelActions is an ActionGroup, by itself it9 h$ e, d; T5 w
// has no notion of time. In order to have it executed in1 U1 L; v% o8 `1 Q5 f
// time, we create a Schedule that says to use the1 b7 f. ~3 O; X/ l. A9 E2 d' q3 g/ K9 A
// modelActions ActionGroup at particular times. This1 Z" X. m7 J1 ~( z' f/ G' ?
// schedule has a repeat interval of 1, it will loop every1 Q8 l* G- Q& s- x
// time step. The action is executed at time 0 relative to
+ h4 |- x' t* r K! `' W# J- k9 A // the beginning of the loop.
3 V. p1 I* Y; |' r% ~; J) M4 ~- C8 E8 O- L8 W( Y. @
// This is a simple schedule, with only one action that is
4 [! C; g- O/ p c& c1 _* | // just repeated every time. See jmousetrap for more# S% M( s5 l) r' s
// complicated schedules.
/ d E- f. v# U. @ * P x, w1 t2 j* n7 k& u2 {
modelSchedule = new ScheduleImpl (getZone (), 1);2 m* w% m5 Q& S. k% h2 _
modelSchedule.at$createAction (0, modelActions);% p6 e' Y0 Z: p
- M4 t. _2 [9 f, t5 b' J
return this;: m" k" j, t* V7 Q/ z2 |* I c+ K# m
} |