HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- \: t j! e* T( k! U7 _$ k0 S
. J1 [ v2 {% |/ s9 M public Object buildActions () {
* s3 Q$ ]$ d6 Z5 A v super.buildActions();
3 M" e4 |2 ? @+ D( G: s+ P - ~, v9 A4 L& g7 g' [
// Create the list of simulation actions. We put these in6 W' q' p; i- b F& m. p# D' X2 M
// an action group, because we want these actions to be
% ?: X3 K7 W8 c, C( r* \1 P // executed in a specific order, but these steps should, S# S. i" @( X& q+ \$ R T
// take no (simulated) time. The M(foo) means "The message& ^2 _6 ~/ p5 ]' w' o
// called <foo>". You can send a message To a particular
' r! F' i6 T# |3 f5 A' |4 C. I // object, or ForEach object in a collection.
) i4 p1 [5 g8 c% ]. o ' C; R7 U/ f/ ]) `3 c+ }6 O
// Note we update the heatspace in two phases: first run
1 u: y: g* D) q // diffusion, then run "updateWorld" to actually enact the
1 O) {$ a, b4 A) a // changes the heatbugs have made. The ordering here is7 q. r% c2 j1 `( |
// significant!9 t( [ `5 l( H& k
! L( [; ]9 L6 h6 g; ~ // Note also, that with the additional, `3 B- h- m; @$ a( L' V
// `randomizeHeatbugUpdateOrder' Boolean flag we can" ]1 a$ i2 t2 |9 B @- y
// randomize the order in which the bugs actually run+ S0 p) R. G" Z8 Z
// their step rule. This has the effect of removing any
% N4 a. ~' W- S3 }( k" W! @ // systematic bias in the iteration throught the heatbug% C0 t% ]2 q) V# f
// list from timestep to timestep
0 @5 B! _3 b& D1 B$ ^
$ E V _0 p# O% o // By default, all `createActionForEach' modelActions have
3 m/ m8 Y1 a/ {& E# x // a default order of `Sequential', which means that the: n; F* R5 i+ e& l" ~6 N
// order of iteration through the `heatbugList' will be4 z, g' _9 }" Y7 j
// identical (assuming the list order is not changed
! s% f! i! M) w4 \/ |; _ // indirectly by some other process).. ]' L. m1 X8 s( z4 u' x1 @* Z
[2 {( _( n( s' ^$ S
modelActions = new ActionGroupImpl (getZone ());
$ q) Y7 g5 ^+ e" H
5 i2 h$ y$ d0 Q- w, r1 { try {, S; u. [$ X0 W" a
modelActions.createActionTo$message
* W6 q ]3 B0 \, Q" L (heat, new Selector (heat.getClass (), "stepRule", false));
# c/ K, S8 A5 h8 F& r: l5 x( u } catch (Exception e) {
3 H3 b# |) a! } Z/ g) [, K System.err.println ("Exception stepRule: " + e.getMessage ());
1 ~# W- |) E4 M# ^( J. Y }4 I% b9 X( C) X. J( w
% F+ g* Y( m4 t$ ]0 u try {
4 X- Z2 L5 J# v* Y. w Heatbug proto = (Heatbug) heatbugList.get (0);
+ w: R. l+ O) h) c Selector sel =
) U$ h8 K+ ]& e$ k& `9 t new Selector (proto.getClass (), "heatbugStep", false);* {/ J$ q7 z$ k& m+ k; J
actionForEach =
! r f4 w5 v7 e* f6 r0 k modelActions.createFActionForEachHomogeneous$call
5 h; a2 p" ]8 @* G (heatbugList,
2 M( f+ R% J; r( X* [3 T4 V$ t new FCallImpl (this, proto, sel,
0 ] I% H+ f! V. F+ C9 w new FArgumentsImpl (this, sel)));
: z8 C3 k+ `2 m } catch (Exception e) {
. r$ T( [. T2 U. L( R5 |5 ] l e.printStackTrace (System.err);
! Z- L9 _. O' M7 g) R }
9 q* t9 H8 u: u3 y/ i% v6 S
5 W; y0 D& f! I8 i( A+ k7 C8 F8 { syncUpdateOrder ();% H% c8 I* B' D2 [# e) v4 P
- a% n8 ^ X8 k9 N( ? try {; M/ k2 t. e" H/ _3 y
modelActions.createActionTo$message
6 ]7 E7 ?+ C, @$ w; d# o3 ^ (heat, new Selector (heat.getClass (), "updateLattice", false));$ S# J2 F, w- [1 @
} catch (Exception e) {/ I7 ^+ s; ~+ k1 x% P3 r
System.err.println("Exception updateLattice: " + e.getMessage ());4 N# _+ O9 i* i0 B9 b
}
3 T9 N1 \% b! q5 B
M6 v1 O! ?/ E) j, b // Then we create a schedule that executes the9 E/ u1 G, N3 Z7 o; H- f* M) B
// modelActions. modelActions is an ActionGroup, by itself it# t) h; G: K f) O# q
// has no notion of time. In order to have it executed in
9 F/ G. S3 Q% W$ V' X C6 s // time, we create a Schedule that says to use the
" u& _$ d/ B/ X2 p/ w // modelActions ActionGroup at particular times. This
6 C( ^% \. H- O; |4 Q" ^ // schedule has a repeat interval of 1, it will loop every
. x, q( m/ O: b" w0 f( n" g( `4 V // time step. The action is executed at time 0 relative to; ]6 n* q/ E, {+ d
// the beginning of the loop.+ x9 p: M2 e8 T/ R* P' W7 N$ C5 K
# t( m! u6 Z! j- E: B/ X0 b // This is a simple schedule, with only one action that is0 f; Z! k8 H( y
// just repeated every time. See jmousetrap for more
' W; T f8 e# C+ o4 ~) q // complicated schedules.
; T' I% j6 ?5 l" u: q
1 ~1 J" D( R; E. K7 \6 j1 t modelSchedule = new ScheduleImpl (getZone (), 1);* h' a5 N, n8 v4 `9 i+ B
modelSchedule.at$createAction (0, modelActions);& c/ m& I: ^( p% d3 M3 E! U
: f1 i( a8 x. x$ F9 Q' y. h* z( N return this; p, t/ }# P: }5 K) l, U
} |