HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 X* b( I/ a, W2 x( H, }
8 D/ {7 K. m0 e( n) X9 L public Object buildActions () {2 U# ^# R- q4 Q9 x) B2 y) w
super.buildActions();1 R( d1 U) l0 Y) L: i* T8 W! m
! m9 u$ `2 n4 i9 r: b1 ~ // Create the list of simulation actions. We put these in
- m( E: n7 r$ _% Y, `. ]8 _+ }! I // an action group, because we want these actions to be8 w' j$ ~. x1 {3 X3 k
// executed in a specific order, but these steps should* h E: Y/ K0 h" D& A9 {0 d
// take no (simulated) time. The M(foo) means "The message. J6 }' ~) }- v" E
// called <foo>". You can send a message To a particular- T. d* N9 O8 {6 }
// object, or ForEach object in a collection.
" M1 {+ |1 E6 Y$ }4 J1 @3 d' ?
6 W8 o+ F0 z- R- l7 t // Note we update the heatspace in two phases: first run4 [$ C1 J# B6 {3 S& ?, v/ N
// diffusion, then run "updateWorld" to actually enact the
" _0 b" x! h9 G! K+ D8 Q6 l // changes the heatbugs have made. The ordering here is
" A0 y& x9 a0 p // significant!
( @/ h7 X C+ d& v ) U. j- c* w# e, s9 \
// Note also, that with the additional6 T( F5 W0 j& P j$ z$ Z
// `randomizeHeatbugUpdateOrder' Boolean flag we can. H) N" g2 |0 n) d0 i) J# d+ C
// randomize the order in which the bugs actually run
|) m' X! T9 V' ]& ^* K: c) J // their step rule. This has the effect of removing any
( f8 [# w0 J; Q. h5 q8 k2 X // systematic bias in the iteration throught the heatbug
4 j. {1 i! H; i% H* X9 K // list from timestep to timestep+ X) J5 ~! C: u \* }4 _
) v: o9 ~7 T. r
// By default, all `createActionForEach' modelActions have" v9 q4 @$ m& U4 s% E
// a default order of `Sequential', which means that the" L" B2 V6 X8 b/ r2 [
// order of iteration through the `heatbugList' will be
: E2 S& @: W9 j$ L& z5 F4 D // identical (assuming the list order is not changed
* b9 K1 E9 x3 B0 M! Q0 s // indirectly by some other process).( V$ r/ Y4 t8 L2 g
! L. V5 R+ d5 ?! x, k# {( a! {# | modelActions = new ActionGroupImpl (getZone ());; d s; j* ~& k9 {2 O2 l
! V/ C) q7 m1 W* n2 C1 t
try {
. v/ }9 ~; L; {8 K0 F modelActions.createActionTo$message
. t9 i- H; Z Y5 R- h. ? (heat, new Selector (heat.getClass (), "stepRule", false));" u8 U* Y* d# n# M: E, [
} catch (Exception e) {( w/ [. G. F( b
System.err.println ("Exception stepRule: " + e.getMessage ());6 Y0 z5 e, o [$ S& p- R4 d
}
6 n$ y3 I F& m, F8 f. l
' [' O7 {- r$ j/ j- h) q try {
9 {- G3 H$ e, z2 z) u Heatbug proto = (Heatbug) heatbugList.get (0);+ Q0 I1 M! G6 R, B& N
Selector sel =
l' ^: B0 Z7 G1 k( _7 o2 m+ u new Selector (proto.getClass (), "heatbugStep", false);- k. w! t/ ?% n' q# z( k; a
actionForEach =7 [0 G( W$ A4 ~: y
modelActions.createFActionForEachHomogeneous$call/ V4 s# U, x- X+ E D" Z+ h
(heatbugList,) s- } |# X& V9 I3 M( S
new FCallImpl (this, proto, sel,
# y6 r" Q6 ^* ]" U9 w new FArgumentsImpl (this, sel)));) K! h7 O' d M! l
} catch (Exception e) {2 D1 }5 Q+ Y3 I# }, ^* L# ?% z( Q T
e.printStackTrace (System.err);
# H t+ G* O" C3 i8 L7 ?9 E+ G! O }
4 ]0 D$ Z: T, e7 d - i7 W& o% R- I
syncUpdateOrder ();
* n1 G7 V0 X6 j! U+ W% U: y
: L$ m& z6 c" r4 Y0 K9 D- G2 |% k# e try {$ _6 S; [: `1 c4 b
modelActions.createActionTo$message
; d% P- R0 i' ]* C2 T6 X (heat, new Selector (heat.getClass (), "updateLattice", false));
$ \9 k. E% j1 ~+ y2 r } catch (Exception e) {
4 X0 _2 t/ n& z; P# a System.err.println("Exception updateLattice: " + e.getMessage ());
' e* u9 E _$ R; q7 T: V }
& d2 |5 @2 `: G8 M- ?" Z" S
) w1 u8 Q3 J; H2 | // Then we create a schedule that executes the, a. @$ ]+ X: r Y$ a- u7 x
// modelActions. modelActions is an ActionGroup, by itself it/ g- P7 `0 T5 {, G& x
// has no notion of time. In order to have it executed in
- W! J: i4 s4 j% D // time, we create a Schedule that says to use the
$ D! k( s1 {0 D5 q // modelActions ActionGroup at particular times. This
6 D9 r! t! a2 u0 }- @- b // schedule has a repeat interval of 1, it will loop every: Y6 r( F# @' P2 v( H
// time step. The action is executed at time 0 relative to
2 M7 [$ j* |+ X Y4 o // the beginning of the loop.
5 F. p( q; S3 r" G/ @0 x+ v
. l" n& G% Q/ w _# k2 }" X // This is a simple schedule, with only one action that is
0 O3 N6 T% i c" E( E // just repeated every time. See jmousetrap for more3 k$ |/ ?0 I; R9 ]" x( Y
// complicated schedules.) ?- c. k# t& u1 t$ j
( h2 [2 W7 m1 Y1 V modelSchedule = new ScheduleImpl (getZone (), 1);, Z" k v9 G; J* x- B7 ~
modelSchedule.at$createAction (0, modelActions);
8 p7 x( r! n0 j / B: @9 {! U/ h' ~" {% z. s
return this;
6 v$ l5 y8 H$ E3 Y4 H2 b" l d } |