HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:; v/ J7 w3 c3 N: V( \$ u! s+ Q, I1 O
0 x. h% r& Y# X4 c* g- g public Object buildActions () {
7 W j- x9 \# p, V/ \' y super.buildActions();
0 C. Q, k* _( ~, V! [6 t0 @2 u " G; Q) ~) {1 [5 i8 \( z8 w
// Create the list of simulation actions. We put these in
0 X# G$ Q$ g; H& D. L# Z; i) R // an action group, because we want these actions to be
: M; l$ x$ B- h; {; h // executed in a specific order, but these steps should
: R- T/ B+ B2 h& V% t // take no (simulated) time. The M(foo) means "The message
0 ~% ~. a3 o5 [: f // called <foo>". You can send a message To a particular
1 K* ~+ e, w/ r3 d" q7 D // object, or ForEach object in a collection.
M/ [- \+ F) D9 r8 S' _0 m ( Y# v! k/ L. F* A) j8 C
// Note we update the heatspace in two phases: first run" `: A9 N" r. {! Q5 k
// diffusion, then run "updateWorld" to actually enact the) ?: [! O, G8 O& C+ k9 l
// changes the heatbugs have made. The ordering here is4 {2 j j# a9 B; q0 H i m; i
// significant!
" f: l0 Y! n' |9 d; @* A( m: U 9 h4 B! m3 ?7 z
// Note also, that with the additional4 Q+ p( D9 [* h& y/ E' e/ I5 s
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 |" `- J$ D7 Z1 q9 H
// randomize the order in which the bugs actually run
% m' o+ R. D, U9 O0 A8 L. A+ v7 ~3 \ // their step rule. This has the effect of removing any* k' g8 c& s0 o
// systematic bias in the iteration throught the heatbug# Y; h# `) o5 o' P: H5 G8 n
// list from timestep to timestep
0 q: v4 ^/ q: ]3 F/ T) f . r9 e6 u) I' A5 N4 u- j8 P
// By default, all `createActionForEach' modelActions have% |5 Q: U3 W0 u% f) v3 `
// a default order of `Sequential', which means that the( r" c1 ~( ]$ f$ j8 L
// order of iteration through the `heatbugList' will be. z1 ^, _. C( ?# X6 L0 V
// identical (assuming the list order is not changed
1 `4 T* ]$ i( i3 \2 G // indirectly by some other process).
! j. R; s. ~1 P! I( @ 1 R- _4 Z" O2 K6 N" q8 z
modelActions = new ActionGroupImpl (getZone ());
# C6 P+ k$ a3 v$ J7 l9 D
+ Q% g4 H, r8 y' B, L) i try {
& \% T& X }. O5 E0 U modelActions.createActionTo$message
+ @* N+ I1 y# }# C, l* j. F (heat, new Selector (heat.getClass (), "stepRule", false));
" G" S# _4 o9 z( J- e4 y, e4 A } catch (Exception e) {4 C# H2 [) X0 Z* ~) ?
System.err.println ("Exception stepRule: " + e.getMessage ());. Q/ i7 \0 p" _+ y4 [
}1 k Z. w7 F" D( K
, M/ T t! k* Q' K: x
try {
# g/ s5 N* g0 Z$ Y# l8 d Heatbug proto = (Heatbug) heatbugList.get (0);
+ t( {, J* I/ x* X/ ` Selector sel = 0 r- h& d4 B. k+ v" I; a
new Selector (proto.getClass (), "heatbugStep", false);
* p, m2 Y& @" F8 I% D, x actionForEach =2 e) V8 J) W' V+ R
modelActions.createFActionForEachHomogeneous$call1 U7 ~ q3 @! n
(heatbugList,
$ \1 }7 }: v l# b6 f8 T new FCallImpl (this, proto, sel,
4 N# o% ~/ j! a/ t new FArgumentsImpl (this, sel)));
& S# F2 \- H) ?9 L } catch (Exception e) {: _/ }! O5 _4 k I4 q5 V u
e.printStackTrace (System.err);* p* O+ p( K8 P
}! O1 W: m, }: m3 c6 {6 R, f- y w
. Y4 j) e* {' b" l( ~0 p
syncUpdateOrder ();
* S q4 }$ ~, u+ I9 {' q. d4 A( a$ H; ] y; R# h6 `
try {
) W0 f& J: T1 o* m! f7 @ modelActions.createActionTo$message
8 w5 ?! r" r1 w' c. W! `4 s8 D (heat, new Selector (heat.getClass (), "updateLattice", false));
6 \. \: J8 p! |6 e# p3 X } catch (Exception e) {
! T C) b5 M& _' p System.err.println("Exception updateLattice: " + e.getMessage ());) k% ?3 N: p2 r
}
9 O5 s: A; q8 V1 ] ' a/ T& h) g( E. Q% {
// Then we create a schedule that executes the
' V; m% @; E" o: C8 y // modelActions. modelActions is an ActionGroup, by itself it$ I2 {. d4 b+ R8 D2 i( V3 f1 T5 e, q
// has no notion of time. In order to have it executed in* k6 W: m% A3 r M
// time, we create a Schedule that says to use the
% A, K0 g. _# X8 I6 |6 [* g // modelActions ActionGroup at particular times. This
0 |6 ?6 l& @) p% s, e // schedule has a repeat interval of 1, it will loop every
' N! t7 G/ y1 P v // time step. The action is executed at time 0 relative to& F; O6 d5 V" A- ]
// the beginning of the loop.
5 j' }7 p0 d' Q9 B4 ?0 W: n
, {% I% f1 k& A! k4 c // This is a simple schedule, with only one action that is1 g: F$ {8 T: ]+ S6 W
// just repeated every time. See jmousetrap for more" N) e1 n0 I, m* v+ J' g: u
// complicated schedules.
* S# o) z! R; u- R8 l7 G
9 u* R$ _ ] u$ e modelSchedule = new ScheduleImpl (getZone (), 1);9 }, W$ B& `+ b* C; ]9 b4 J
modelSchedule.at$createAction (0, modelActions);/ W) p5 _, r* I$ p: P
& n/ o7 I8 @8 u return this;9 {$ Z( E7 t) [- U. [7 u
} |