HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! j* H. x$ [" ^: I
2 s6 x5 y% m! |6 q public Object buildActions () {
' m1 r1 t8 Y# y) L super.buildActions();# Z! n) e+ U2 S# ^ {7 h2 ]
: n: D9 U; _' p: ^5 v- z
// Create the list of simulation actions. We put these in; l% S; B* _2 q9 \ S3 ^
// an action group, because we want these actions to be, H5 k7 I) T+ P. x; K
// executed in a specific order, but these steps should
1 j1 T# |8 y3 w8 t3 ^ // take no (simulated) time. The M(foo) means "The message' t& j! R/ Q# W/ C4 U
// called <foo>". You can send a message To a particular
0 |( \8 |) `+ U2 N6 d3 ?* K // object, or ForEach object in a collection.
0 M( Z- i; E: P+ p. Q; c4 T & w6 U+ z6 a9 N- t# N) V
// Note we update the heatspace in two phases: first run
$ q- z' d5 |* `$ i" G* B; A; V1 m3 a // diffusion, then run "updateWorld" to actually enact the
3 Q# a( h' j2 r // changes the heatbugs have made. The ordering here is
5 S) X* w' H' S& F // significant!# o: X# ~, W( G4 `
- N! Y( d+ c2 U6 I // Note also, that with the additional$ S3 X" }, M8 E
// `randomizeHeatbugUpdateOrder' Boolean flag we can( T0 a9 v1 w0 x9 N3 O' m. B
// randomize the order in which the bugs actually run
; i& Y, B6 q4 c8 `: ] // their step rule. This has the effect of removing any
a8 ^( y5 E$ J7 W // systematic bias in the iteration throught the heatbug2 i" C+ Q. Y+ Q# ]2 H F
// list from timestep to timestep
0 e1 r! W) ^3 b( O t 7 G7 G9 _& ~& I5 E( R k+ y( {+ R
// By default, all `createActionForEach' modelActions have4 w; l0 \# m/ b# v+ W$ w3 b
// a default order of `Sequential', which means that the
' o' W% B2 ? V8 x# w // order of iteration through the `heatbugList' will be$ d1 k" q- K% s# |4 p$ O
// identical (assuming the list order is not changed
% Q; T& L% U- p3 F // indirectly by some other process).
. a( K* Y8 v+ R4 \: g; _
9 s9 ^; {* j) Q" W- c+ I* v modelActions = new ActionGroupImpl (getZone ());4 R9 U4 ^ ]* H* d' e
0 y/ V, I& J& r, n6 p2 B. y& y try {
0 Y! H8 E7 k+ m5 C9 ^( N+ t modelActions.createActionTo$message- V$ A1 ~/ V4 J, S& p
(heat, new Selector (heat.getClass (), "stepRule", false));
8 F- }) k# I' o } catch (Exception e) {$ G/ J5 ]! d/ O' E3 b% N! w! D
System.err.println ("Exception stepRule: " + e.getMessage ());* J% z y' s( r; C4 U
}+ ~7 c" ?+ F/ P( ~0 P" \$ Z
t( i! W# I3 r8 ]1 O/ d try {5 v' u$ W: @9 X" p; W" W
Heatbug proto = (Heatbug) heatbugList.get (0);- z8 {/ {5 o2 V
Selector sel =
`( o; ~! X$ I. d% m" } new Selector (proto.getClass (), "heatbugStep", false);3 [/ [: B- Z! z; S3 [# Z
actionForEach =- e3 T& s9 ?" d0 _) y
modelActions.createFActionForEachHomogeneous$call2 t$ M! v& A! L0 I8 J
(heatbugList,; b; \1 E' {0 R; }
new FCallImpl (this, proto, sel,5 y7 F1 q$ c% S, y/ _9 z
new FArgumentsImpl (this, sel)));+ h r" L! d5 p' N( `9 U
} catch (Exception e) {8 k. F( l8 b- |9 i
e.printStackTrace (System.err);0 D0 O. D4 e% ~: }& a7 h! ]( j, B
}" e$ \' D7 A( L2 k7 G* ~& l; w7 q
7 b0 V# a7 L# f6 d6 o
syncUpdateOrder ();
6 {$ s6 X# {, ~. u6 u5 L- v( w s( a* R3 t' B0 B! K
try {
% c @0 r3 H% ^$ u8 H: [- K; X1 C modelActions.createActionTo$message
$ x' @! h! Y) h$ `, f+ B# Z (heat, new Selector (heat.getClass (), "updateLattice", false));
8 u7 ^7 T$ E | } catch (Exception e) {; M" |- i# q J7 t, I# j, R- ?
System.err.println("Exception updateLattice: " + e.getMessage ());" B# q4 b( t+ i q6 L \4 I8 `
}9 t$ ^+ Z, G% ^( i8 c
% F# q6 N. Z$ A9 O6 N4 ]1 Z // Then we create a schedule that executes the
- d& F5 @7 b; m! N$ K8 h5 P // modelActions. modelActions is an ActionGroup, by itself it
( M, g2 l! t% ? o2 _! [ // has no notion of time. In order to have it executed in
0 m5 w% k; i/ x5 M1 S7 M1 e' K4 o // time, we create a Schedule that says to use the
0 t- z3 b7 T! n( M // modelActions ActionGroup at particular times. This# ]5 U) [, A: |/ p/ k
// schedule has a repeat interval of 1, it will loop every8 T. X" r; u- A5 h% T, h7 D/ @
// time step. The action is executed at time 0 relative to5 ?* j# ]) z0 d1 I
// the beginning of the loop.
- V% f& j1 ~' q: F) p
5 Z3 U4 i* b8 X' |+ P$ d' E // This is a simple schedule, with only one action that is
8 C/ s, ]6 \/ B. |$ G; ~( @3 p // just repeated every time. See jmousetrap for more7 Y; K# W5 [6 _) Z! o* O: e
// complicated schedules.0 I1 f, e- N3 ~0 n0 e7 b1 Y* e& o
0 j# j6 H4 a& X& K" U modelSchedule = new ScheduleImpl (getZone (), 1);3 C' j- C' c% g9 n& r
modelSchedule.at$createAction (0, modelActions);+ D+ r% e* U6 C1 `
1 K9 x6 c2 Q; p3 V+ q2 \' ]
return this;
# ^) z1 j5 n# o' z/ K+ R } |