HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 _& b& c5 J( u& C% h
: L2 t$ }( V/ ^( u2 Q% k public Object buildActions () {
# g* x9 z7 E4 N) b super.buildActions();
' a% S3 o! b4 X
& v4 U1 i$ G. E // Create the list of simulation actions. We put these in. n3 Z5 S; Q( a2 {) a
// an action group, because we want these actions to be
; Y5 [4 ?: Q! A // executed in a specific order, but these steps should7 U- W0 y& {' Z
// take no (simulated) time. The M(foo) means "The message2 C3 @7 C4 o: c R- H
// called <foo>". You can send a message To a particular
% P, F0 p) q8 |& ~9 ] // object, or ForEach object in a collection.+ P# F5 D# O9 ?- w6 q, c
) J& [- l9 ^' n4 J7 }( J" D, n // Note we update the heatspace in two phases: first run
- i8 C4 w# Q6 E6 E$ Q4 [9 D7 b // diffusion, then run "updateWorld" to actually enact the: y7 s4 u4 Z3 j/ |
// changes the heatbugs have made. The ordering here is. B5 J% H( l* Q& U4 d. y9 p
// significant!* U8 b) }" Y ]/ n. y! N4 r, @
, X2 v7 Y) I% {! a. \ // Note also, that with the additional) L! R* V) e6 M
// `randomizeHeatbugUpdateOrder' Boolean flag we can2 G, ^' Z4 r" f+ E; u- z* A# s
// randomize the order in which the bugs actually run! ^/ g2 Y7 H9 L% |! x; q2 q1 x) X7 A
// their step rule. This has the effect of removing any
& Z4 {2 o0 Z H/ N+ i* v // systematic bias in the iteration throught the heatbug8 W% s' M; u9 J. b& ?
// list from timestep to timestep
( m+ q9 B. v7 H& h
" b* ]9 b2 W% f5 G& ~ // By default, all `createActionForEach' modelActions have
5 I* _: c) V& F* R // a default order of `Sequential', which means that the
$ A% ?( F! d: Q t$ v$ A // order of iteration through the `heatbugList' will be
2 C1 a, @6 \# N( i) ~4 b9 ` // identical (assuming the list order is not changed+ ]" d- f6 L& s4 ?( i$ L
// indirectly by some other process).. I3 |9 @. X* t" r2 h+ V7 G6 q: @
6 U/ i, K2 C _& e/ {6 l9 u
modelActions = new ActionGroupImpl (getZone ());% i. Y" B- T: [
, a' j- M/ t ]/ E
try {
% |$ S' T% ^; m7 O modelActions.createActionTo$message$ Y, B& \: j% m; f3 m2 s
(heat, new Selector (heat.getClass (), "stepRule", false));
8 J1 t# B- g* T8 m9 b } catch (Exception e) {: D8 s1 i \; B
System.err.println ("Exception stepRule: " + e.getMessage ());
8 u" z n) X- J- Z- X }
! h9 d6 C' e$ J Y- |5 I
1 [( M' Q! [. w8 s! l try {
3 F" |( s5 k, P- d Heatbug proto = (Heatbug) heatbugList.get (0);
( A- ~1 w+ l N Selector sel = ; R- B" Q* v. d% D4 M' I2 H( }# i
new Selector (proto.getClass (), "heatbugStep", false);
" B* y* @% t8 w actionForEach =7 @+ k! k8 K m4 P# f( b
modelActions.createFActionForEachHomogeneous$call# b! q+ ^ {6 T; V) ?
(heatbugList,; l1 U' c% z( p' M
new FCallImpl (this, proto, sel,6 h4 [$ g2 O( a3 _
new FArgumentsImpl (this, sel)));4 w4 e. U) ]( N! |# i
} catch (Exception e) {+ J) [: y `$ f$ |$ Y1 ?6 G {
e.printStackTrace (System.err);% z: w8 t" m9 ?( J9 c
}
' j- d- M8 H9 s! I! n + T' i' i8 o/ e
syncUpdateOrder ();
' s" w/ K- V8 `; V. j- r: a2 F8 m# Z w/ R* G: D
try {
& f3 |! u7 c$ H9 Y7 z( X( f L modelActions.createActionTo$message
$ ^3 a/ |" S3 `9 v/ m (heat, new Selector (heat.getClass (), "updateLattice", false));' {$ J& u7 b4 L5 m
} catch (Exception e) {
" ^( h9 p+ n X* I- `' J. m. a System.err.println("Exception updateLattice: " + e.getMessage ());1 t; a' z/ ~" d% r. A9 y# X
}+ h) N; \' H' O7 J9 B0 \
% b; y3 \. b8 x, W1 M$ w2 G6 j& D
// Then we create a schedule that executes the
9 J1 W ~+ F3 R) l) d, t // modelActions. modelActions is an ActionGroup, by itself it4 i @2 ?5 y2 j2 m3 ^
// has no notion of time. In order to have it executed in y. l6 k, b2 ?* {
// time, we create a Schedule that says to use the# y* N) f9 t9 _$ T# e
// modelActions ActionGroup at particular times. This+ z- @" x' Q$ G' i7 p. Q0 t! Q
// schedule has a repeat interval of 1, it will loop every
' m* j4 ]: {3 z8 o- `# S ]' t2 w // time step. The action is executed at time 0 relative to5 a/ O7 b$ H8 L3 g2 T
// the beginning of the loop., o" j; m6 V- ?; V. ]) o6 R
( y5 s# d7 b1 @) f. i // This is a simple schedule, with only one action that is
# G+ q6 g# F' c- P p* |! Y5 F. B7 Z // just repeated every time. See jmousetrap for more! B' R, s4 R8 |) Z
// complicated schedules.
% J1 U2 ^ h8 D& g) H
5 w7 d# f* E0 F U* p x2 ?. e3 k modelSchedule = new ScheduleImpl (getZone (), 1);
4 w1 k, d% \. Y% n9 O8 ^7 A0 ^5 K modelSchedule.at$createAction (0, modelActions);
0 ~0 U" W$ A2 V; u
9 d8 n; v! A( e' L$ ~ return this;6 q/ M/ Y( ^: k
} |