HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- y- [ y9 ]$ l- M3 o3 ~" _2 w
4 N2 E, F3 q0 ^6 M public Object buildActions () {
. }& M( b' S4 ?0 S( S E: ] super.buildActions();) j. \% w/ R" V1 f8 i
5 e- X- J* J, f% z; u/ W9 \ // Create the list of simulation actions. We put these in
. {5 D9 i9 n: c& [# _: f/ L3 g8 x( Z6 f // an action group, because we want these actions to be2 ?' H' C, g, W- a7 Y5 g1 k
// executed in a specific order, but these steps should
2 G. w2 O- L( h# B( q3 i // take no (simulated) time. The M(foo) means "The message
: W9 B8 \1 q" W // called <foo>". You can send a message To a particular& u8 |( s6 M i; d0 G7 m
// object, or ForEach object in a collection.
8 v! E- _: B, {% _7 t' R( n# l ! W5 j- W( D) \, i. J$ u b/ s
// Note we update the heatspace in two phases: first run
L, ?* D$ L. c. v6 ~" ? // diffusion, then run "updateWorld" to actually enact the# y c5 Q' R: u% o
// changes the heatbugs have made. The ordering here is
+ ]' `3 Z3 R9 N3 v // significant!) V- D! ~: [3 A) v1 R
, m9 N# ~4 r6 ?+ n, S9 t7 i- K/ A
// Note also, that with the additional
2 ~) o$ o( B9 C: o0 q; J' [ // `randomizeHeatbugUpdateOrder' Boolean flag we can: O/ l) Z: `+ c' y! v! |
// randomize the order in which the bugs actually run5 a3 ]" c* d c+ x
// their step rule. This has the effect of removing any; s- y, e! ^$ F
// systematic bias in the iteration throught the heatbug& E/ S! w; N+ n* ]- z9 ?+ T& D
// list from timestep to timestep2 ?+ P- U. i* d
, R8 g6 D: q, ]/ P# d' U
// By default, all `createActionForEach' modelActions have
, d( l8 f+ _7 ?6 u% I // a default order of `Sequential', which means that the* {+ w- W- A1 ~2 H4 t1 |6 s
// order of iteration through the `heatbugList' will be9 V, A% B, [: e7 {
// identical (assuming the list order is not changed
9 {% g x1 k7 c. x // indirectly by some other process).
1 X! I' l, Y, d( _% e
% U. _# ]# @& N" T2 }0 J modelActions = new ActionGroupImpl (getZone ());
5 B n4 R2 W3 U$ _% ^% P( w
a8 M: x( g( O# U try {: k! [( |# z# I9 E6 T
modelActions.createActionTo$message3 B' @9 w6 s _7 E) N4 |' L) _0 B
(heat, new Selector (heat.getClass (), "stepRule", false));
$ h2 c# c# a7 o) g/ s" |! G } catch (Exception e) {9 M9 H) } `* p, B. t0 T" U
System.err.println ("Exception stepRule: " + e.getMessage ());
# T( _, P; Q* A2 m% O$ k# z9 P }
( {& L5 C, ?6 x! ]- Q3 S7 m5 f/ C7 z, X
try {
; h% o4 j- m( I Heatbug proto = (Heatbug) heatbugList.get (0);
6 X- o. b) m) T x Selector sel =
. \* i, }" \/ [% E0 ^9 ^ new Selector (proto.getClass (), "heatbugStep", false);
8 R/ e' Y! V+ d( ^ actionForEach =
! Q0 ^' ?- {) A* w modelActions.createFActionForEachHomogeneous$call5 o9 F6 j9 H6 ^" K
(heatbugList,
5 w) y+ f4 P( g& c) V( _. l2 Y& R new FCallImpl (this, proto, sel,
, f* X; M& k" N, h3 P$ }( d+ h9 M new FArgumentsImpl (this, sel)));
; K! F+ A. l9 a3 h6 L* g- Y } catch (Exception e) {, V) P+ N4 S5 e9 a a
e.printStackTrace (System.err);' T2 _ y- V8 V/ X, M4 p
}
. p$ H2 m* q/ t , F% q K; Y6 z' E
syncUpdateOrder ();7 V! W J- s7 Z# j- p
5 U# P0 G/ I/ h0 U' u" v( U7 J try {! v. b: u) Y* M- w
modelActions.createActionTo$message ; x* ]" Y( U* w4 S6 B* y
(heat, new Selector (heat.getClass (), "updateLattice", false));& n* R$ D0 }# y; [
} catch (Exception e) {
- ~1 o& N$ M' _5 Y: m- c System.err.println("Exception updateLattice: " + e.getMessage ());
7 y- D( P4 D" V- Z; l; C }# A" J2 _+ P1 _0 u! I' @
! J" R3 Q( {) H' O+ f // Then we create a schedule that executes the
" k6 e# t ^) ^% o2 L# E/ H( e6 d // modelActions. modelActions is an ActionGroup, by itself it# V2 y) M8 x% B/ e5 _" j# p
// has no notion of time. In order to have it executed in
- y. x$ Z \' _ o2 i6 T8 Y // time, we create a Schedule that says to use the
' T* D( P9 }/ Y5 t8 c" T& d8 k // modelActions ActionGroup at particular times. This8 V' _2 b% ~+ p' H2 b, T3 C( L
// schedule has a repeat interval of 1, it will loop every
6 J: q1 }" r2 i; S7 P8 _3 a! h // time step. The action is executed at time 0 relative to
4 |7 m9 x9 p+ W8 X( d // the beginning of the loop.
0 \4 K* c# @) v0 H4 o) }* r- P, J( z: `6 J3 Y% p8 S& M
// This is a simple schedule, with only one action that is0 ]" Q9 f. H2 Q) |1 }
// just repeated every time. See jmousetrap for more! M- P1 {/ C$ u- ~7 B% E
// complicated schedules.9 o1 R' r7 K n; |- L
8 B6 r1 c. v0 `+ d- f3 o1 K/ S% g modelSchedule = new ScheduleImpl (getZone (), 1);
0 B) }9 I3 m3 p3 D modelSchedule.at$createAction (0, modelActions);4 B, z7 [% @" m
& i0 M4 ~5 k! @$ i) `) S
return this;# y7 p- C5 M8 }
} |