HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) b/ k9 T# Z- F7 T: k
4 E; Z6 H% I9 o" a public Object buildActions () {
' ]* T6 b, j. `% [& X" F# `* v$ u% B super.buildActions();
# r2 _7 Q9 V2 }& G ! \$ m) a7 S7 g# F b
// Create the list of simulation actions. We put these in
/ S2 j" r9 F3 W+ c0 t0 I6 ] // an action group, because we want these actions to be
' H2 r- K& w- a: p* x // executed in a specific order, but these steps should
, p$ K) \1 q0 J( ?1 F3 c // take no (simulated) time. The M(foo) means "The message
- m5 Z+ X3 e% M& w // called <foo>". You can send a message To a particular- a" L& _, c' k
// object, or ForEach object in a collection.
/ P5 ?: _3 ]7 n. l
6 w7 {8 ^5 z' H6 r // Note we update the heatspace in two phases: first run
) u& }7 Z. B8 M6 I& v // diffusion, then run "updateWorld" to actually enact the* l3 t% N9 x/ I0 j9 A: P) }
// changes the heatbugs have made. The ordering here is
: m/ o" \9 v! d // significant!! I* l* s+ P6 U8 p4 V' \
+ w7 Z& f2 [) B8 U( j9 c% m' P3 z // Note also, that with the additional
: U4 \! ?$ v5 y, H# l3 Q8 J K- H: r' o // `randomizeHeatbugUpdateOrder' Boolean flag we can
t* S) k' J; @ // randomize the order in which the bugs actually run1 U1 r8 a) h: A! l! g9 G/ U& o, u- L
// their step rule. This has the effect of removing any
. K0 e- A3 ]7 }# O) b+ k$ m2 s // systematic bias in the iteration throught the heatbug0 X, z( a4 l2 p# l
// list from timestep to timestep
g( _; P" k- n2 S + u/ t9 `2 s0 p
// By default, all `createActionForEach' modelActions have" c# u) g1 t0 M
// a default order of `Sequential', which means that the3 y7 j2 i) c$ l, m
// order of iteration through the `heatbugList' will be8 Q+ m: c) e4 P! I( S
// identical (assuming the list order is not changed3 Q Y) b7 m, X0 W0 N. E- S: K: ?
// indirectly by some other process)." X/ N/ C& a' r5 s% E. P1 i2 n4 P
, R$ L d; Y' a: m
modelActions = new ActionGroupImpl (getZone ());+ G* J4 Z" h Q X# j5 c
7 p+ {* j" T" p, c% E% F8 \
try {+ k' E8 N, F& V. l6 ?( r
modelActions.createActionTo$message
T) \$ [, j9 g (heat, new Selector (heat.getClass (), "stepRule", false));
* R& R5 D/ b6 v! F } catch (Exception e) {
- h, W2 P9 k6 X6 O6 Q( S# ] System.err.println ("Exception stepRule: " + e.getMessage ());
; W2 ?6 T5 w% g6 _2 {$ b) d }3 J9 M3 r" D" o
2 B- }7 d2 U, h8 a i4 x$ C
try {
6 J: d1 ~: g8 a6 m: I4 u Heatbug proto = (Heatbug) heatbugList.get (0);
' t! L# d F) N' n Selector sel = % S$ l) U! O: e6 Z& y7 F) Q
new Selector (proto.getClass (), "heatbugStep", false);0 U) i( Y" c& X% D# G( L) K
actionForEach =
6 c& D! R8 z1 d7 r# B+ j5 S* ` modelActions.createFActionForEachHomogeneous$call8 f* k5 r! T* Z3 Z
(heatbugList,
9 ^" l' M5 ?0 g* M8 p! \! } new FCallImpl (this, proto, sel,6 l! {4 h- ?' \/ n1 q
new FArgumentsImpl (this, sel)));
* Z, q2 x% L+ w; S' Y/ ~. N" ]1 r2 ~2 v$ n } catch (Exception e) {, N3 w9 W5 F0 t
e.printStackTrace (System.err);
! p( j! _' Q! m }
% A" R% W5 X: W5 ?1 z% y5 W
- p6 I. f. M) Y" Y5 Y. [1 A syncUpdateOrder ();9 c9 V: x: {( D! U( |. d
! ?7 G) s6 `. F5 K try {
; H$ \; y# u6 f5 ^+ P modelActions.createActionTo$message
. Z9 o* ^7 s# m; R' t- p (heat, new Selector (heat.getClass (), "updateLattice", false));( o z7 g1 a; b8 d+ b" L. k) C9 p
} catch (Exception e) {
1 Z- Q. X- K O3 q* c9 D( d5 ` System.err.println("Exception updateLattice: " + e.getMessage ());7 C. n* o" Z6 y( O. q
}5 h5 ^ `/ }2 F0 w$ G' I
$ `6 k* a' v* }# R) o( U6 b // Then we create a schedule that executes the
, ]( t+ {* [( l+ F3 f3 [6 z, \$ N // modelActions. modelActions is an ActionGroup, by itself it
5 S) J9 G O) k& Q$ v1 V ^" g& [ // has no notion of time. In order to have it executed in
# ]; K6 X" s6 ]: e2 T8 x // time, we create a Schedule that says to use the
! Z7 ]3 C6 p1 _ // modelActions ActionGroup at particular times. This
( @. U; }* Y$ j. b/ t" `/ E- H' B // schedule has a repeat interval of 1, it will loop every4 Q/ o- m* t; L: [0 M& N4 U
// time step. The action is executed at time 0 relative to' ^1 G% N$ g. [% Y
// the beginning of the loop.
1 A9 v+ U# k! Z/ m. G0 {* s
* i1 D0 P- R$ Z/ ?( u5 | // This is a simple schedule, with only one action that is4 x0 u: S' P: \! _
// just repeated every time. See jmousetrap for more
( H( M* h: \: O // complicated schedules.4 E) Z* l/ `: ]6 O( @. S7 G
: _9 m- H! Y( G: p modelSchedule = new ScheduleImpl (getZone (), 1);
& H$ [5 f% L4 z* S% H modelSchedule.at$createAction (0, modelActions);9 h( g- x) E1 s6 L$ |# u6 F
; X2 |7 _) K, ^! \" Q4 i' I) x
return this;
7 t. C9 H9 `/ ` } |