HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* B' ^6 ]8 I1 @1 e/ P- U b5 k" E# c# g0 i2 @8 s5 k' M( r
public Object buildActions () {
! H, M$ H4 m% Z super.buildActions();
& ]: `! j! a5 ~; V2 X9 b
0 g8 P7 }) G2 D: q6 E1 P2 ^ // Create the list of simulation actions. We put these in
, {; x" ^2 j# g, A. Q, ~( c# i! A) f$ e // an action group, because we want these actions to be
, Q" _+ ?( A; r# y. L. {/ \ // executed in a specific order, but these steps should
; t, d: f- b, j0 E% I: m8 v$ C // take no (simulated) time. The M(foo) means "The message2 q; R/ n1 j: o e( M9 x
// called <foo>". You can send a message To a particular
2 ?0 q4 W: Y+ {; _* T/ X // object, or ForEach object in a collection.1 r8 L' j2 R7 v, I. m
4 d% Z2 U9 a' x7 F) K
// Note we update the heatspace in two phases: first run( b) B& O. }: I4 O% z
// diffusion, then run "updateWorld" to actually enact the
7 R$ k, x2 e7 [% N9 d // changes the heatbugs have made. The ordering here is
; J7 t7 ^6 `( m7 P8 D7 k8 p2 | // significant!3 @, b, ]# o4 d* y
, d4 z* n% J) W2 q. s" y
// Note also, that with the additional
H4 T8 ?: C& S6 {0 V( {$ @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 C t7 r3 \) A" a' h l$ f // randomize the order in which the bugs actually run1 Y) B3 j' ]' w$ b/ g0 y
// their step rule. This has the effect of removing any/ k+ V6 K' @2 I5 n" [: K6 ~
// systematic bias in the iteration throught the heatbug
z& u% J9 y, c+ ^3 h // list from timestep to timestep
# l2 S7 U- m4 W7 ~1 |& N& C S
" ]1 k2 p( j, ~/ q) U // By default, all `createActionForEach' modelActions have
5 I, f# }* d, W$ T" y8 U1 X) t // a default order of `Sequential', which means that the
9 b- V0 h5 R0 ~8 I // order of iteration through the `heatbugList' will be
l5 a `! s5 R // identical (assuming the list order is not changed
4 [/ U9 B7 b: e u y // indirectly by some other process)., n f9 }! O: ]/ x7 X
$ U* m+ O2 D; |6 n! L, ^6 T modelActions = new ActionGroupImpl (getZone ());; x l n' { ]- d) ?
# `$ s( a0 z" Q1 S# @
try {
$ B, L g, O4 m2 _# ]. ? modelActions.createActionTo$message
* z0 |: y" S2 D ~9 v+ w5 G (heat, new Selector (heat.getClass (), "stepRule", false));# i7 Y3 M+ Y3 n* y
} catch (Exception e) {
' n4 p( Z0 v8 ?% T( k$ B System.err.println ("Exception stepRule: " + e.getMessage ());
( n8 k/ m, P7 K6 k }
6 T' h3 ~4 t0 c% \" z
3 d5 M. `4 r5 @% r try {
; q9 x8 b* N( V, o2 L Heatbug proto = (Heatbug) heatbugList.get (0);6 ^* e8 o6 J I3 z4 J/ [
Selector sel = . Y6 k2 F- [/ S8 \! H% r8 r
new Selector (proto.getClass (), "heatbugStep", false);
0 C4 k7 a5 z" h6 [" k( L0 e actionForEach =# G6 f: ?" C# e% `& c
modelActions.createFActionForEachHomogeneous$call
! E# ?$ }- B+ ~. m6 ]+ d% l! k+ C (heatbugList,) U; B: M( f! v# x
new FCallImpl (this, proto, sel,7 V6 d7 _7 o2 ?" P: F; H
new FArgumentsImpl (this, sel)));* l) {( r- w; F+ @
} catch (Exception e) {' y' a( v! F6 u2 H& A( D# m( r
e.printStackTrace (System.err);0 e8 a. @3 Q h- D3 u5 r
}4 h' c8 C& V! r$ R
: t5 n# p8 `2 Y% |- F* O* M syncUpdateOrder ();
! U( J u3 Q9 D
' o3 O8 @- u+ r try {1 {* ]/ F+ O; C0 c! [- k. G- k% C
modelActions.createActionTo$message
! x0 D9 G3 D+ k2 s/ M, `2 a (heat, new Selector (heat.getClass (), "updateLattice", false));8 q# y- b& x, I- ~, l! O4 V2 g- i( i* e
} catch (Exception e) {
3 v" D' m6 n+ E V1 N" U System.err.println("Exception updateLattice: " + e.getMessage ());
" I$ S. W6 Z( Q) C5 V }7 {5 m/ p/ k+ f6 w4 L
6 G9 a8 m- B8 r // Then we create a schedule that executes the$ J% B( \; }2 k9 v* ]$ h# ^
// modelActions. modelActions is an ActionGroup, by itself it
( R- h1 I/ X! K1 Y9 w4 p // has no notion of time. In order to have it executed in
- }% _3 O# ~0 I) K5 a7 L7 q( m# ?7 K1 G // time, we create a Schedule that says to use the4 {' F- ?7 A6 G$ C2 J
// modelActions ActionGroup at particular times. This
# V& F9 d' x! k) B! M3 g7 B // schedule has a repeat interval of 1, it will loop every; z) F+ E L U8 ~0 T( `
// time step. The action is executed at time 0 relative to& ]: F* E7 W, }5 \0 b2 |3 B2 x
// the beginning of the loop., i0 x; ^& E* c8 z! X
0 s8 p. u% y& N: t) H0 m7 D // This is a simple schedule, with only one action that is/ A$ p {/ R# ~& v# g+ ?3 A, t6 |0 x
// just repeated every time. See jmousetrap for more
5 E. w4 H6 z7 Y8 ~. `0 L v // complicated schedules.
4 }" Q( n# k, u; a6 @ % i8 X2 z0 g. \4 o7 J R8 B
modelSchedule = new ScheduleImpl (getZone (), 1);
( {3 K# @- a$ M$ N8 V* n% r! Q modelSchedule.at$createAction (0, modelActions);0 H8 d5 x! n8 S8 N
! m3 Y$ O+ O. r6 ?& {: p return this;
5 U p1 e I! G, X. f' _ } |