HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ R% t0 p# L9 ~
% {+ j- q8 [! V: [4 o6 F3 Q
public Object buildActions () {
; n0 b& {1 ?' }/ ~. [ super.buildActions();
; X2 q) A+ Z; |; y7 |8 g ; T( G2 W" X' I6 H$ k0 d
// Create the list of simulation actions. We put these in
! Z/ ]8 q) M1 N$ [' r5 c ^& {1 p // an action group, because we want these actions to be9 t( [' B" C+ E$ g' G t/ M
// executed in a specific order, but these steps should' @6 e; [ t9 {$ q) c( L: I- Z5 [4 b
// take no (simulated) time. The M(foo) means "The message/ G* |3 Q$ }' ^3 Y
// called <foo>". You can send a message To a particular
* ^, e9 ^5 N( i# V C // object, or ForEach object in a collection.7 c p; T" ? V
7 R# n3 L0 @0 b- t' n9 _. S // Note we update the heatspace in two phases: first run
$ m: e* C" p4 ]( F& z. S' l. q0 T% Q // diffusion, then run "updateWorld" to actually enact the8 C) ] V& B J
// changes the heatbugs have made. The ordering here is: ?( K9 k8 {) h2 l' E
// significant!4 O1 z/ `- m* K, L/ P9 n
9 G- x3 y. ~9 ~
// Note also, that with the additional
$ C* d* h: Q& t+ w h // `randomizeHeatbugUpdateOrder' Boolean flag we can0 W5 r& Q' W8 j2 {% c
// randomize the order in which the bugs actually run
- c8 w9 k+ g( u // their step rule. This has the effect of removing any2 H5 a& L H+ n0 o
// systematic bias in the iteration throught the heatbug2 k/ G, e$ y5 A3 m; h& |
// list from timestep to timestep$ D" M- u) x4 m7 Q- Z* c. U4 \1 U
6 u: ?3 f W; _0 i# U // By default, all `createActionForEach' modelActions have
! _% |3 \% b/ f. n3 M- [' p' C8 t // a default order of `Sequential', which means that the
# f" e$ |4 y. f9 C // order of iteration through the `heatbugList' will be
$ s, ^* F+ |# }* n/ K // identical (assuming the list order is not changed; b/ S8 o+ v5 i5 a) ? y# [
// indirectly by some other process).
/ J/ x" C; _. ~% d. } 5 v3 h) S' }& J+ H& f
modelActions = new ActionGroupImpl (getZone ());
+ ^+ N) L0 f0 d
K! L4 d- ~( S1 @8 t try {0 q3 X& r; {/ N6 ]4 k
modelActions.createActionTo$message0 O8 m$ A- f$ G9 p8 A4 ]9 R
(heat, new Selector (heat.getClass (), "stepRule", false));$ C3 H7 ]5 }7 ~% u% p8 C3 l
} catch (Exception e) {
8 D* d- y6 \8 ?! G9 `* G System.err.println ("Exception stepRule: " + e.getMessage ());" H$ I5 X9 Z6 o8 _; f6 e
}
8 _7 k E) j; d; P: a1 |) k4 _, L3 b4 Z; S P
try {! y) M- E; F% R2 n( d6 ]7 R
Heatbug proto = (Heatbug) heatbugList.get (0); n4 G7 S, G. E+ u7 [
Selector sel = : p% z! c& U5 H" a/ ^
new Selector (proto.getClass (), "heatbugStep", false);
/ a& s9 e9 Y& f; L actionForEach =
0 ~) |( ]3 J% l3 C8 d modelActions.createFActionForEachHomogeneous$call* Y9 f- W. j) @/ M8 u& N
(heatbugList,
2 W( M- q1 d$ L new FCallImpl (this, proto, sel," W3 C }5 A. \$ g* I) T
new FArgumentsImpl (this, sel)));
! z- i8 t/ x. Y& m1 O; w$ P. p } catch (Exception e) {9 n8 S& l( L) v* {2 ~8 p0 y
e.printStackTrace (System.err);
# Y' t( K2 \: ]7 j4 q$ N% l; M }" v# O" K% h2 c# u8 k* U1 @' S2 O( T
0 G F. ^/ B1 T$ S
syncUpdateOrder ();
' b5 [# O" `& |3 {$ v) B4 L8 v1 f: a. C' T- Q
try {
( r. ]* F' O q. x/ Y' l modelActions.createActionTo$message : T) H% a3 N3 u% c: x
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 Y. A0 O. A# l: L- x } catch (Exception e) {
- ^: J9 g' I3 e5 g' e System.err.println("Exception updateLattice: " + e.getMessage ());
! o3 V# N$ ^; p! A { }
`: {. S) G% [( E4 R* `$ i
! e& j) {2 E$ }/ Q7 p2 E8 l4 x // Then we create a schedule that executes the
6 ~5 S/ r |) T, ?3 }& c) O // modelActions. modelActions is an ActionGroup, by itself it9 n2 ~8 p6 X* X+ w. E9 @
// has no notion of time. In order to have it executed in
& w# Y4 i) H. Z // time, we create a Schedule that says to use the
8 ?3 ^: U3 d$ @7 @3 A/ c" C2 | // modelActions ActionGroup at particular times. This
. `: Q4 p3 E1 N, T // schedule has a repeat interval of 1, it will loop every4 L0 D6 K1 j# B7 p
// time step. The action is executed at time 0 relative to
' {: Q5 `3 E: r! n7 V. G- S // the beginning of the loop.
5 W! b ~- }9 l( e5 {: I: T4 K* o$ w. b M& y7 @
// This is a simple schedule, with only one action that is
3 z5 w; @& R9 @) g( n9 P // just repeated every time. See jmousetrap for more8 e {) O# F' m: ?
// complicated schedules." O! u" p G* ^% f& }% d: ]
8 Y/ W4 o( X$ E modelSchedule = new ScheduleImpl (getZone (), 1);
9 L: e+ H9 W8 l modelSchedule.at$createAction (0, modelActions);
8 {2 B2 O6 X+ h" i8 E( g: J# e5 Z : j' k' K. p7 U% _/ ]5 ^6 J8 R
return this;& @# C, W& S! j6 M# ]
} |