HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: ?/ [2 n8 B% Y! R7 ?% i- e9 j4 M1 w0 I& `; Y" S# R
public Object buildActions () {: ~. U0 u5 N8 M6 W/ }# l
super.buildActions();: ^% k% X6 W9 b T1 r
6 I; T/ n$ X3 C8 \( H
// Create the list of simulation actions. We put these in7 L2 O# X- s+ t3 l6 Z
// an action group, because we want these actions to be
. J3 j! q6 o" A3 X1 l5 ]8 S0 g // executed in a specific order, but these steps should8 H1 X! @1 T- N. V# \
// take no (simulated) time. The M(foo) means "The message6 N+ m3 s/ {+ g, { u
// called <foo>". You can send a message To a particular
/ y- O: q- B! G, C; R$ \ // object, or ForEach object in a collection.
* _) G4 R* y6 e( Q0 Q) {
5 S' v0 ~2 A9 I2 b // Note we update the heatspace in two phases: first run
& v6 h* [& t$ r( V. Y // diffusion, then run "updateWorld" to actually enact the
, S9 w# G5 t. c) F% r: \ // changes the heatbugs have made. The ordering here is9 J8 n9 Y5 A& X& q+ T
// significant!
) l& s8 M, V, T- T& v 0 C% h$ V2 P# @* y! J- g7 t( y
// Note also, that with the additional/ s5 D" T5 y, L) P5 ?5 Z6 C) ^3 M
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 h( d7 j3 E+ ~! u( P1 {
// randomize the order in which the bugs actually run
9 _0 v8 L+ t4 e1 R$ D: u7 o) @ // their step rule. This has the effect of removing any" C. j' f) b1 Q0 p- M' O( o9 v) h: a
// systematic bias in the iteration throught the heatbug3 J0 @$ Z9 H9 h [+ ~
// list from timestep to timestep! z. m& K% H5 O0 A6 ^
5 p- w2 b+ D) d) E4 S- M // By default, all `createActionForEach' modelActions have2 h; R2 O! Q; O9 T# o- b, j
// a default order of `Sequential', which means that the6 H) h7 t+ d( ~& W7 n
// order of iteration through the `heatbugList' will be M7 D* u' M& i
// identical (assuming the list order is not changed
- R! M- N3 f( ^1 s8 _3 C# p: ` // indirectly by some other process).
* S; r* \5 a9 [8 v+ O$ H / [8 ]( _' Y+ H
modelActions = new ActionGroupImpl (getZone ());
7 ^4 F( R+ R0 M
0 d7 ?! ~7 t7 a" v c try {
, C2 n: C* A0 n# H6 X modelActions.createActionTo$message4 m; |3 b5 ^3 }) a* `9 Z) s8 G
(heat, new Selector (heat.getClass (), "stepRule", false));8 n( J0 I1 m; H) R' J5 _$ u( A
} catch (Exception e) {0 O8 D+ q1 ?9 ^ k% `7 |) \
System.err.println ("Exception stepRule: " + e.getMessage ());) K \7 i% {7 d5 K( t
}) i. T& z$ u) W- U4 \; y8 A
X" K( H3 F' E. @ X) L# c try {
- Y( ^' i8 [0 S1 r8 X& f Heatbug proto = (Heatbug) heatbugList.get (0);6 t' G1 D6 y; X9 s) N+ f* f! Z
Selector sel = 9 i8 G: R0 {) t2 p3 \& T
new Selector (proto.getClass (), "heatbugStep", false);! N7 z& c5 x8 B* ?
actionForEach =
5 b1 h" n' x3 w( H0 i modelActions.createFActionForEachHomogeneous$call
& n7 _( `( `1 O3 E: F" A, \% R (heatbugList,+ H7 q- {: L, {+ S
new FCallImpl (this, proto, sel,/ Z; C7 a0 M8 z4 _5 F
new FArgumentsImpl (this, sel)));
- A5 W# q/ J/ G& b9 l' Z* t0 E } catch (Exception e) {2 O, j. d7 _/ ]# P/ b. B( X" u
e.printStackTrace (System.err);
0 e3 Q w8 Z: ] s" d q3 S }0 W" m' E3 b1 Y. q7 Q
# _% M; g% z) a5 ?
syncUpdateOrder ();! j' U! {& ?) }( ~
( ]& f+ q% d7 L" N0 ]# S9 K
try {
3 t) R+ {! \! S modelActions.createActionTo$message ' ~$ X: g& y* }) i5 D
(heat, new Selector (heat.getClass (), "updateLattice", false));5 _8 q1 T4 ^8 |0 c! R8 B4 y& z& S
} catch (Exception e) {
$ I0 }3 v l( r+ V3 a! T' c System.err.println("Exception updateLattice: " + e.getMessage ());
' @+ Q( B- V, n7 _* f9 w8 n7 h; K }( N; O g) U& J8 A
2 D9 u" c- k' U/ E1 E; ` // Then we create a schedule that executes the' k5 [) p1 [- G! V& [9 @& Y
// modelActions. modelActions is an ActionGroup, by itself it
0 ^/ h& M1 s. b1 j* t. @6 u // has no notion of time. In order to have it executed in
5 m% M' m* y$ l1 e" a! y( c" B# k // time, we create a Schedule that says to use the
5 Z5 c9 _* C# @( v* v // modelActions ActionGroup at particular times. This* z7 \/ r; C" x; y: Q
// schedule has a repeat interval of 1, it will loop every' d" s; a5 Z' f" E e, o
// time step. The action is executed at time 0 relative to
% l1 A% e/ R$ }4 [0 f // the beginning of the loop.
/ ~$ @! p* M1 U5 c* e$ j) K7 i) l. d C
8 H( C2 G, Z3 ?) y // This is a simple schedule, with only one action that is2 c2 l4 O) u& U8 D% T9 ?) n
// just repeated every time. See jmousetrap for more
) }! _& P- `5 a5 u6 I // complicated schedules.
8 X+ w6 f, B0 f( \ n , b1 C, @' u8 v
modelSchedule = new ScheduleImpl (getZone (), 1);
: h0 X' s5 D( s! Z2 d; ?7 H& y( {1 q9 t modelSchedule.at$createAction (0, modelActions);( Y" B' y6 i m
7 C1 @5 Q# v( P6 F$ D7 e
return this;
" u. T' X/ @! j6 Q1 v } |