HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# q# i& B/ O; a' D) {5 O1 ]
5 u' Q* t# D# C3 H( C1 d' [0 n public Object buildActions () {
$ s' v* J7 z; D' V' U! x2 t super.buildActions();
2 A# U' T" s! J " S- k) O/ ` V- L9 a( [8 r6 Q
// Create the list of simulation actions. We put these in4 k# M; ^9 g" S8 W1 T/ @
// an action group, because we want these actions to be
- u" J* Z* p t // executed in a specific order, but these steps should1 V6 T) R: Y9 d' _ d
// take no (simulated) time. The M(foo) means "The message2 y# _' D0 o1 ] H6 E4 F; M9 d- F
// called <foo>". You can send a message To a particular0 ]3 M m: P$ a8 J: Q5 V6 G
// object, or ForEach object in a collection.
0 I8 {- Z- P! E( V ~% R " e7 g$ j1 d5 ]% _& j- q9 \
// Note we update the heatspace in two phases: first run
: V# L' _( W8 F. A( E' m8 O // diffusion, then run "updateWorld" to actually enact the. S. d' B) A4 `( A3 U
// changes the heatbugs have made. The ordering here is
0 B, |- A% e$ k# E6 x // significant!0 A, }! I' h% K- m
3 k* ]) l% \4 G f // Note also, that with the additional+ t; G8 Z" Q9 N. L) V% ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
' }, J9 z2 Y5 T* D7 ?# x // randomize the order in which the bugs actually run
5 ?# J- K" W7 W: d5 Q5 D% H- h& }2 C // their step rule. This has the effect of removing any$ v/ t& G' C6 y4 m
// systematic bias in the iteration throught the heatbug
; V# g2 o( P B9 ^ // list from timestep to timestep6 o2 Q6 s& K" P7 Q" x$ D5 _8 H1 N a
: O9 Z5 ` c" R8 H: C( O // By default, all `createActionForEach' modelActions have$ q; { m' I, u$ l
// a default order of `Sequential', which means that the
N2 y+ ], _/ v& Y2 B // order of iteration through the `heatbugList' will be; W2 m& H1 W7 ~. l3 R
// identical (assuming the list order is not changed4 I. i) T* z( Y' |/ p" C C
// indirectly by some other process).9 a" o1 K( Q3 {( x" R! N
( u V3 g7 G2 {6 [. n& \2 n
modelActions = new ActionGroupImpl (getZone ());; J% w) T, w, F. D" p( e, d
& V7 \. Y, w( n( f" O4 j
try {
" R7 R; {+ k7 \' ~# E2 z modelActions.createActionTo$message+ g' m% L5 { R% Y M6 M
(heat, new Selector (heat.getClass (), "stepRule", false));
* a+ t2 |! I* l$ x% s A; J } catch (Exception e) {
" q4 h- q$ J$ K System.err.println ("Exception stepRule: " + e.getMessage ());
U( S5 |8 l3 k1 E$ `+ u' D, w( Q) y }' v u+ A' M2 K0 x
6 `6 {2 a3 P7 j
try {
% d& c# d- Y! s" h Heatbug proto = (Heatbug) heatbugList.get (0);
$ G: T( x3 `. r; m Selector sel = 1 \$ P S) u9 c+ D. j
new Selector (proto.getClass (), "heatbugStep", false);
) S3 u7 a) f2 y% {/ [/ L" c actionForEach =
1 d$ ~: f( q" D1 v4 P modelActions.createFActionForEachHomogeneous$call
1 N3 h' }& U) Z* s5 l3 H (heatbugList,
, n% y1 g, `# s1 ? new FCallImpl (this, proto, sel,) x) \% d: i& d7 R k' T9 A
new FArgumentsImpl (this, sel)));
) s. b7 E3 h; n* V/ O } catch (Exception e) { V; W; C9 t& {: F5 F
e.printStackTrace (System.err);
- a: u7 {. X1 \& i% V' ] }
5 |& W* m# I* r N) C( p. ?- i( ^2 j8 G( {
syncUpdateOrder ();
5 D) s) f7 m; k( J
9 @. W+ J3 N8 J* p1 A, L try {
$ c# }" i9 D+ P$ q* J modelActions.createActionTo$message 6 c/ t% g% w. Z/ A( @3 B% b2 k' I! A
(heat, new Selector (heat.getClass (), "updateLattice", false));) x( D) a$ o. i/ C
} catch (Exception e) {# Y2 g; v. z$ j# a0 R( J, J
System.err.println("Exception updateLattice: " + e.getMessage ());/ m5 B2 O+ d' a. @4 {( W+ k: F- {6 M
}9 [/ g3 h7 B3 a2 ~% |
q5 w% e4 ~9 H // Then we create a schedule that executes the
n& {5 D+ d. r4 r* W3 `5 @8 h // modelActions. modelActions is an ActionGroup, by itself it
0 l% n- H! E8 x8 F/ o- m, S5 U // has no notion of time. In order to have it executed in
* [1 R- d" D8 l9 c7 S // time, we create a Schedule that says to use the
* L. p' X% U n' r7 h' }$ n. x: G3 w // modelActions ActionGroup at particular times. This: m3 L% F% E4 ^5 h# R: [
// schedule has a repeat interval of 1, it will loop every
& Z) e. R$ B3 O& a // time step. The action is executed at time 0 relative to
- K: e' q3 Q6 X3 c; I // the beginning of the loop.
2 f, J% I/ b* M$ ~4 ]% X( T* x) a: j* e( O7 I: M w/ w0 D, u
// This is a simple schedule, with only one action that is
, I2 R0 l4 e _ // just repeated every time. See jmousetrap for more. Z" g+ _0 d( R, I/ N$ w& a
// complicated schedules.8 b! u7 Y& W0 Z; `( a
! {5 u N9 \% [* k& K4 d
modelSchedule = new ScheduleImpl (getZone (), 1);& U. b" B- h- Z* G7 O' L- {
modelSchedule.at$createAction (0, modelActions);
) x( t% c& v9 `7 m' P
/ ~# [& i7 R7 v% x" w" G return this;- R, Y. k! b) `1 I3 m
} |