HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; A4 l& a9 @( Y4 B0 ~; f( h! d) ?) Q- A* M e) e6 q' ^7 \% V; ?0 ?" `
public Object buildActions () {9 Q3 O; _" J! j6 V% S% ^; _8 ?
super.buildActions();" N, l! F: R3 R! A/ t4 A' x* ^
* ?# S! y. Q( Q! U5 m! W7 z9 N
// Create the list of simulation actions. We put these in4 D, \; j. d* [5 R9 m6 P
// an action group, because we want these actions to be9 t: L1 e1 C8 s. x' S; [! C8 k
// executed in a specific order, but these steps should
" l" n( F! \7 T, l! m3 Z! U* B7 T // take no (simulated) time. The M(foo) means "The message1 t( }. F; Y7 W# r; Q! b
// called <foo>". You can send a message To a particular
$ @0 }8 x2 q2 d; z; A // object, or ForEach object in a collection." C! Q* S: {, F- p6 Z% P U
5 o& y& K- l, l: N6 k
// Note we update the heatspace in two phases: first run7 b* ?$ w, Y: p4 ~
// diffusion, then run "updateWorld" to actually enact the3 q1 q9 a9 t/ @# N* R
// changes the heatbugs have made. The ordering here is
, z9 [8 S3 j) \6 g8 `3 A, `! D // significant!5 V, l( J, R+ z1 `) \
/ _2 H2 z+ q" R _+ ?+ k // Note also, that with the additional
; U# Z) Y9 B; `4 m. w // `randomizeHeatbugUpdateOrder' Boolean flag we can' l* y, ?5 \+ \5 k
// randomize the order in which the bugs actually run4 }5 u! h) G6 g/ V% A! X! O3 u
// their step rule. This has the effect of removing any
1 S* ~1 y5 r8 ^0 J1 F* d // systematic bias in the iteration throught the heatbug; Y* s* [3 C% `6 ]+ V
// list from timestep to timestep
9 k. V$ w. Q1 X9 |1 m 7 n% U x" g! x$ q" B$ ^
// By default, all `createActionForEach' modelActions have
! G$ M/ G% p1 v* v0 W) E" ^ // a default order of `Sequential', which means that the
) R8 r( Y! s+ P- A8 r' R // order of iteration through the `heatbugList' will be# c) H. d, A* s: S" e/ K! f
// identical (assuming the list order is not changed
- G, K% t# [. X3 u& n9 A // indirectly by some other process).
j% h6 ^+ ~5 H2 q1 s2 g C: ~. j: U: E, a2 ~
modelActions = new ActionGroupImpl (getZone ());& ~- b& Y& n# D3 K
: {; `1 D6 X! c8 ] Y0 J try {
% f9 d, b- @, o' {% p$ U `; k modelActions.createActionTo$message
6 K+ ~6 l. j4 C* G (heat, new Selector (heat.getClass (), "stepRule", false));
8 b8 M6 m; b. B5 C } catch (Exception e) {
4 I: o9 B" y" S* J3 @ System.err.println ("Exception stepRule: " + e.getMessage ());$ f) M9 R W' v# V( Z" X
}
2 @- w" b8 Z) B5 N6 f
# t) N" s e) e1 j9 Q# l try {
R- S m9 a% f& Y9 A% b Heatbug proto = (Heatbug) heatbugList.get (0);5 o* L( m1 @! l# x" M1 c7 _7 x
Selector sel =
1 g1 _" e- S! C& t! H+ O new Selector (proto.getClass (), "heatbugStep", false);
6 d; R* f. z* C actionForEach =
0 F K2 I/ q0 w1 `9 P# G modelActions.createFActionForEachHomogeneous$call
0 T: R" S$ e' l: q: `0 p (heatbugList,
7 T3 H3 g* `, J( M% t3 d/ O new FCallImpl (this, proto, sel,+ w H, a/ S" Y( E2 q
new FArgumentsImpl (this, sel)));$ d4 i( {' T6 B: U
} catch (Exception e) {
0 b9 l5 w7 ^1 s, Y l4 M e.printStackTrace (System.err);
" O/ k5 u9 Y. d H" v }
$ d2 v4 h3 c) P% T. T$ T7 l# E) X2 ~ + q+ _6 B9 f1 E/ y
syncUpdateOrder ();+ M0 L# ]3 \& Z8 R& w3 o9 a- n
]8 g8 {$ w8 G" |; {+ p/ j$ e
try {8 B, V5 R4 Q1 H) y! n/ ~$ l' y" S9 V+ \
modelActions.createActionTo$message
; }, T" D/ A0 v (heat, new Selector (heat.getClass (), "updateLattice", false));
) u/ m% k1 x- L } catch (Exception e) {
, S! z1 d* `+ P. L System.err.println("Exception updateLattice: " + e.getMessage ());
1 ]" E! C g: X. F/ z! E! Z }
8 F7 \+ M0 [0 f* Z8 u$ `5 X 4 W- V; n: ` m& w& m6 n
// Then we create a schedule that executes the' v8 ]. k; y# Q# p1 ^* s5 \# o
// modelActions. modelActions is an ActionGroup, by itself it; y- ^5 y+ d4 R9 o- l
// has no notion of time. In order to have it executed in
- ]+ ]6 \- a+ t2 T // time, we create a Schedule that says to use the$ [* j8 V3 a" _1 f8 o$ Y
// modelActions ActionGroup at particular times. This
0 {2 t. B: r4 i! Z! r2 E // schedule has a repeat interval of 1, it will loop every
) h! `7 r: E/ s& U# l! h // time step. The action is executed at time 0 relative to
G3 F& Z" W% `) y: ^ // the beginning of the loop.
{6 D. e f( N: x. x) {
1 W# Y1 U& C( ~# |& ` // This is a simple schedule, with only one action that is3 \, s2 n; W( B
// just repeated every time. See jmousetrap for more
k, ~, u' o( J9 t4 }7 V# R* w // complicated schedules.9 H" h2 O8 v( V( G$ u
3 p; R/ R M3 @ f Y+ Y6 b* L
modelSchedule = new ScheduleImpl (getZone (), 1);
5 W6 Q2 W+ B E' P5 ]0 ^3 Y modelSchedule.at$createAction (0, modelActions);! Q8 ]9 G2 P* _+ {% U
* | W: H( V i
return this;
+ q; ] a. y0 ^) v0 F, V } |