HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ C) y. B m- j
9 Q4 U: f* ^1 Q# e1 B; n' { public Object buildActions () {% W$ ]; F) T {4 c9 [ x0 e5 Z
super.buildActions();' y* B% v8 t$ p' D* q# D/ M
- T- o2 D' r2 S% z6 E9 ]3 G; c
// Create the list of simulation actions. We put these in
[- b; `5 {$ } // an action group, because we want these actions to be
- b+ j3 y& d6 z5 k9 i // executed in a specific order, but these steps should* C j7 N+ R" |$ }2 I! V. c& y& _5 T
// take no (simulated) time. The M(foo) means "The message: M% N5 I& s7 {8 z4 }" S! @
// called <foo>". You can send a message To a particular
R, s* ~6 ?' ? // object, or ForEach object in a collection.
4 Q+ ?' d6 K: J' R3 ^ ) X* Z. A' c/ l, z; a$ n! r2 F2 d
// Note we update the heatspace in two phases: first run; b( o3 ?" P5 ^) J c7 f$ m+ \
// diffusion, then run "updateWorld" to actually enact the) Z4 L$ Y) b5 G, T
// changes the heatbugs have made. The ordering here is# {, `( E F. } M- C/ E
// significant!
: p7 U, ^* \3 @ K
9 A/ p4 E' @+ _( S2 H% U // Note also, that with the additional
7 _: ?3 M: E% z8 w8 \ // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 M; o6 n3 ?. f5 D1 D" d3 b // randomize the order in which the bugs actually run
( s0 Y* X2 Z6 C- C$ {: e6 k, L$ H // their step rule. This has the effect of removing any
; F9 b- P% x+ k5 k; k // systematic bias in the iteration throught the heatbug, `3 ]; T+ J- O% z/ C& i
// list from timestep to timestep
8 m/ b" I8 {" K& K- d
' o' C9 x O* y' `8 I. L, k- ~% ? // By default, all `createActionForEach' modelActions have" Q+ {1 e7 m. v8 \$ n
// a default order of `Sequential', which means that the
- A) i. w% ?+ w% e0 G- e // order of iteration through the `heatbugList' will be* I; ^+ l. ~' ~" c% g8 h: ~3 n
// identical (assuming the list order is not changed
; L# |! y% j- m6 I( Q& R. v3 m* F# W // indirectly by some other process).) c4 x5 j) \+ I$ N
- ~1 z+ C7 V: F" n7 `; o modelActions = new ActionGroupImpl (getZone ());
; }$ G& j; F& w: [, n* d5 Q3 _4 f! F' Z) S
try {( l' i7 m- U+ [0 m m, V
modelActions.createActionTo$message
+ L2 j/ X& z: N, H$ r* d& N (heat, new Selector (heat.getClass (), "stepRule", false));& d; v4 w6 l6 z; C9 g4 U
} catch (Exception e) {/ J& B9 O" l# I4 d
System.err.println ("Exception stepRule: " + e.getMessage ());
6 O. J/ T/ {' w/ r) U" x+ Q! q. P0 O6 i }
2 g# e5 L2 @0 l- C. w1 J. a7 L9 Y0 C; J1 |# W
try {
! o+ t; c* g7 J. m) a Heatbug proto = (Heatbug) heatbugList.get (0);
+ ~: d8 c! ?* m Selector sel =
8 F) i1 C( S/ Z+ z% G, L new Selector (proto.getClass (), "heatbugStep", false);
. U& b. a* l; t0 `9 [7 I, A, a actionForEach =, T3 q" ]& f/ c& @1 h: j
modelActions.createFActionForEachHomogeneous$call
) R/ A6 @" ~. J- ^3 _( O% E (heatbugList,
" C# o8 l/ S: s7 n4 w6 f new FCallImpl (this, proto, sel,
4 O+ X6 v s1 E% Q9 S0 |0 p$ ? new FArgumentsImpl (this, sel)));
* j1 `+ J- t% v- q6 L9 }) m } catch (Exception e) {: v+ p; W: U2 N2 \
e.printStackTrace (System.err);% {" @ |9 F+ y, V% q% H
}
3 Y1 x4 ?) x" m( |" k" {
4 ]6 ]- y4 U U8 M8 B3 H syncUpdateOrder ();
8 y+ X0 Q6 w( b `+ Y5 ^* U# s9 U) B1 A
try {- r, f q- v" f
modelActions.createActionTo$message
2 l) o9 I- F9 z. A( D6 D1 ] (heat, new Selector (heat.getClass (), "updateLattice", false));$ e/ }+ R% ^$ e! t5 G2 K
} catch (Exception e) {
3 K, O9 k h3 p' o1 f% {% k; ^ System.err.println("Exception updateLattice: " + e.getMessage ()); `3 ^9 W1 r+ W4 b! `) k9 h- K
}
" X# T6 T, T' D
3 H7 E6 D: U3 e // Then we create a schedule that executes the0 J# C/ m/ c/ z0 h) m" @$ |( {
// modelActions. modelActions is an ActionGroup, by itself it; ?- u0 S* D/ M0 ]
// has no notion of time. In order to have it executed in' m% B( L p( s& ~6 |/ e
// time, we create a Schedule that says to use the
9 C/ @7 g n. \* c! J' j, r // modelActions ActionGroup at particular times. This
0 d% \6 S) Y, ^0 Q // schedule has a repeat interval of 1, it will loop every
# E9 z7 o4 P0 I# b // time step. The action is executed at time 0 relative to7 h R2 E |6 x% X
// the beginning of the loop.
! y8 H0 P# E) Z$ F" Q
: ^0 G1 c; h; ^, @1 p5 H2 m // This is a simple schedule, with only one action that is
1 T5 M6 I* ?9 J# D! k2 z- b4 N$ { // just repeated every time. See jmousetrap for more B0 [$ s: M# w+ |$ B
// complicated schedules.( G O0 U7 d$ X5 W
2 X3 p( l) W- B! @% `3 e' O$ L
modelSchedule = new ScheduleImpl (getZone (), 1);
0 Q5 k1 a2 F* T9 c$ d. Q7 o modelSchedule.at$createAction (0, modelActions);
/ ] H$ {8 X, } 0 z$ v0 e, E# [* C2 M* }
return this;
2 \" @% q1 l; r9 H5 e" P } |