HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ X; j9 Q; Y- b
8 ?! q+ J2 Q3 ~; {* h
public Object buildActions () {
$ R" K) [; K k% U( ~* w5 `4 I super.buildActions();
# \' C( n. G' p& h ) \: H0 L( C1 G/ {1 _5 ]+ g
// Create the list of simulation actions. We put these in
! x% O$ t0 C+ e: \8 m" r // an action group, because we want these actions to be
' e- m" g+ G [! v( }8 I // executed in a specific order, but these steps should
" a. y P8 ~) v // take no (simulated) time. The M(foo) means "The message
9 N3 p$ s6 B0 v/ J/ O F* | // called <foo>". You can send a message To a particular
- K& }+ S' J3 j% k- v0 x& X // object, or ForEach object in a collection.
' ~ r: \! K: g% t, c" `3 X3 {* @- u$ N
; h5 @5 x* ]4 a( C L! q // Note we update the heatspace in two phases: first run( n1 }. w' {( e6 W6 U- H0 ~$ ]
// diffusion, then run "updateWorld" to actually enact the
: A/ A% s$ X/ w9 _# H // changes the heatbugs have made. The ordering here is
' C" ^. a6 E* g6 J2 {8 k // significant!4 U( f7 l4 V8 v# s* W
, `4 k, X [$ H. l1 g
// Note also, that with the additional( H7 B; A; n. ~8 R
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 G5 H* L% Q" r+ @& n+ z! A // randomize the order in which the bugs actually run+ k1 J4 E" P# Z, T* w4 g
// their step rule. This has the effect of removing any" _% r$ A" C _) w! Z
// systematic bias in the iteration throught the heatbug
' b0 S S; [8 A) J6 ] // list from timestep to timestep
2 E! ]0 x2 k( G* B! L
' B& m$ Q1 u9 N0 y' I# k, l/ F- j/ C( }' Y // By default, all `createActionForEach' modelActions have
0 I+ t- l0 ^# w q) V) }2 I9 e // a default order of `Sequential', which means that the
$ [1 g3 Q: [+ W, ?0 j7 B& e // order of iteration through the `heatbugList' will be
~; p y! v6 A, d) b // identical (assuming the list order is not changed$ |( Y0 q/ B6 q, U( n# B
// indirectly by some other process).
* j! p- ?8 x3 z
* e! N5 r9 I8 u* W" k modelActions = new ActionGroupImpl (getZone ());8 g& `( T$ X1 K: E! H$ Z" k9 h7 m4 Z
) q) G& _$ Y* l9 N% B0 n
try {
4 G$ y7 O' P! n+ K. W, ~) e modelActions.createActionTo$message
' U- q3 Q* a- ^' G" Y- j (heat, new Selector (heat.getClass (), "stepRule", false));
( \3 c( T5 Q0 ^4 p! R" R# G) P } catch (Exception e) {' Z! N: X8 x) l' k1 l1 w
System.err.println ("Exception stepRule: " + e.getMessage ());
) w" [. D) d0 J9 ?# U }0 l, K8 d7 T/ J* f P
. a. w- B+ r# r' o
try {- B2 t) u. n- o4 l7 _" ]" b
Heatbug proto = (Heatbug) heatbugList.get (0);2 W5 p7 E: y9 X6 M
Selector sel =
; P2 F$ j) Y: Y( _8 V7 v- y new Selector (proto.getClass (), "heatbugStep", false);
( g. o! p0 E* \9 ~9 w. }( o actionForEach =( v) O- t Z2 c; X7 h4 j6 ^
modelActions.createFActionForEachHomogeneous$call
g" T7 L7 S1 ~/ {) I- V$ @* D (heatbugList,! G# Q' \/ K7 z8 w7 M6 h% E i* b
new FCallImpl (this, proto, sel,( K& P. M+ k9 r
new FArgumentsImpl (this, sel)));0 G7 } E8 { B: f8 u: ]4 T% i
} catch (Exception e) {- T' ]* J) K2 B
e.printStackTrace (System.err);
& v) L# H3 g$ v( k( Y6 c6 k }. H2 W/ S9 _2 E7 ?- x
/ l" q6 _: x# {3 S; |% {
syncUpdateOrder ();: ^) [4 f8 W+ P& q
, k/ P5 b; A# t. M r0 W2 K
try {8 t% C3 W% `) j4 q1 G
modelActions.createActionTo$message
/ L$ q5 r( C$ g- ^/ i1 H (heat, new Selector (heat.getClass (), "updateLattice", false));
1 ?. x0 z {; l. T0 M( o" {0 C4 w( C } catch (Exception e) {9 R% ?8 M! ^% ^' t3 _
System.err.println("Exception updateLattice: " + e.getMessage ());" d, d6 L, E. U5 T
}$ J/ H2 C; V9 b6 r0 `6 [
( [& \+ w1 J2 c
// Then we create a schedule that executes the; X: ^ I" O. x) n) s
// modelActions. modelActions is an ActionGroup, by itself it1 L1 s/ f* N* r9 U9 A
// has no notion of time. In order to have it executed in0 c/ k' {; a; C( D0 ]. u- W. j
// time, we create a Schedule that says to use the8 S7 p% d3 Y3 k( J
// modelActions ActionGroup at particular times. This
6 }) ], Q' {- R. C& X" W // schedule has a repeat interval of 1, it will loop every* ]3 z# N( |* S6 ]+ x
// time step. The action is executed at time 0 relative to) u: n7 t; f/ G
// the beginning of the loop.
( R& E0 F- Q& c) {+ o6 A Q4 f& i" @# [1 r$ V/ u
// This is a simple schedule, with only one action that is
1 x# K9 f5 i6 g" s9 W. N3 } // just repeated every time. See jmousetrap for more
: m+ l: X* S: }) } // complicated schedules.' S# K% o! [, N4 k( a2 ^
8 Z& K7 h. A) C) J6 q
modelSchedule = new ScheduleImpl (getZone (), 1);; P* l$ f, G" c7 [' k' E' j7 D
modelSchedule.at$createAction (0, modelActions);
" m! i# \) u: S
7 T6 W/ M2 [! T/ q' C# r. v0 E2 X! A return this;
- j1 X6 _1 `& g8 S } |