HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& I% L, D7 C9 ^% t+ c: t( W6 r
0 ^6 r! q; ^$ b$ N) F public Object buildActions () {
( V1 T: D( m! e, I2 o! P super.buildActions();
" o \! y. R, r& g " _3 P9 `* n: E: z
// Create the list of simulation actions. We put these in
. o3 K+ c/ Y7 |* [ // an action group, because we want these actions to be1 L( |& z; X' W9 P' @# ^
// executed in a specific order, but these steps should
3 Z! ?% Y A+ D // take no (simulated) time. The M(foo) means "The message1 u+ t! d9 C% c& A
// called <foo>". You can send a message To a particular
1 o, p5 m; k6 s2 S& g9 ~$ ?; K // object, or ForEach object in a collection.
5 @% v, m$ b+ G: I0 Q0 H* k w8 e3 U7 ^+ p* A7 n
// Note we update the heatspace in two phases: first run* e% B& W% D) X0 l* ]
// diffusion, then run "updateWorld" to actually enact the
, ]# {9 \6 ^0 g' E) K( ~' f // changes the heatbugs have made. The ordering here is8 x G) P) {7 n7 k, }5 `' ]
// significant!
l+ h' G( w- J+ F9 X3 T
* a& L5 n8 Z; ~6 x5 l: p // Note also, that with the additional% f7 ^# y: n* g- r+ z! e
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' f9 U2 Q8 l4 ] // randomize the order in which the bugs actually run) n4 A# M% S3 C& w+ D) e( H
// their step rule. This has the effect of removing any
5 ~6 n! @$ M8 y/ r5 j+ q# D // systematic bias in the iteration throught the heatbug+ h# u5 X+ k) s( @" q
// list from timestep to timestep
. G* Y$ U6 ~% L2 l b $ t( @, u+ e( d. W% j: W* t
// By default, all `createActionForEach' modelActions have
( A( Q5 U6 v: X# d% P M$ `3 ? // a default order of `Sequential', which means that the" v* M$ u' Q, o8 S4 B0 \& G
// order of iteration through the `heatbugList' will be- q+ Z0 L2 q# t/ T8 X* m% g8 Y- k9 {
// identical (assuming the list order is not changed* H% ~: j- F8 q* }
// indirectly by some other process).; F$ \ Z3 s& d: ]; @3 P1 W9 Q
- _+ b; J. j8 j* H0 i N. j2 _ modelActions = new ActionGroupImpl (getZone ());
/ _& d5 T; U0 \* [* J2 I8 D8 I: c2 {$ E$ q& R7 G$ j; C# `/ X
try {! y& ^1 i/ O h3 u% J% N
modelActions.createActionTo$message
% m$ F- k7 r& _# j, G b6 J& b4 j (heat, new Selector (heat.getClass (), "stepRule", false));
# {* H% ?4 I; B1 U5 K0 S3 ^( u } catch (Exception e) {, Z2 W! g, p" y# N
System.err.println ("Exception stepRule: " + e.getMessage ());0 O% E# L2 L! I4 `+ K
}
I$ e0 p% f; R
# N ?( n3 \ s' \8 T( O( d0 } try {
3 w: g: r9 M9 Y. Y0 B: ?7 f Heatbug proto = (Heatbug) heatbugList.get (0);, |) o7 h, p& @% p+ i
Selector sel =
) ]5 t! }/ O* X! W9 ?* O9 F new Selector (proto.getClass (), "heatbugStep", false);* K! d$ b& V+ x5 m* r
actionForEach =
$ s3 Y3 w# d3 i) \$ w2 V' Z, O' h) d modelActions.createFActionForEachHomogeneous$call" k8 A8 S6 d& ]
(heatbugList,1 ]1 ~5 A9 \) I
new FCallImpl (this, proto, sel,
- g; a$ @2 |9 A! Q: Q new FArgumentsImpl (this, sel)));* r) f( a. e/ F0 }: k2 P7 S$ G
} catch (Exception e) {
7 t. B, q5 }0 ~+ a$ _- S e.printStackTrace (System.err);
9 P6 E* V4 t! J }
- I! I/ ?. ~, U/ y
0 A* T% B$ i7 c# c* ` syncUpdateOrder ();- h( X4 ?5 y5 U1 @
, r+ i4 c9 A) ^) y
try {8 z$ S3 J S0 ~8 X- B
modelActions.createActionTo$message
. ], O( N# U9 a o( _7 [ (heat, new Selector (heat.getClass (), "updateLattice", false));
' X1 {. d! z7 g- ?5 ^ } catch (Exception e) {6 w$ `+ B8 P7 ?) e
System.err.println("Exception updateLattice: " + e.getMessage ());
2 b, ?# J6 z6 ?. y }9 G8 D$ j$ o w* g9 m3 ^2 E; ]
6 U+ i; |% p& q3 K. ~ // Then we create a schedule that executes the
2 J. A# u, [' O+ u // modelActions. modelActions is an ActionGroup, by itself it) k8 r4 p! E: \! z
// has no notion of time. In order to have it executed in
8 k$ w3 e' H7 f2 d. r( j8 ~ // time, we create a Schedule that says to use the* u6 U$ q h! J0 u
// modelActions ActionGroup at particular times. This
/ h5 V' B7 Q7 u d9 B" U // schedule has a repeat interval of 1, it will loop every
. e( J3 r+ R$ S1 ^8 H5 L) N2 o" [ // time step. The action is executed at time 0 relative to
/ @" H6 z: e) Y' Q // the beginning of the loop.4 G/ o& m7 q! X: k, e8 i1 c
% c2 {8 o$ ?- E // This is a simple schedule, with only one action that is4 @, |& l8 r$ U% }
// just repeated every time. See jmousetrap for more
' i# v7 _& @) c. G6 ~5 G // complicated schedules.4 \( p* R6 y* S4 N
% S( @2 Y6 d' A" ]- Q9 g modelSchedule = new ScheduleImpl (getZone (), 1);
( t4 |9 _) ^% l modelSchedule.at$createAction (0, modelActions);
0 [# s* E" [% D, W9 K" }! O, y/ V
+ f8 K, c# B3 g. A3 S return this;1 |' k7 u. I) [9 R
} |