HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, K/ ?. n" U; i2 B+ \& q3 I, Q" s0 u' f( n% A$ p& ^. a0 f' n
public Object buildActions () {
3 ?" ~- _5 f ]: A2 l+ U- n super.buildActions();4 ^, x; ?! f6 p+ W$ p0 p3 E
, V/ {1 y8 c& u1 u
// Create the list of simulation actions. We put these in
( M/ s3 c* X3 u4 t& G) h% N+ C // an action group, because we want these actions to be
0 P5 [$ ?) E$ S // executed in a specific order, but these steps should
[ F: J5 _2 ~4 J* x // take no (simulated) time. The M(foo) means "The message
' R" H) @' y9 @7 L0 } // called <foo>". You can send a message To a particular' `9 V5 H M# x0 `
// object, or ForEach object in a collection.4 U' o6 O3 N: r
, i% x0 q* ~1 } v8 K: m. M
// Note we update the heatspace in two phases: first run
0 d& n& `6 }; |: e6 h1 k- Z // diffusion, then run "updateWorld" to actually enact the
, O/ }" X5 N" ^6 G6 h; i7 i% L // changes the heatbugs have made. The ordering here is* u5 l& x! y) `" I( `! U% Z
// significant!
! q$ V/ G8 T: F* x2 K6 B 2 }7 _ l& i# ?( }6 \ O7 j
// Note also, that with the additional0 V/ l+ u; K$ }+ H+ Z3 K/ X
// `randomizeHeatbugUpdateOrder' Boolean flag we can- C" K: \ k- \9 O' b
// randomize the order in which the bugs actually run- l! l ]3 ^! e2 ~) v
// their step rule. This has the effect of removing any8 a. c9 I [2 j' U
// systematic bias in the iteration throught the heatbug- R& N* H8 S0 F. @. n* v) n6 K
// list from timestep to timestep
5 D- l! h8 J6 ^
5 N' W, I5 Y! y4 q O! a5 P // By default, all `createActionForEach' modelActions have6 l5 R# z P* ?1 H9 A
// a default order of `Sequential', which means that the
4 a% F1 p) W) T& ` // order of iteration through the `heatbugList' will be0 J/ V8 T. W$ z/ q7 P1 O
// identical (assuming the list order is not changed
+ c V: @; u. _% | // indirectly by some other process).- t+ J; _! e+ U8 k7 P. T+ M6 ]
# n* C" E: e8 ^" I! ~) |. ^- ~ modelActions = new ActionGroupImpl (getZone ());9 {5 t8 }4 G; v2 R5 |
5 I; i: o" \8 S8 c try {9 k5 Z) k$ c( \& L& [" m- |
modelActions.createActionTo$message- T0 T0 ^$ i8 E1 k! \! G. n
(heat, new Selector (heat.getClass (), "stepRule", false));! |) k( J" h' P1 A
} catch (Exception e) {
# A' t; R9 e/ y* g5 m2 b$ L V System.err.println ("Exception stepRule: " + e.getMessage ());$ ~: l: U. j3 V+ g% V" M* z
}
) v7 p7 d, a% l( n. W' }1 d$ p4 m. N# n5 s- A: Q; u* c
try {" N8 ~$ c4 i: [1 |5 e- _. y" T: c
Heatbug proto = (Heatbug) heatbugList.get (0);5 G' A1 }: z! r. w0 v( H
Selector sel = ' W( j2 }8 s$ R/ e. c3 c2 s6 p' M
new Selector (proto.getClass (), "heatbugStep", false);
1 D2 Y ]0 x# ^( t; U o: ^ actionForEach = M6 z6 n# O2 b5 x5 y: X5 ^" s
modelActions.createFActionForEachHomogeneous$call
) i3 A' E4 h$ ? X/ }1 _ (heatbugList,) n; P2 i7 A* ?
new FCallImpl (this, proto, sel,
7 {* ^- [$ j; k& Q! X new FArgumentsImpl (this, sel)));# n: U" E0 F3 _& h
} catch (Exception e) {
' U/ \& x5 c+ ?* o* N3 L e.printStackTrace (System.err);
$ X2 x8 i \* e1 F W- L9 r4 d& {1 ? }
% j$ U% ? i/ ?5 w 4 l9 Z" J* D6 Q. ^
syncUpdateOrder ();* Y& R* A+ Q7 p. \9 M& p0 C
M; y, P; v8 U& D1 i8 w
try {0 G& a8 ^) _1 T& K! e& o/ E9 a8 j
modelActions.createActionTo$message ' J) U3 G N7 W/ t K! S9 w) }
(heat, new Selector (heat.getClass (), "updateLattice", false));( X6 [" O' T$ O5 s9 W! ~, q
} catch (Exception e) {
* G2 _) S& F. \4 m' e7 p. r9 g System.err.println("Exception updateLattice: " + e.getMessage ());; w7 Z4 c1 ?5 B- T
}
0 U; I7 j* {: C5 T 6 o9 [& b7 k4 f* q, Y' N2 b
// Then we create a schedule that executes the
6 [# D" \6 Q+ S) Z* A // modelActions. modelActions is an ActionGroup, by itself it5 S% @1 V5 t% n/ _- A
// has no notion of time. In order to have it executed in
9 W( f; g" m' d+ Q b& [ // time, we create a Schedule that says to use the
$ y4 G1 ~2 b% I // modelActions ActionGroup at particular times. This
1 X" V! }- o) D. C- _/ E0 `& t // schedule has a repeat interval of 1, it will loop every
; C2 s8 y0 i5 A, C2 b8 j // time step. The action is executed at time 0 relative to
2 x9 O; i% C3 I! D! i! ? // the beginning of the loop.
1 I) {+ p( E/ \
) s) s5 y% {! I4 g8 O- S0 x, I // This is a simple schedule, with only one action that is4 {$ i$ a6 {/ ^( L; a1 X
// just repeated every time. See jmousetrap for more
+ h$ Y E5 T9 a5 V+ b, ]4 J // complicated schedules.
; P$ Q5 E0 H7 H/ ?+ s$ a: |: e ) }3 u$ V- u3 [) }6 Q8 X: h
modelSchedule = new ScheduleImpl (getZone (), 1);
/ J3 }7 T! A3 p+ }7 F' B1 k y6 x9 i3 c modelSchedule.at$createAction (0, modelActions);
: l/ z6 _; T7 f
$ l* Q d0 @& A return this;
! ]! K# \) Q# K3 O } |