HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* X6 d! X5 ~- o: R5 r# ^; ^ I6 N
: }- j: f0 @3 D3 p/ K2 P2 j
public Object buildActions () {
; @$ e( ]! `7 N! y& x super.buildActions();+ _3 Y. |/ A* j; V" y5 q4 y
! B+ C8 @/ J7 f C z // Create the list of simulation actions. We put these in7 w5 G; b+ h( X; Z+ D* U) H7 Q( z! E
// an action group, because we want these actions to be% n' {" K1 K* b' F, |% K8 c5 ]
// executed in a specific order, but these steps should" D0 a" w T( |6 ? U4 J# W
// take no (simulated) time. The M(foo) means "The message" C6 a- X0 s$ P& F( [# g" n
// called <foo>". You can send a message To a particular
. _2 _8 z( C B) M5 j // object, or ForEach object in a collection.
+ ], Z! A, }% F4 J8 n ' K& f7 r2 l# x
// Note we update the heatspace in two phases: first run5 t# N) ~! S h. U# b
// diffusion, then run "updateWorld" to actually enact the6 F; F. U- ]& Y4 q$ ^- o
// changes the heatbugs have made. The ordering here is
3 U! e: F9 _( G3 _ // significant!+ X0 e6 P' B) t
- b* D7 C) h4 `2 h% e ` // Note also, that with the additional
/ U6 _7 G7 d# r7 b- B* \5 f // `randomizeHeatbugUpdateOrder' Boolean flag we can; u$ Z" i2 N5 y! n+ l) i
// randomize the order in which the bugs actually run
) [& E( K; `* z& d // their step rule. This has the effect of removing any0 n e4 }9 S9 n
// systematic bias in the iteration throught the heatbug! j" l7 X0 }0 N
// list from timestep to timestep# j) c' e, e0 \" X) v: Z1 }; j% f
. p. C; t$ n7 V8 K( L
// By default, all `createActionForEach' modelActions have
" O! r9 S, O3 s9 H // a default order of `Sequential', which means that the
: T/ B0 Z( I. P0 d( \7 E; c // order of iteration through the `heatbugList' will be
3 C3 }& e& p: b* J* K8 Q; O // identical (assuming the list order is not changed, s ^8 Y+ E! u2 n3 ~6 _
// indirectly by some other process).7 M% O6 C& p' v' R
! |$ A1 o5 I4 _; V& \5 t1 i+ Z9 B modelActions = new ActionGroupImpl (getZone ());
# ~; x7 J) U6 d* g! P: F( g4 u" \1 G4 i1 S/ A% O5 g" u. i! D0 o
try {
- ], G# r- z1 P1 S0 q+ C' ] modelActions.createActionTo$message l- r/ I9 w* q
(heat, new Selector (heat.getClass (), "stepRule", false));
8 p+ z9 j0 e$ D) {" R4 Q' j } catch (Exception e) {
2 ?2 Q# h% m5 _! Z+ d, m4 w0 U( Z# f System.err.println ("Exception stepRule: " + e.getMessage ());1 P! J& V: d9 ]
}
/ ^7 r8 B& P# \. j
" ]- o) R! K& o' Y5 J/ q0 D try {
) f7 K; i" d' x Heatbug proto = (Heatbug) heatbugList.get (0);% V& H5 a8 N* r
Selector sel = ! h' b. b. t$ e) E: W2 L' I
new Selector (proto.getClass (), "heatbugStep", false);
5 s6 Z3 Y# Z* M N actionForEach =4 ?$ E# z8 g; w# v3 A( f
modelActions.createFActionForEachHomogeneous$call% J- P2 L% T& y9 f3 p" u
(heatbugList,2 A1 O5 [) P' L3 K# E: e
new FCallImpl (this, proto, sel,
- R- N T* O- J! ~3 T" [ new FArgumentsImpl (this, sel)));* S0 v$ H c! a; [$ a2 G% `
} catch (Exception e) {1 B5 \+ j3 m/ K- b. A
e.printStackTrace (System.err);
3 r* z6 g7 L- t5 _3 ]4 z) v3 f }
8 K& ?; h9 ~0 Z* D: Z0 c7 E & W8 G# v1 d/ k5 X1 ]! |
syncUpdateOrder ();7 O: L. @% y" j- L7 W9 K/ M- L
- h& u" |/ ^4 i! v. S. ?; B try {
) E1 r X5 l) b& Z3 S8 x, k t, J# u+ O modelActions.createActionTo$message
n& O0 [2 |$ u1 t( c. G (heat, new Selector (heat.getClass (), "updateLattice", false));( i6 M$ y/ F3 Z0 i3 `+ h) y
} catch (Exception e) {
4 A& S; C5 Y- o$ S. ~" ~7 s$ G System.err.println("Exception updateLattice: " + e.getMessage ());
3 a1 n$ l1 i/ k# R' ] }
9 @% F. L* r8 r% S. N : P$ c1 s3 W5 R
// Then we create a schedule that executes the
8 v7 u# h4 ]+ R; o1 B/ l" M* V // modelActions. modelActions is an ActionGroup, by itself it
' g0 i4 G, G7 a+ | // has no notion of time. In order to have it executed in/ C. S' Z2 z4 G+ [1 p S9 \6 b
// time, we create a Schedule that says to use the
+ n7 j2 i, [* g; x! c/ @ // modelActions ActionGroup at particular times. This( ?/ T' B( N' {+ `6 M
// schedule has a repeat interval of 1, it will loop every+ [1 C& ?) K, i
// time step. The action is executed at time 0 relative to
8 G' i. o0 `( K* w, _5 V" V // the beginning of the loop.
- J) |. m. x$ k7 e. f% s; X! T
) H; x8 G0 h+ ]6 ]: K3 G // This is a simple schedule, with only one action that is# V `3 z9 T% P3 v! R |, F' r
// just repeated every time. See jmousetrap for more
% N O6 f7 `# i: H: B6 {* {) w // complicated schedules.
" g1 X) c( i" |
' q: i" }9 d- a1 u3 X modelSchedule = new ScheduleImpl (getZone (), 1);/ a0 K' E' i }! j6 c
modelSchedule.at$createAction (0, modelActions);
. G' H& Z& V$ w' ]2 b# v& V8 z. P
6 `, M5 j1 z' E1 n6 ~8 I v return this;
* K4 Q( y( ^8 a8 s- v9 f3 K } |