HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. L9 I# `6 u% h0 B
% ~( e o N, P, Q$ L1 R
public Object buildActions () {
5 c6 J/ a7 \* L4 f super.buildActions();
" o+ e6 R& }5 }: T+ }0 c. A* f# g ; Z7 {+ W5 `2 v) v6 ]- q9 Z
// Create the list of simulation actions. We put these in
+ \$ k- b2 {* s7 C3 s // an action group, because we want these actions to be
- ^. T5 c* ?! h9 c+ h# a# ~ // executed in a specific order, but these steps should
9 k/ p, d# \0 v, f* Y9 F7 i, w // take no (simulated) time. The M(foo) means "The message
4 E. @4 J+ p5 @ // called <foo>". You can send a message To a particular
2 }! ^, ^; X: c8 m, y$ ~ // object, or ForEach object in a collection.
; J" K- W9 Z+ i% D! l
' f" P2 X' x0 c' O, y) p // Note we update the heatspace in two phases: first run
$ j/ C# i2 |' h0 C6 B // diffusion, then run "updateWorld" to actually enact the% {8 }4 s+ ]" O4 B, Z
// changes the heatbugs have made. The ordering here is
- M5 _& o* _" Q: O* S6 M // significant!
: p' T* _* S; H ( E) M) S8 |; l. c! T% \
// Note also, that with the additional* s2 X6 @. \- s$ f9 J3 G
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: b. J4 g$ v* c/ X8 V w // randomize the order in which the bugs actually run T8 d2 K1 \( V: l) u$ `
// their step rule. This has the effect of removing any
+ x/ j, G3 m9 ^9 f% }* b3 F* f5 C/ ^ // systematic bias in the iteration throught the heatbug# u: J; N9 U; P2 k, H% L" \
// list from timestep to timestep# {1 z6 R# O; ^ i
6 X# g" h# @0 ~: ]/ [4 R
// By default, all `createActionForEach' modelActions have6 k$ H$ J8 B, w, `6 I6 a L
// a default order of `Sequential', which means that the. _5 S' \ ?" U3 B
// order of iteration through the `heatbugList' will be; H5 E! }1 V& D4 o
// identical (assuming the list order is not changed
. f# A) H3 t& B) _6 q2 M+ p$ M // indirectly by some other process).
: x) T% d, ^5 ^( V9 A
: W% g' y T4 M+ n modelActions = new ActionGroupImpl (getZone ());8 Y5 W7 @. c9 h! l/ R; V" Z) N
$ r9 K$ ^- W$ C% X# A try {
0 Q# t* i g! d$ Q- t modelActions.createActionTo$message7 f& L0 R, T& O7 A
(heat, new Selector (heat.getClass (), "stepRule", false));
' a- B5 Q6 f4 w" t- P: V9 m } catch (Exception e) {
# [2 V$ a' c3 D System.err.println ("Exception stepRule: " + e.getMessage ());1 r. f C/ ]) f
}. r1 \' F# j4 i2 x E3 Y
( n" t. _4 H5 |# U
try {
5 W( ^) ], F# W Heatbug proto = (Heatbug) heatbugList.get (0);) p. }% C; [ s- @& e, D( a7 U$ ]
Selector sel =
, |+ \6 f, i% N4 l new Selector (proto.getClass (), "heatbugStep", false);
2 B7 f9 k |% r3 ] actionForEach =
( m4 Z, W/ \) h7 D2 ? modelActions.createFActionForEachHomogeneous$call% c% |# V/ R. N7 R
(heatbugList,
8 h6 u# X2 Q' ?4 {$ F new FCallImpl (this, proto, sel,
% w' i6 I" D' T) o1 d new FArgumentsImpl (this, sel)));
: l; L# J* J8 H/ _6 E1 ^% s } catch (Exception e) {0 N4 N, F' Q; n; {9 A; j
e.printStackTrace (System.err);
5 t1 K0 b7 w T* u, z }/ M. F0 x+ a! j- Z3 Q5 ~" k
$ o7 m& Z: B P: B J
syncUpdateOrder ();
: V. x- N3 `1 Y9 G( |5 R* H. O2 U l! Z
try {
$ [* l* U6 {$ y% Q0 `8 q) z2 G7 v modelActions.createActionTo$message
' ?" L. Q9 g" Y' }. j. d (heat, new Selector (heat.getClass (), "updateLattice", false));
- e" p+ m | [ P, C: u } catch (Exception e) {
2 F5 o) {; B9 u& e5 S System.err.println("Exception updateLattice: " + e.getMessage ());/ p# e: w- ^. G2 O# q+ B3 k) X
}
" i2 Q8 R2 C8 c
% z- ?; `$ E! u/ V // Then we create a schedule that executes the
3 `5 R$ w( K: t // modelActions. modelActions is an ActionGroup, by itself it
0 S0 d) [2 o# |& M4 H/ A4 @ // has no notion of time. In order to have it executed in
F( @, C% b8 w) \2 W0 W8 ^& p2 r // time, we create a Schedule that says to use the; J: B1 l8 O* h6 g
// modelActions ActionGroup at particular times. This, ~5 Y" R4 f9 T1 X
// schedule has a repeat interval of 1, it will loop every4 ~$ a( J3 ^: d; i8 M2 m: K0 d
// time step. The action is executed at time 0 relative to2 m/ P% B- j5 P* z0 c
// the beginning of the loop.
4 E7 [" c9 L# _3 `) R& H) w1 b. r3 u; ~( ?8 L8 Y# ^
// This is a simple schedule, with only one action that is
' Q, ]) S. r& J. M, o2 k // just repeated every time. See jmousetrap for more, q1 L: s- b! |6 j+ d0 I
// complicated schedules.$ ^% w& u& s: c% P+ F3 }
5 z0 `! @ }5 B2 z/ v F' e5 z
modelSchedule = new ScheduleImpl (getZone (), 1);
% {. L! d8 X6 \6 o% ] modelSchedule.at$createAction (0, modelActions);8 w8 F+ E$ p! Y) e5 H
1 G: Y5 d7 T; m- q8 \0 G
return this;
5 }3 I- M4 ^: i- l/ Y% J, i } |