HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. w& `/ Y! `( G$ N
+ D) l# E, S# D. \ public Object buildActions () {
; Z/ t p P9 r8 N# d super.buildActions();. c, p, T5 Z- W, G" [' S
1 ^. E2 R N- ?0 p% d) r
// Create the list of simulation actions. We put these in
( ]; G2 h2 b- _' u# c // an action group, because we want these actions to be6 p# s4 P1 \2 q1 G. D
// executed in a specific order, but these steps should. W% s0 {. ^, C3 z3 D
// take no (simulated) time. The M(foo) means "The message3 Z5 E% ?% F+ C+ o5 d
// called <foo>". You can send a message To a particular
7 T+ C, @: Z1 v& ~0 t // object, or ForEach object in a collection.
: S0 d& \+ b8 m/ K
* y6 p! @( O8 v; g. f3 I; H& E/ B // Note we update the heatspace in two phases: first run( W& }; ?# @8 Q. a# r {1 y9 S
// diffusion, then run "updateWorld" to actually enact the# |4 k; ]- @( ?0 W
// changes the heatbugs have made. The ordering here is8 ~- Z( J5 [6 Q. W [
// significant!
# F: ?/ `: I! _6 e& N, I5 Z , H6 t1 ?: j9 S. E. g
// Note also, that with the additional
! U, I0 e1 D# u x2 m // `randomizeHeatbugUpdateOrder' Boolean flag we can8 E: O5 v; Q, ~" ]
// randomize the order in which the bugs actually run, X# L/ O' ?2 S# v5 y2 o: o
// their step rule. This has the effect of removing any
3 t% i8 l1 m* Z \' x // systematic bias in the iteration throught the heatbug
5 F0 A% Q5 \ ]! O h3 D2 C# S // list from timestep to timestep
0 X* u/ v& A \2 q4 t# Q3 W- ?4 ^* d & w3 D6 O) u% O* X5 e
// By default, all `createActionForEach' modelActions have
3 a! n" O+ h9 f9 Z9 F // a default order of `Sequential', which means that the
# Q$ ~0 g, U0 w4 d // order of iteration through the `heatbugList' will be
& F+ j: I! w2 a* J // identical (assuming the list order is not changed0 Z9 V% _' u3 s" @7 ]
// indirectly by some other process)., a. a* {( u9 E1 C0 t8 T+ o
- G; A% k: ^ g2 J7 N& V2 k modelActions = new ActionGroupImpl (getZone ());$ o8 i0 f( e6 k
: N% L0 t5 d5 Q, Y; [- ]
try {
2 t0 e& z7 e& c( {% ~& ]8 u modelActions.createActionTo$message6 t" b9 ?/ f6 {0 i" p* S; l
(heat, new Selector (heat.getClass (), "stepRule", false));& l" r# [0 {% z# \
} catch (Exception e) {* s6 Q7 T: m* R6 H+ z& y7 |3 R
System.err.println ("Exception stepRule: " + e.getMessage ());
( C( @: \& b. v& @4 i: M: l }
. N) \% e" U. h' x" d& ^
1 A8 ^# |) d' x$ q. V. H try {
' `! L0 s% [; _4 c$ o Heatbug proto = (Heatbug) heatbugList.get (0);
F3 [; f% v6 s+ I3 h Selector sel =
; P( h# v% k! H, u# v+ G2 L new Selector (proto.getClass (), "heatbugStep", false);& e1 ?4 k- G9 D( @
actionForEach =3 B) b9 g8 {3 d" r; S N
modelActions.createFActionForEachHomogeneous$call
6 z8 q- O. p0 P' M* ^3 Y6 Y, z (heatbugList,# \5 P% \* S) x+ K
new FCallImpl (this, proto, sel,
0 Z! B- U. j q# H% n1 u) y new FArgumentsImpl (this, sel)));0 r0 j2 H, h& ]5 @
} catch (Exception e) {
& P3 x. w% S- d+ m' u e.printStackTrace (System.err);4 o# ~! w' i, S7 X/ \
}
5 L# O" l6 q% u* o/ s0 {% |
; J( f i$ }, y8 s9 ~* P syncUpdateOrder ();
7 K" |$ S. A3 F. q
. K. p" a- ~8 L5 V5 C/ B I try {
_/ Q4 @) }" q5 \5 h6 N. E1 L modelActions.createActionTo$message
, B4 o& g# ^! ?- e (heat, new Selector (heat.getClass (), "updateLattice", false));
, w6 Z! h$ ^8 x. j' V! X } catch (Exception e) {3 P8 g, n# Y5 v7 g. c1 v! r
System.err.println("Exception updateLattice: " + e.getMessage ());
8 q* h! i: t2 q. t/ [) i }) b2 x- Q8 m1 D J/ x$ E, h
2 t" W+ n7 V; O, { // Then we create a schedule that executes the
. t9 }# \4 y9 \# s4 S // modelActions. modelActions is an ActionGroup, by itself it; t" |& t& a5 ]
// has no notion of time. In order to have it executed in
' I/ w7 K9 }+ t ?; {6 @# D1 W // time, we create a Schedule that says to use the X; ]+ {7 D9 b- t0 `' s4 J( e
// modelActions ActionGroup at particular times. This1 }7 ]: ^8 a" S/ H' e
// schedule has a repeat interval of 1, it will loop every, L4 ^. B x* M" t/ f* ~
// time step. The action is executed at time 0 relative to
5 S1 y9 R% n6 \, h8 l+ p- W$ B // the beginning of the loop.
' W# p# c8 N1 P3 k" L3 z: V) Z6 b r6 {, v; r
// This is a simple schedule, with only one action that is, Q+ X3 G1 i5 s- K: J
// just repeated every time. See jmousetrap for more
; p$ ^& g5 l9 B9 Z // complicated schedules.
$ ^3 Y& U# Y0 s: I7 Q; p, B
: e+ A# [% v. a. @3 }& Y modelSchedule = new ScheduleImpl (getZone (), 1);, V. U( M# R& D: \8 Q
modelSchedule.at$createAction (0, modelActions);
* ~! H; F% E$ B 3 H2 u, C' u9 r7 K) ]2 _8 u8 U
return this;6 G0 p# m7 B, t9 _! Z2 ? p p6 N
} |