HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) p/ M! v1 J/ u" H- l8 w
2 H/ T6 a* _* Z! A public Object buildActions () {- |$ g& z& f; U/ ^, U u
super.buildActions();- |8 i7 N; Q4 m; z$ `
/ i5 D2 O8 l& Y8 f2 y' a
// Create the list of simulation actions. We put these in2 j% Y% `9 h% C& B
// an action group, because we want these actions to be
% P5 E. h3 V; D' C // executed in a specific order, but these steps should* d6 N _6 ^, e! }! h* K& ^3 \0 \
// take no (simulated) time. The M(foo) means "The message% {8 |3 Q, p8 m9 Y# k
// called <foo>". You can send a message To a particular# C, Z! ~& W" F: J" L* j
// object, or ForEach object in a collection.
" D( r0 P2 l; y; j/ u$ n
+ h4 ? p, e3 p1 Y, Y- C8 l // Note we update the heatspace in two phases: first run9 b# Q5 l! k7 H6 ~' |7 \
// diffusion, then run "updateWorld" to actually enact the
8 |* t; P/ c. s4 | // changes the heatbugs have made. The ordering here is
8 H( `& C) F' Q' q7 q) _, h! L! F // significant!
2 k7 H7 a0 \1 T1 l& C/ Z; N- \3 d, H - k8 y4 c) _5 K r7 C
// Note also, that with the additional
$ [" g O7 D3 \4 @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
/ L" c S' h9 c! \) i) B+ G) V2 n // randomize the order in which the bugs actually run
* g+ W/ [1 A/ Y3 e7 p1 R1 m. ~ // their step rule. This has the effect of removing any0 H. Q5 ^1 d+ Z
// systematic bias in the iteration throught the heatbug" J& [: b0 O, D8 p3 d! J
// list from timestep to timestep
6 E; v/ \, O( M# B" n4 ^% _& a 6 L7 ]6 v2 ]& u9 ]8 S$ m! m. X
// By default, all `createActionForEach' modelActions have
5 w6 W. O* q* b' G; L7 H // a default order of `Sequential', which means that the
+ _' G$ T, C/ {$ R% T/ a- l9 B // order of iteration through the `heatbugList' will be
# w! @/ \& [3 ? // identical (assuming the list order is not changed
0 Q7 ~& L6 x7 l5 T // indirectly by some other process).* C m. j+ ?' i! _$ ?* F4 L% J, m. a
# f& @* [2 M4 @% K: w/ |
modelActions = new ActionGroupImpl (getZone ());
1 @# {4 m% V$ l# G7 }
8 i/ m- f8 n& v* \' W& q; {# m9 D try {
l7 z- f i* [0 y* G# R3 N/ k, Q modelActions.createActionTo$message8 a+ G9 Y, u7 b+ w
(heat, new Selector (heat.getClass (), "stepRule", false));
1 P4 l; z- G6 \3 n! l } catch (Exception e) {
q! ]# C, r/ n* e' i System.err.println ("Exception stepRule: " + e.getMessage ());
5 `+ j. A# N4 w# a* _/ j; K }
& ^) h8 @2 y) C# Q9 J c8 U0 `
# T" d' P; w# T' X. x: Z$ R try { ?2 G/ o% K/ T0 J5 e
Heatbug proto = (Heatbug) heatbugList.get (0);
. r" C2 k' C- A4 Q& F Selector sel = r" {: i% U# Y3 M2 s) e
new Selector (proto.getClass (), "heatbugStep", false);0 f5 I& d3 O' ]
actionForEach =( A; ^5 \/ I& c8 P
modelActions.createFActionForEachHomogeneous$call( a+ l, P2 }1 l) A
(heatbugList,
: s* M: E% V7 i' p new FCallImpl (this, proto, sel,) U" }+ ^8 D$ e0 a( @
new FArgumentsImpl (this, sel)));2 Q' f/ B8 o- |
} catch (Exception e) {
5 x0 S; }, }, O( c- N7 v6 D e.printStackTrace (System.err);! ], _+ E+ X( l X( C3 s1 G
}, m! l+ @6 \9 z P9 D9 {+ H o. } M
2 G/ V8 C( {1 Y* ?9 l$ n$ r syncUpdateOrder ();
: C9 k( X* A9 q( `8 Q
" J$ K' Z& f+ _ try {" |$ I2 G& z4 {/ I
modelActions.createActionTo$message
% t8 V$ ]0 C& e c4 P (heat, new Selector (heat.getClass (), "updateLattice", false));2 T7 b" i# [1 b: x! f
} catch (Exception e) {
. Q" w0 T! P( D4 U: n System.err.println("Exception updateLattice: " + e.getMessage ());
/ ]6 t2 i. O* E5 N }; i5 g% ?: {. X3 n& v! z* Z) J0 e
" _% p0 h1 u& l" w! D) o7 e
// Then we create a schedule that executes the! ~ l v. r7 Q* y
// modelActions. modelActions is an ActionGroup, by itself it1 r: [9 j( o5 h. R1 U! \
// has no notion of time. In order to have it executed in- L/ e3 x- ]; v+ N% b: k0 A( u! v
// time, we create a Schedule that says to use the L. U2 o2 e& [6 r
// modelActions ActionGroup at particular times. This4 H1 y1 b0 u% l5 Z5 q. b6 x
// schedule has a repeat interval of 1, it will loop every/ {% }/ s Q$ [; p0 o4 {
// time step. The action is executed at time 0 relative to
- B2 s. l4 ?/ k8 V$ f! R, ` // the beginning of the loop.
7 V6 t( f/ l7 B
9 c" F9 \. Z8 L3 |% v // This is a simple schedule, with only one action that is: ]5 Q% T' b3 e9 U% i3 b5 l; L
// just repeated every time. See jmousetrap for more
M$ h H2 ]: N // complicated schedules.' z9 D4 q7 ~0 Q8 S8 h- ^
3 A* ~1 a* R! T8 g2 o* D) Q! \
modelSchedule = new ScheduleImpl (getZone (), 1);$ a4 F& x# j% g1 C @1 W, T7 d' i o* [
modelSchedule.at$createAction (0, modelActions);
2 N! i) _$ _6 U6 n7 Z- L( N' b
# d, @. m4 T/ u1 X return this;
' t: c8 r1 R J0 b$ S } |