HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 }7 W1 S( b1 m7 D- J. D
( n7 P. C3 `7 x1 U8 v% \8 J
public Object buildActions () {
5 Y$ o. B5 X8 `" Q' f super.buildActions();( \( @/ Z/ }9 G) J# L
8 S9 t3 _9 ^" m2 U( p* X* v // Create the list of simulation actions. We put these in
+ U! o; O. f) G4 G D' \ // an action group, because we want these actions to be
% h: H5 D. y/ o // executed in a specific order, but these steps should
2 `. F' e: d. I7 x& W, M // take no (simulated) time. The M(foo) means "The message! i1 B+ }6 z) E
// called <foo>". You can send a message To a particular
( A* s; S% B7 R7 B& ? // object, or ForEach object in a collection.
: a/ t1 H* A9 C. H - B. f% `, E: x
// Note we update the heatspace in two phases: first run$ z- @" q. q+ m, v( r$ N2 B
// diffusion, then run "updateWorld" to actually enact the
u$ s1 h6 s- `: g$ ?* ?1 n: M# t // changes the heatbugs have made. The ordering here is* W# y( A9 a7 N* o% Y- ^
// significant!( U) d$ S, w8 a
8 j) {3 u* }3 y9 a; K k
// Note also, that with the additional
- B8 l" [ k4 C! N3 g0 ?* d! M, c // `randomizeHeatbugUpdateOrder' Boolean flag we can
! W3 e, K' x# R1 r! D // randomize the order in which the bugs actually run' A' ]% E0 B0 K& e; @ {
// their step rule. This has the effect of removing any" ^" ^ G" L3 P* j& i5 A6 T! q
// systematic bias in the iteration throught the heatbug
( s& c9 H$ h$ p5 M0 O* h2 c" o, _2 B // list from timestep to timestep
# Q; c- a/ r: o! A) c0 K 4 M7 d" V, z9 D* ?& J
// By default, all `createActionForEach' modelActions have
1 f* g& W7 E E1 B6 s$ ^/ B* \! ?5 X // a default order of `Sequential', which means that the c g" N# e; W; a a* _
// order of iteration through the `heatbugList' will be
?$ t% R* S2 b2 p3 f // identical (assuming the list order is not changed
; S" D4 \3 o6 e B f/ m: }) b // indirectly by some other process).
! R" Z+ v+ p) d; [6 m% `
+ q! O1 {, l; N! v modelActions = new ActionGroupImpl (getZone ());# ^% [3 Q" X7 ^$ z. P1 L4 M
, P& p1 G, O( ]" b( L try {
. L/ g- ?5 m% k* x+ c6 Y modelActions.createActionTo$message
5 Y8 e! `% E& o- l$ }/ o0 W (heat, new Selector (heat.getClass (), "stepRule", false));9 ?( p( w3 b7 |! _) Z
} catch (Exception e) {7 B u7 V @$ q& V; t" n
System.err.println ("Exception stepRule: " + e.getMessage ());$ r1 m h6 A( U% A9 ?7 D# ~* `5 K" f
}
) y$ z8 K7 Y }* G( c7 @2 f6 q$ [3 ~% ` B+ T' e" w
try { a: [8 g% \7 x, ~- A. D" Y* z6 x3 v. a! E/ s
Heatbug proto = (Heatbug) heatbugList.get (0);
) W5 L+ J( Q# B9 O; q. q y& h9 t Selector sel =
# @4 Q7 O1 R; P/ n5 K new Selector (proto.getClass (), "heatbugStep", false);
: r. G k" S+ I# F& ]. Q/ [5 q) } actionForEach = O3 F9 J( A$ j
modelActions.createFActionForEachHomogeneous$call
+ `2 ] P. ]$ Q% \# n6 M (heatbugList,8 b( O# C3 m1 p% N1 r% o" `% h
new FCallImpl (this, proto, sel,' t. z8 s. p$ m: O) ]2 g6 r
new FArgumentsImpl (this, sel)));4 X# t L6 S1 L
} catch (Exception e) {' W1 q2 E+ E, r+ R- X$ `
e.printStackTrace (System.err);
2 c2 D. D! }) y& l }. Z, | O" c2 T" v. l8 q9 I
4 g, {6 D6 u* C8 n( h syncUpdateOrder ();
1 u' s. x* c$ Q1 T7 j) T/ ~% U7 L g
try {
" s. h- x$ O$ G modelActions.createActionTo$message 7 {. t3 }4 y: X s/ j1 @
(heat, new Selector (heat.getClass (), "updateLattice", false));
- x7 M. i: C; z# c$ I } catch (Exception e) {
7 e! m8 g, P1 V System.err.println("Exception updateLattice: " + e.getMessage ());
. b' L" w1 d/ h, {9 ^2 I }
3 v8 @ [7 `' a B) q A6 M. a+ I# C7 m3 t: U% l
// Then we create a schedule that executes the
9 u' s# h |1 E7 x. c! P% M1 o // modelActions. modelActions is an ActionGroup, by itself it8 g$ S3 j4 e- n7 k- F
// has no notion of time. In order to have it executed in" K3 A# a# l1 O+ ]8 T6 Z" x* V
// time, we create a Schedule that says to use the
9 _# `; j! s0 m* Z // modelActions ActionGroup at particular times. This
5 T4 D5 I" J/ Z // schedule has a repeat interval of 1, it will loop every" g1 @. e. C" m% }1 e/ h4 Y$ A
// time step. The action is executed at time 0 relative to
0 j+ W, y# H8 _4 d: Z3 _+ w // the beginning of the loop.
$ _+ \" [7 R4 a, b# O
( @/ j u% s- U/ i% F u G // This is a simple schedule, with only one action that is
, ]7 u1 r9 A" J+ ^4 h, y // just repeated every time. See jmousetrap for more
- M/ g, V' D# c& L: s // complicated schedules.& Y# u% A+ \$ \- b" i0 k
( y% g9 l3 g8 n0 _$ q modelSchedule = new ScheduleImpl (getZone (), 1);
: c- T- R: p& ~5 Q3 c5 c modelSchedule.at$createAction (0, modelActions);2 W7 K3 g, A$ ]( t) N1 `1 J0 @
: U& I& {" p5 F0 ?7 h3 v c3 m
return this;' l8 }: i* W5 \' k
} |