HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ V/ \& T5 G9 [/ Q6 ^) w) Q* _0 v& `! Y4 P( y* h6 a& c
public Object buildActions () {
6 Q& N" ]9 ]: I2 U super.buildActions();
' n' N( G! d. P }: d$ @
0 ~' `' Z- R' Y# K3 v0 N& k' C, n // Create the list of simulation actions. We put these in
( t1 D2 C) u! }6 b // an action group, because we want these actions to be
; U) L+ W6 ?$ T. W3 B8 [& L* _ // executed in a specific order, but these steps should: I( Z5 a Z7 [: G! D7 G
// take no (simulated) time. The M(foo) means "The message G% p3 d8 W! p& D9 J9 J% G
// called <foo>". You can send a message To a particular
0 P& L5 n# ?) b6 K% B1 |- Q // object, or ForEach object in a collection.
; ?4 z- Z+ e# M4 a & |; x E7 ^5 U9 \! r$ V! F4 V
// Note we update the heatspace in two phases: first run8 I- A: b1 E0 R' @! f
// diffusion, then run "updateWorld" to actually enact the, B) `6 [; S4 S' |8 Z- }
// changes the heatbugs have made. The ordering here is. d* @1 T3 J' a! n2 ]7 E5 q" v. ?- `2 O
// significant!- E O1 H3 v8 d, X
. |% F+ \/ Z' [1 C' x5 E" d; t, g
// Note also, that with the additional+ w0 D, H( s- g: I4 E/ M; {
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ S. ?, ?* h1 ]2 R. p; Q" n* @
// randomize the order in which the bugs actually run6 m+ O3 E) l( ]
// their step rule. This has the effect of removing any
# \$ S s# v+ z$ P- l) C // systematic bias in the iteration throught the heatbug
: ]& `, O1 A. H // list from timestep to timestep: a; v0 X+ f, K! a
) b$ i" X/ r/ R& t+ t. W
// By default, all `createActionForEach' modelActions have
4 b$ V7 h3 p3 H // a default order of `Sequential', which means that the i; [/ X) R4 u4 T
// order of iteration through the `heatbugList' will be) l; z( ^ M: M8 R
// identical (assuming the list order is not changed
1 K5 S6 m+ C7 d# Y; b l7 g // indirectly by some other process).0 p7 B1 Y2 {+ j
* V8 ^1 X! w. k( ~ S
modelActions = new ActionGroupImpl (getZone ());
7 M( \5 w4 ^5 `" o2 S$ Z
" f% H6 f8 X: u. k0 I$ m2 t try {9 m: y! `+ g( b/ {* I& q
modelActions.createActionTo$message
. a2 e- i" ~8 p, C2 j8 [: k+ ^ (heat, new Selector (heat.getClass (), "stepRule", false));, C( U/ M: |- j8 H9 j: ^
} catch (Exception e) {' o" J `. @: {' ?0 x) i1 S
System.err.println ("Exception stepRule: " + e.getMessage ());
/ G$ e3 r& w6 @. m }
# J) o4 ]$ U9 {' F9 w( o
, E' F+ k6 b# k( I" G try {7 A1 I3 i' N. h' U2 X7 e6 y
Heatbug proto = (Heatbug) heatbugList.get (0);
; r* L/ A7 l* u" a. P# B- D) ]6 i4 W Selector sel = 8 X- f8 x; |- j, h& e( S7 f
new Selector (proto.getClass (), "heatbugStep", false);8 J2 L" @8 B3 t
actionForEach =
" V( x/ `8 v8 o5 }2 v6 d7 b modelActions.createFActionForEachHomogeneous$call
: T' s7 ]' Q& T5 @" j- D. M5 h& n (heatbugList,3 a2 h1 Q( |2 L/ i, W$ t0 Z; p
new FCallImpl (this, proto, sel,
6 y- `1 J: W: J, Q* J5 R( m new FArgumentsImpl (this, sel)));4 b5 I6 r8 y; c( \: P: c/ J. _4 W
} catch (Exception e) {
. G$ c7 N8 E0 @" v0 u, r" f e.printStackTrace (System.err);9 n. A2 [" W$ c/ K% Q+ t; Z
}6 j( {- d- H1 U: w3 g2 F5 @
9 i. c: [; n+ {' P syncUpdateOrder ();
' g: P& J; ^8 t; s5 V/ c+ i/ g z1 h7 @9 ? K/ M3 e8 w+ m
try {
/ y. s. Q; p% s, s3 W. d. G6 _- V modelActions.createActionTo$message . N' g* Y# V/ S) i& R
(heat, new Selector (heat.getClass (), "updateLattice", false));
% w* p6 q- [- ^0 j( u } catch (Exception e) {
* b, \. _1 t! v System.err.println("Exception updateLattice: " + e.getMessage ());/ x# ?; Q; ]! A( H7 u
}
) ] f' _. _0 e1 A
! m+ O) y. X. |$ v // Then we create a schedule that executes the
+ Z$ M" K9 `8 \ r$ V- [7 { // modelActions. modelActions is an ActionGroup, by itself it- m; u) [0 N1 }% }7 C4 R
// has no notion of time. In order to have it executed in
: u5 P% h! A: A6 Y3 W // time, we create a Schedule that says to use the
. \: D e3 F, V; K5 a5 X8 C // modelActions ActionGroup at particular times. This7 y7 c' ]: Z# h- a
// schedule has a repeat interval of 1, it will loop every, s' \' k( N# ^9 H. g
// time step. The action is executed at time 0 relative to1 J. n4 l- S4 V' K; u7 M
// the beginning of the loop. ]: F0 n3 j5 Q* l
! J1 i$ z; s7 S) e
// This is a simple schedule, with only one action that is+ {2 a1 s; i, ?7 G
// just repeated every time. See jmousetrap for more, F, S4 V5 E& E! }: v" q
// complicated schedules.- m9 b- ~2 a2 b; \' z% y8 O
# g! V1 ]' _! g" l' P8 T0 v
modelSchedule = new ScheduleImpl (getZone (), 1);
8 G: {* |4 _( M; u* @7 D modelSchedule.at$createAction (0, modelActions);- B C5 Q$ z, ?/ `" M1 V. |! }* I
) m" n( Q) e! E- v/ Q/ H0 p( a
return this;
% T+ g2 c/ ~8 g1 ^' Y. y } |