HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: k$ o7 Y* t5 o. E/ E* Q
% R- f$ K/ o" H9 S5 S public Object buildActions () {: `3 G- I" q* l! t3 k9 |( K; _0 T
super.buildActions();
# y0 R6 I) c2 o7 s0 s Z; @
, Y/ s) E c w S4 J7 A4 p // Create the list of simulation actions. We put these in5 a# u @, k) M; t; K2 q# O$ v
// an action group, because we want these actions to be
- H2 N* H: [9 C7 Y) R5 a // executed in a specific order, but these steps should+ R# g' u9 C1 Y$ G
// take no (simulated) time. The M(foo) means "The message
' j! w: b) M' _9 t1 o: ^+ | // called <foo>". You can send a message To a particular
' r0 I- g7 V9 `2 r9 I0 ` // object, or ForEach object in a collection.
7 e. h5 H$ i4 T+ @5 J i$ J- X# F
) S5 {( V9 J9 o' p" [ // Note we update the heatspace in two phases: first run( H/ t# P! h2 d, [3 q) V
// diffusion, then run "updateWorld" to actually enact the
) i' z, ? U% o1 ? // changes the heatbugs have made. The ordering here is* L/ N! C$ F3 I9 z e" _$ A
// significant!
6 O' r1 h# ?) @ I+ b
9 z' b9 Z. F7 W( A6 P& b- f0 s' a$ R // Note also, that with the additional7 ^# z$ X3 R( u" O* b0 }
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 h6 X4 I2 a8 Y& G
// randomize the order in which the bugs actually run4 k( l% s1 ^, E( Y
// their step rule. This has the effect of removing any
; M+ s0 s, U- H // systematic bias in the iteration throught the heatbug
) ]* B8 K' K9 E8 B v' H( {; ? // list from timestep to timestep
5 E/ [! F. C; m* N( l % k! K% n! g( I& F( k8 ^& E
// By default, all `createActionForEach' modelActions have
( d; `2 l9 w0 z5 e. ? // a default order of `Sequential', which means that the) F2 _6 |! v4 ]$ i4 b
// order of iteration through the `heatbugList' will be7 u3 t g+ e4 Z& W4 A
// identical (assuming the list order is not changed
# Z' J5 ~( }3 Z) v: s% ]% N // indirectly by some other process).+ f, u1 @6 D' d) c/ Q$ e3 u
. E$ ]& K* }, i
modelActions = new ActionGroupImpl (getZone ());) s& p4 ]! [/ A3 Z& {
' ^* L6 Q2 y( l4 R, V( Q
try {. w+ m- h [" p9 f
modelActions.createActionTo$message+ P; K& Y% y2 p) N$ u3 ^' g) e: B
(heat, new Selector (heat.getClass (), "stepRule", false));6 n a0 k ?3 a
} catch (Exception e) {/ j. q% E* Q0 Q8 u/ `! Z
System.err.println ("Exception stepRule: " + e.getMessage ());
0 w$ Z; V) B: @5 t }
8 ^. M/ s7 w5 B! G, A- M# x. t2 S$ e8 Y$ _
try {
4 N, [3 T9 {6 N! U5 a2 G3 f Heatbug proto = (Heatbug) heatbugList.get (0);+ C9 j0 I, m3 C! ? h1 q" H& D' `
Selector sel =
6 ~* R8 t! s# k% d/ W+ D+ I new Selector (proto.getClass (), "heatbugStep", false);1 Y* [8 h; Y3 G) Y
actionForEach =" E% f8 p7 _3 h
modelActions.createFActionForEachHomogeneous$call
+ n. h5 s- M# z2 t (heatbugList,- U: k$ R( }- v/ L5 e6 O/ J7 a; b% G
new FCallImpl (this, proto, sel,- |9 ^* \1 y% q4 o& v
new FArgumentsImpl (this, sel)));' K% ?( c; F; D3 K) H
} catch (Exception e) {
- ^& R. O! D: w$ @8 L4 n) g& w5 p e.printStackTrace (System.err);
7 z) O$ T1 X. I }3 M9 d7 @, G9 ?
: `% g9 Q& m3 [4 ^' Q/ J$ j syncUpdateOrder ();
7 r+ |, B+ S: O |1 X& r4 [! M, t( I* z3 l* O" h: n
try {5 J/ l, y% ~% k8 E9 g4 Y
modelActions.createActionTo$message
& K, V H! k3 |: V; _! R' d4 E (heat, new Selector (heat.getClass (), "updateLattice", false));8 o% G# t2 N4 n" p1 R( x
} catch (Exception e) {" B; W- i2 Z' K* k$ b" O# e+ U
System.err.println("Exception updateLattice: " + e.getMessage ());* o, A8 t5 F- f5 {1 ?! F# |% w
}
' X( l3 l5 I# l$ l6 g; T$ ^! f
: R5 T; _+ h0 D9 _3 C) Q // Then we create a schedule that executes the4 v1 ~; U5 Y |, U+ q9 c+ r9 N
// modelActions. modelActions is an ActionGroup, by itself it' _. a& I8 q; y* a' H' h/ x) b/ v
// has no notion of time. In order to have it executed in
$ T( X& [. W6 I7 F/ H7 t // time, we create a Schedule that says to use the
& u* Z; q( J4 q4 X' q/ v, e // modelActions ActionGroup at particular times. This
- R) e5 Y% M7 v3 q8 A$ t8 j' m) u // schedule has a repeat interval of 1, it will loop every. j2 h" T& v& v
// time step. The action is executed at time 0 relative to
$ U1 G4 ]- k2 K // the beginning of the loop.
% P( I$ V- B- D- c* T+ c" B5 C
/ }9 _, t8 _" U) f // This is a simple schedule, with only one action that is
% y8 b% b8 x$ o8 X' F0 }! i5 `& P3 J // just repeated every time. See jmousetrap for more
; P; o9 N7 Z5 y7 L, E% e. w // complicated schedules.. z& X0 Z$ I" t: y# V: ?5 E& K
% Y. J+ ~' B& m2 j# X* n) a& l modelSchedule = new ScheduleImpl (getZone (), 1);
$ Z5 X, i5 K7 f/ _. h+ r, ] modelSchedule.at$createAction (0, modelActions);; W3 g& I0 N' ~3 \% q) [
8 D% B$ w, v7 h' w( i& s
return this;7 G1 j7 K7 m1 w+ |- W1 g
} |