HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; \1 n- [& c. {5 j! y4 t' a# F- r) U+ @
public Object buildActions () {! [' y3 l9 J% J6 E4 V9 Q- x3 R# x. n
super.buildActions();
( }' G" V% {, c) @. B1 f0 c% Y
, z- B5 J, Z( `/ p& W, O // Create the list of simulation actions. We put these in4 a& K" V( e4 m( |2 D$ e
// an action group, because we want these actions to be
4 {: H* N. a( b( x# ? // executed in a specific order, but these steps should
. B+ y9 @8 Q- z- o // take no (simulated) time. The M(foo) means "The message6 I4 }) ^, Z" r; R6 {& L- b. a
// called <foo>". You can send a message To a particular& y- e6 T7 P( |7 ]& z
// object, or ForEach object in a collection.
/ y% y" R- ?; V5 G' A/ q1 u2 |2 H 0 `5 V4 g% u; d/ Y# b. r5 z
// Note we update the heatspace in two phases: first run: T- {( o) L1 G- W7 ?7 _0 J
// diffusion, then run "updateWorld" to actually enact the
9 F4 ]8 a# R! D4 X- X) |& z$ ~ // changes the heatbugs have made. The ordering here is
: R5 x$ S; u# M: `- i // significant!
* l4 i5 h4 v: Z0 }* X * G5 J2 G3 F. d$ f0 E
// Note also, that with the additional
# ?# k) Y! Y+ \: N% i H // `randomizeHeatbugUpdateOrder' Boolean flag we can; R# j/ P ]3 F4 S8 x
// randomize the order in which the bugs actually run
7 ~; S3 }8 i9 O1 u7 d6 J // their step rule. This has the effect of removing any
7 ]% z* C& F$ [. }7 ^9 U // systematic bias in the iteration throught the heatbug5 j- {5 L' g. r w: J9 \
// list from timestep to timestep1 x) m! V) j: z4 _0 N
! t4 }9 A: }* o; X5 M8 i$ x // By default, all `createActionForEach' modelActions have
- i! v0 j; ?) n0 B // a default order of `Sequential', which means that the5 s b1 b# W5 E. s4 c
// order of iteration through the `heatbugList' will be1 I/ i1 C" P) ^# O6 T
// identical (assuming the list order is not changed
! F) g0 C/ v1 p6 j4 u // indirectly by some other process). n8 {$ R1 i6 B; w9 j
8 S% s& u6 |( i5 ]8 v3 k; w& g modelActions = new ActionGroupImpl (getZone ());' d# J3 N3 I; e& ~0 ?4 a
6 O+ w* o; I, b, _
try { K5 R5 K# i* A5 q9 k' s2 e3 Q- T9 o6 r
modelActions.createActionTo$message! l; x J" @/ J, c9 r- L
(heat, new Selector (heat.getClass (), "stepRule", false));" q; m; C; X0 P* r% z" ^
} catch (Exception e) {
- x+ ~. w. w; d5 l! G) l% H6 h3 | System.err.println ("Exception stepRule: " + e.getMessage ()); R1 {$ b) F% r2 Q% ]
}# P8 v6 `, I4 X0 W3 }3 u2 S
$ ~/ B8 {4 x( N' @
try {
" ` [2 S5 w$ {$ A5 q, i Heatbug proto = (Heatbug) heatbugList.get (0);
( Z5 j- u/ q6 l0 D( M( U Selector sel = q! _6 z7 ~2 U8 I& O' z; \
new Selector (proto.getClass (), "heatbugStep", false);
9 c: R3 V. P7 M6 ~" h4 e actionForEach =: t3 C2 d, f! T, d! u
modelActions.createFActionForEachHomogeneous$call
% I/ h- R* `! x( d" g }! r (heatbugList,$ v5 ^ B3 X! ~# U. W. E! t( z6 l
new FCallImpl (this, proto, sel,
/ z: f7 o% M8 `& s2 o" j7 e new FArgumentsImpl (this, sel)));
" f+ Y& D0 O0 t- f% ^) ? } catch (Exception e) {
( g7 @' Z2 m+ Y$ ~ e.printStackTrace (System.err);
- ], ]4 T: I W; P* i, v' S }
8 E5 Q2 i7 p, V+ ~$ ~8 a) J
3 d; t/ j- e" E syncUpdateOrder ();
8 h3 y1 N9 p3 ?5 Q5 y# ]/ W
, r p& z0 K0 H" j; b try {
- ~6 f9 I( r( f( K modelActions.createActionTo$message
. ~' \2 } }- j/ t* X% X (heat, new Selector (heat.getClass (), "updateLattice", false));0 s' V! ?# p, O2 S9 S% A
} catch (Exception e) {6 h( l( L1 b' L. n) x) @$ U
System.err.println("Exception updateLattice: " + e.getMessage ());8 }, r- R" f7 C$ h7 b/ e* U6 |4 c9 |
}
/ @' Q- B0 D) T) U {$ I, q5 [ 9 h& V. r: |& q# Z# O
// Then we create a schedule that executes the4 d* Q9 }" U! X. T
// modelActions. modelActions is an ActionGroup, by itself it
2 L- [1 Y* b# f // has no notion of time. In order to have it executed in* s2 W1 n a/ \. `9 Y6 G Z
// time, we create a Schedule that says to use the' O6 w; \' X2 A2 O1 | ?' A0 d
// modelActions ActionGroup at particular times. This
! Z2 ~: ^, b& } // schedule has a repeat interval of 1, it will loop every: R& R6 n% m0 o7 x4 a1 g
// time step. The action is executed at time 0 relative to# z8 ^& W2 P# E$ n, D/ [
// the beginning of the loop.
/ Y6 F1 \ r- L' p" U, L: f) B
" U( t$ M% Z9 a: ] // This is a simple schedule, with only one action that is
7 N6 O! f4 J1 H) p3 a: R3 M$ ~ // just repeated every time. See jmousetrap for more. A+ S3 I4 T- s
// complicated schedules.
0 K4 y- Q$ k0 B" B9 ^+ _( M - k- k8 `" ^( _5 d
modelSchedule = new ScheduleImpl (getZone (), 1);
* w% W0 t$ o1 [ b+ c/ @ modelSchedule.at$createAction (0, modelActions);
* ~0 f, Q4 I( V) h0 f6 o+ p" [
: U8 ?/ w( y3 [# A return this;" {! K6 w: Y r, |+ E. y
} |