HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' L1 t+ j" c5 Q$ J6 F, k7 q+ S# G, }) @4 k/ [0 O$ Q" B
public Object buildActions () {
! d$ j0 M% I5 F4 p& f; l6 x super.buildActions();0 V& d$ C/ R5 @& }7 Y6 d! M6 p
& C8 G8 `1 F0 ]
// Create the list of simulation actions. We put these in0 @0 Z; e& p9 B: A8 `
// an action group, because we want these actions to be
. J; v6 b9 z1 |2 Q W `$ l // executed in a specific order, but these steps should4 `" D f+ E+ a5 i) G
// take no (simulated) time. The M(foo) means "The message! P C0 k' N, ]1 F/ p( N3 L
// called <foo>". You can send a message To a particular
% n. z* z$ v+ d9 R7 `/ O // object, or ForEach object in a collection.. U( C9 g/ T# z; X/ i
' E' A7 r& B8 y0 M // Note we update the heatspace in two phases: first run
% U+ B- l+ n, G- M, I/ k6 T2 J' o // diffusion, then run "updateWorld" to actually enact the0 K: t2 K, W, m( D8 }" j# V
// changes the heatbugs have made. The ordering here is
6 U8 z% J7 E% [! r // significant!3 a0 W: w* C( V5 }7 u6 K3 m% `( Q
( I I; K- U" A, r- y J7 D
// Note also, that with the additional- N3 x% e* H7 \( B8 j7 g; a5 P
// `randomizeHeatbugUpdateOrder' Boolean flag we can- q. T' C: v4 ]% I+ G4 Z* _
// randomize the order in which the bugs actually run/ a% i [! @6 N- ], K- D( G1 f! r
// their step rule. This has the effect of removing any
+ @ g+ E9 A+ J# ]$ \& U; _* ?$ m: Q // systematic bias in the iteration throught the heatbug ^6 B. T |! M$ K( x6 J
// list from timestep to timestep# J+ N+ ~+ o% {8 p# p/ S1 N
2 x. r) [- p$ ]0 X3 I) }: v // By default, all `createActionForEach' modelActions have
* y! T; r2 L6 f // a default order of `Sequential', which means that the* G9 F# Q" Z# j+ a
// order of iteration through the `heatbugList' will be( o9 G1 Y; D" r6 q G5 i" Z
// identical (assuming the list order is not changed
+ ]$ A- a0 G: ` // indirectly by some other process).
6 v+ r9 d+ F0 T " H( Y' w% L# [) w9 c
modelActions = new ActionGroupImpl (getZone ());( n, y/ z7 }/ F2 }! w& |' @. y
2 T/ p" P+ V7 R3 r try {
. I/ [9 Z/ f p. a! N4 |! d modelActions.createActionTo$message6 ^( n, B8 j" [% M
(heat, new Selector (heat.getClass (), "stepRule", false));
+ X: h5 r+ S$ A+ d3 a V. d3 u } catch (Exception e) {
( I6 u* Q6 U8 E6 ] q8 T System.err.println ("Exception stepRule: " + e.getMessage ());2 A' x: ?2 |+ e* a
}, r, x; u9 C7 O, W* h6 b! a6 m
4 k% p$ n; d0 h. w: Z0 E
try {
4 r: i# d5 `. @& i/ J k4 C/ Y Heatbug proto = (Heatbug) heatbugList.get (0);' h M$ Q8 J& K( e7 j
Selector sel = , r W- s* B* }; [' a3 S7 _ T: G
new Selector (proto.getClass (), "heatbugStep", false);
% m+ V. I+ k- Q actionForEach =
' u0 s1 `$ T( }$ K2 p9 L7 n. ^ modelActions.createFActionForEachHomogeneous$call9 c" F/ k2 m- F# G. i, c
(heatbugList,6 _5 g3 s/ g/ |6 R3 y9 P
new FCallImpl (this, proto, sel,5 q9 X4 e( B" K0 _& q1 P4 V
new FArgumentsImpl (this, sel)));
& w6 W U; {. [/ `% ], _ } catch (Exception e) {
; X+ j- \6 b! H* f e.printStackTrace (System.err);; A3 p3 b. k+ Q; G, e
}
+ x% Y& O- f9 p1 M" C $ f5 S% r: C) H3 v6 c8 `
syncUpdateOrder ();
5 w2 u$ z8 k# r0 p1 c
5 B* I) b# l. j try {
! B; I. O2 b3 ]: K0 ?; |0 w modelActions.createActionTo$message - @1 h7 ~( D+ U4 @6 K! F0 o
(heat, new Selector (heat.getClass (), "updateLattice", false));- P0 v- H$ @0 S; J T- @1 w7 a
} catch (Exception e) {; C8 [ Y w/ ]) |$ |
System.err.println("Exception updateLattice: " + e.getMessage ());
" G9 z. K6 k2 l) @* T' k }
: o$ S& e5 Y# c4 |) I7 _7 U; h) t
- P! G3 k# @8 C/ k" | // Then we create a schedule that executes the& R& g4 V) n! z. L
// modelActions. modelActions is an ActionGroup, by itself it6 J/ b a1 ?& i" {! e; p( T
// has no notion of time. In order to have it executed in9 P9 r2 P/ b+ u0 |
// time, we create a Schedule that says to use the
z. \; Y- l; l5 D4 a // modelActions ActionGroup at particular times. This$ K* a1 k6 E! O$ F; `
// schedule has a repeat interval of 1, it will loop every
9 I/ u: S% l; y [ // time step. The action is executed at time 0 relative to
, z' K: W6 \! x$ u( k- q // the beginning of the loop.% s! k" U8 X* o C3 B
# y/ }5 L J( c1 r4 q7 y' d( R // This is a simple schedule, with only one action that is
& U2 `/ y! w- b) U) _" n // just repeated every time. See jmousetrap for more
) f& J! R+ {+ y$ `0 s // complicated schedules.
; j) M: F& b. B7 l$ i " }& ]- s/ d$ j8 u' a- O- j
modelSchedule = new ScheduleImpl (getZone (), 1);
5 L$ G4 F n7 I: k. z$ }; n r modelSchedule.at$createAction (0, modelActions);. u( c+ I( ?+ l% X3 q5 u
! p% }$ R3 r h return this;$ f2 C0 d3 i& d( ^" d
} |