HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 e8 P4 C9 N' {& Q7 z: n5 M
+ W$ [1 |- } a; U1 q: R; ]
public Object buildActions () {
% P" W. F* t0 s- E7 s! F. Z* {& \ super.buildActions();
) X; A" _# {: x+ {' u' D 8 i2 r: e; Z' P) v
// Create the list of simulation actions. We put these in
. c. w. _& y6 o/ I // an action group, because we want these actions to be) K" T2 h, f6 x @, I/ \4 D& P
// executed in a specific order, but these steps should
- b4 g- R, n" n/ O, c/ I. d // take no (simulated) time. The M(foo) means "The message
7 M* q# f- T, }. w // called <foo>". You can send a message To a particular+ |) Q9 V8 t( h- w) R$ J1 w# C
// object, or ForEach object in a collection.
) I# ]6 N: }* E2 p( X& O
- O: g! s/ q( `, s! F // Note we update the heatspace in two phases: first run
" I4 R6 M7 U3 T" a1 ?+ I // diffusion, then run "updateWorld" to actually enact the
$ p1 \) [* s$ t2 I // changes the heatbugs have made. The ordering here is s7 b3 e" L: d% h
// significant!
& |- C& u# k! l r
! }! i$ e9 [- U# @ // Note also, that with the additional
1 x# {* g5 h6 M // `randomizeHeatbugUpdateOrder' Boolean flag we can5 V9 {) \, D# ^0 \
// randomize the order in which the bugs actually run' F u" A+ s' V7 L3 `4 ~
// their step rule. This has the effect of removing any4 C+ M/ J% \% t* `/ t
// systematic bias in the iteration throught the heatbug
# b$ M" w3 _ ?3 W& p // list from timestep to timestep
# X& g2 t( G ]: M+ B- @+ J
9 Z/ E% ~; U3 X* i. A( l, s2 O& R // By default, all `createActionForEach' modelActions have
: M% I" ]3 O0 C0 |& o- W$ J/ p! \' e // a default order of `Sequential', which means that the
1 z" k7 U! e4 ?9 Z+ [ // order of iteration through the `heatbugList' will be
# _2 ]5 Y7 G4 j // identical (assuming the list order is not changed2 h- @9 d/ ?+ o+ X- t( Q7 _
// indirectly by some other process).: R$ u5 y2 L1 _" @: x) U9 @" a
* f A1 p6 a8 [& A) z
modelActions = new ActionGroupImpl (getZone ());0 X8 k4 F# M3 F1 e$ w1 r8 B$ ]
; U5 H2 \) ^2 A try {4 d- s2 B: h' [
modelActions.createActionTo$message7 W' E' @/ m$ z1 p" z2 s
(heat, new Selector (heat.getClass (), "stepRule", false));/ c. }8 X* H1 ? V; ]
} catch (Exception e) {+ N1 I- I# @, c. {2 B o. I/ F8 \
System.err.println ("Exception stepRule: " + e.getMessage ());2 p% P+ N$ t3 u7 h& K) u
}
( H! H1 `; m9 J4 K# m
% D6 e: `, `' x8 W8 x try {
- @# d: n/ t4 ~: O, c# j7 J$ P3 s2 A5 i Heatbug proto = (Heatbug) heatbugList.get (0);0 H( X" F! L, T5 G7 _, r7 E
Selector sel =
4 e* @. |- _5 s4 ~7 K4 c$ V d new Selector (proto.getClass (), "heatbugStep", false);
, L, k# o/ `5 p$ E actionForEach =
9 b! J+ \ x' F" w; u9 Q# x6 | modelActions.createFActionForEachHomogeneous$call
0 P, C) n } ? (heatbugList,. g- _' ?' t2 ?
new FCallImpl (this, proto, sel,
( ^! K& I1 E1 d new FArgumentsImpl (this, sel)));0 Q3 s! B! [$ O: i0 a5 i
} catch (Exception e) {
u d4 c4 x( a) j& s1 I) K& t @ e.printStackTrace (System.err);! B# N: O6 C0 Z9 b( F, b4 h0 S7 n1 o
}7 b. f- S, L3 D/ }( q; p
7 x1 n5 _4 p. ? syncUpdateOrder ();4 J" P" { B, ?
3 P% Q& ^! H- \. p! m6 _
try {
2 i0 j) v( ^5 |) J- f s- E modelActions.createActionTo$message ' w1 L6 [: G) S+ ^" h4 i/ E
(heat, new Selector (heat.getClass (), "updateLattice", false));
) G" U( a1 `6 v5 @( x& K } catch (Exception e) {
( L L0 l8 X# i+ O/ ?4 G& i3 Y System.err.println("Exception updateLattice: " + e.getMessage ());
9 o2 n0 T# s+ I- k3 j/ X }
) h2 K( p, P% M( D9 y 8 S, y% |" g* `1 }0 e+ e7 o# {; p5 A
// Then we create a schedule that executes the
! y% ?% j: H! \7 B0 x o // modelActions. modelActions is an ActionGroup, by itself it
8 i8 k- M; l" N+ G ~ // has no notion of time. In order to have it executed in1 A! `8 T% p! p& H8 D8 i
// time, we create a Schedule that says to use the
; R3 g5 k0 R2 h. f, D8 M, l // modelActions ActionGroup at particular times. This/ Y9 X7 a, T3 y9 h
// schedule has a repeat interval of 1, it will loop every) ~5 N# t0 G2 @" \, y: x
// time step. The action is executed at time 0 relative to
. E$ O$ c) ]0 w J2 S" @+ t // the beginning of the loop.
4 t6 I& y# L" w, F
; e" g( A7 Y( _8 _5 Y* Y // This is a simple schedule, with only one action that is( z, R, j/ t' N" g
// just repeated every time. See jmousetrap for more- B* L! K3 _: e8 `& x0 }, G
// complicated schedules.
' K5 ^9 s4 M- T! `7 W " n( n. Q, O+ f
modelSchedule = new ScheduleImpl (getZone (), 1);4 D* p/ f$ g! ^7 v+ ~
modelSchedule.at$createAction (0, modelActions);+ I1 |) J S# ~
5 n2 `9 R7 b J5 y. L& K return this;
) z/ }4 B; s8 u- { } |