HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, |8 w+ a& o1 y$ W0 Q
. g" ?7 E. ]* E, s1 q* B) L
public Object buildActions () {
% b3 \6 a; j/ y1 p super.buildActions();1 Q* Z e/ D. B
d; z* W$ c7 d+ s& u // Create the list of simulation actions. We put these in4 N* }/ x5 f4 L2 R% g
// an action group, because we want these actions to be
, o- p: {* J7 [) }- Q // executed in a specific order, but these steps should$ s& @) K) d. X& a2 x
// take no (simulated) time. The M(foo) means "The message
4 e! Z. T4 W. S8 n* L" _$ U. f // called <foo>". You can send a message To a particular; y" [5 `& p# \# \
// object, or ForEach object in a collection.
3 r3 ~3 k+ i/ ?4 ~4 b1 Z$ Z
" S3 v3 n/ s. Q i" J1 N0 X // Note we update the heatspace in two phases: first run4 s1 W& j6 W5 p, f+ T& z% j
// diffusion, then run "updateWorld" to actually enact the: N+ l8 a+ b# b" f& X% i
// changes the heatbugs have made. The ordering here is, `0 ~4 y" u1 _# b& i
// significant!
& ^, g/ O" H v* |& N$ v
, T# j, a: a1 n: a/ g) x // Note also, that with the additional; c! o; n' @5 E" j/ |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
m4 Y/ V {, e& f // randomize the order in which the bugs actually run1 q3 Z% _* X$ o8 u$ y# i
// their step rule. This has the effect of removing any+ s- H( w* e8 r) G
// systematic bias in the iteration throught the heatbug8 j( B/ K1 q; ?% A* g
// list from timestep to timestep0 O+ W% |3 E. V/ ?9 N6 J- [8 J8 m6 r
q* j; x. A* a! g2 J9 j7 s
// By default, all `createActionForEach' modelActions have
4 x1 ?0 t) @+ C. V. D( g; v // a default order of `Sequential', which means that the
" T5 A$ Q+ x/ L% p, _' ~$ z // order of iteration through the `heatbugList' will be) X& y: V7 z* a \# H2 c8 T. A% Y
// identical (assuming the list order is not changed2 {' |* u' @ E* f6 J; p1 t
// indirectly by some other process).* Y+ A. r; ^* w
6 [& D$ E4 I) Z- x' N
modelActions = new ActionGroupImpl (getZone ());: b9 K5 S+ u, \: j
2 Q0 p& \1 R& M- B try {
9 g8 L3 L; K. @$ P! N5 R modelActions.createActionTo$message
* E9 f+ q- w7 }0 U$ n (heat, new Selector (heat.getClass (), "stepRule", false));3 \% G$ ]" K( p7 Q, ?
} catch (Exception e) {; W5 Z$ B; i% T* {0 M, i
System.err.println ("Exception stepRule: " + e.getMessage ());
5 [ s- w, L1 g. Z* l& r }
5 j$ k6 N$ |% b$ n% h
& H9 z7 N# e- M try {
# S2 d5 y. a( G8 T Heatbug proto = (Heatbug) heatbugList.get (0);
% @: o8 @% t/ [6 a0 @& B Selector sel = ( ~+ Y9 I- P' H, Z. _1 _
new Selector (proto.getClass (), "heatbugStep", false);1 H+ a" I3 q1 W& T1 k C
actionForEach =
; ?% v' Z# v- }, `3 {5 a* f modelActions.createFActionForEachHomogeneous$call7 x3 [& E# S" }
(heatbugList,
c; V# a5 u3 I+ r new FCallImpl (this, proto, sel,) D& d& R l0 z: w1 b/ F* e
new FArgumentsImpl (this, sel)));
0 T) R3 t/ g& F: s } catch (Exception e) {" P7 }% x1 H& O6 B
e.printStackTrace (System.err);3 K9 _" e$ G7 M, I% s g
}) p3 I' }' U* h( a. b5 j* s
+ }2 G2 ^& E0 f4 h5 p$ P6 z4 ^+ M
syncUpdateOrder ();& n* r! q+ x! Z3 |- U' P2 B
" o8 R2 [7 V5 Y try {, V. G, i: z# S. g* N3 G
modelActions.createActionTo$message , f' u7 q2 x2 g
(heat, new Selector (heat.getClass (), "updateLattice", false));
. G- D" O. s; K% j# c5 i7 Z4 j- H } catch (Exception e) {
4 q9 G4 q' F1 ? System.err.println("Exception updateLattice: " + e.getMessage ());1 }7 R# A4 V y4 |
}3 e* u1 A" M, E% J9 c, ?
- \# v% R: G* q% @; h5 @$ T
// Then we create a schedule that executes the
5 g6 _5 ]0 R9 y# I: O- A // modelActions. modelActions is an ActionGroup, by itself it
1 J0 a, v8 f2 g* A // has no notion of time. In order to have it executed in
) U4 d5 y# \2 I- Y* ?; b! R5 }5 z/ M. h // time, we create a Schedule that says to use the+ S4 ~* R6 u0 ] M2 A; g0 O
// modelActions ActionGroup at particular times. This
1 g! j+ e: J; p! S$ V9 H' m' g // schedule has a repeat interval of 1, it will loop every3 l) g: e0 R9 d, V O: _" T4 ~6 }
// time step. The action is executed at time 0 relative to- R% @/ ]% ^* T9 r- s
// the beginning of the loop.
3 E$ N! R! Z0 I4 e5 g4 a" r3 d) Y* D3 [0 `
// This is a simple schedule, with only one action that is3 n3 j3 c, I6 w. S; y$ `( j4 f' } r
// just repeated every time. See jmousetrap for more& W8 R- g" |( K, \$ `6 ?3 }
// complicated schedules., g1 v$ C8 a& V. u
9 y- Q! o, _$ B+ v, T
modelSchedule = new ScheduleImpl (getZone (), 1);$ ]3 P3 v$ k$ b3 J& A( g1 v
modelSchedule.at$createAction (0, modelActions);- S- _2 ]0 r# w3 V: H" f
0 y/ S. X" e9 H* n7 T4 y% H2 z
return this;
4 N$ `" O+ @/ ^7 M& J; m4 q4 I } |