HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ P( { q& p; F( i3 C: ^, b* z3 {# _
public Object buildActions () {( @. c* k" z0 @3 s8 {! k+ H
super.buildActions();; l* G+ P4 J% H" H* C
( c' m- y3 q2 d7 P0 G" Y. w6 j
// Create the list of simulation actions. We put these in) e4 O! ]9 d* n/ a
// an action group, because we want these actions to be
1 n4 v: ]3 F" K! d8 b- @ // executed in a specific order, but these steps should/ z3 a9 N% q1 P% y N
// take no (simulated) time. The M(foo) means "The message8 ~- m& N# k; z; j+ q# f/ D- t+ ^
// called <foo>". You can send a message To a particular
# G' G4 v8 K' y, P; F8 B // object, or ForEach object in a collection.4 ?0 H6 |7 | `1 w( [2 ?7 _5 S
, Q/ {, g5 @+ I; `6 S // Note we update the heatspace in two phases: first run
& d- | L. Y* G: T$ @' }) l' u j; ? // diffusion, then run "updateWorld" to actually enact the2 K! X: d: ?% W2 q8 {. [# Y
// changes the heatbugs have made. The ordering here is: t- n% x5 c7 S q8 v, ]/ r7 w
// significant!( K$ {. ?9 W% _4 p2 Y ^! h* r
' X! C! j4 v* r0 `( ^
// Note also, that with the additional( t6 l6 r B w' v# ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 i/ s( x4 @; r* U: E8 ^ // randomize the order in which the bugs actually run
; L# T3 D2 e% M' j, v6 l4 X // their step rule. This has the effect of removing any
5 D5 n1 e& L& e7 P6 y // systematic bias in the iteration throught the heatbug! [& p* ]/ ^4 U5 t
// list from timestep to timestep
3 l# c' B6 [$ ]& z5 e# m 5 E5 L8 J* n5 x: n
// By default, all `createActionForEach' modelActions have
( [# C6 D0 t& R+ |3 Q5 B // a default order of `Sequential', which means that the
7 X Z5 B& n2 _! g& q; P // order of iteration through the `heatbugList' will be
/ G: t9 @6 U' F3 @ // identical (assuming the list order is not changed& C, n/ M! X: t! o; X, D' Y
// indirectly by some other process).
! [8 v0 o6 S5 K5 _$ F2 y, \. L
% D, v; H7 |# H. P- V) |5 ]$ J modelActions = new ActionGroupImpl (getZone ());8 C, M( q. ?! w: w0 n" V
1 U* a% Y' p- p' M1 F
try {
/ {* N3 H' ~$ B+ m# @ modelActions.createActionTo$message; w) N9 y; u* h3 x% `# C
(heat, new Selector (heat.getClass (), "stepRule", false));
4 n1 B. q$ ] b } catch (Exception e) {6 }" V5 K6 O& h- Q
System.err.println ("Exception stepRule: " + e.getMessage ());
- h% z% g- N! l) I" Z( D" f }
. M, o5 W& A H6 k! @2 r! W/ _5 H: ?+ o
try {) P8 u# R: K7 K* ~# N
Heatbug proto = (Heatbug) heatbugList.get (0);
% E2 N8 ], _- u" R: o. X P Selector sel = / V8 O$ {5 y/ ?; d! E- f/ k) h8 B
new Selector (proto.getClass (), "heatbugStep", false);
# N: o2 M8 I- I3 {- a1 n L actionForEach =! d& c5 T7 d) y l. P
modelActions.createFActionForEachHomogeneous$call- c1 h1 R/ c6 _ M; I! y4 s
(heatbugList,
& Y6 i4 A; T) M% _' K. l new FCallImpl (this, proto, sel,
" O' \3 o. T9 K( F new FArgumentsImpl (this, sel)));5 ]/ j& s. w9 }2 A1 B2 D
} catch (Exception e) {5 |% w5 m! n& W! u4 ?% g- {" k7 {- W
e.printStackTrace (System.err);7 r5 n0 h/ b- W9 Q. C- L
}, n0 ^! J4 B P& ?/ v
/ K4 f8 F, M, u5 j$ D7 U
syncUpdateOrder ();6 n# H) R3 N) f. v! R& I# k4 k6 Y
0 G' [3 a- B" t9 O
try {" ~$ N4 f2 I2 U' }& y' d( f4 M
modelActions.createActionTo$message . ?, a' G. O+ s* w6 O8 ^& n
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 }- Q, @) R: h } catch (Exception e) {
R0 |3 X( k4 x0 i$ N! J( t System.err.println("Exception updateLattice: " + e.getMessage ());# Z" O& s7 Z" O
}
4 U* s% q5 Y# ~6 s) f% _" D8 U- I 9 x# i6 {8 E9 g2 R1 Y7 O7 N
// Then we create a schedule that executes the& Z! ~9 y' U: P9 ?* q+ m
// modelActions. modelActions is an ActionGroup, by itself it
4 |) P2 S! @4 j4 L r6 I( }8 P // has no notion of time. In order to have it executed in' g# H2 ]. a- S( z4 v
// time, we create a Schedule that says to use the
1 j+ N8 Y% w5 Q: @1 E K // modelActions ActionGroup at particular times. This
2 N. N" N* y- ~5 V4 v! \" U+ Y // schedule has a repeat interval of 1, it will loop every# H; f# b8 ~1 V1 C
// time step. The action is executed at time 0 relative to$ T' w5 M3 l; {4 d" H
// the beginning of the loop.$ L _, Y: E3 o- o
" @4 R# ~4 W* V2 h7 {) V
// This is a simple schedule, with only one action that is
5 y0 G5 k. ?9 g7 Q! f // just repeated every time. See jmousetrap for more
! J' |- C, x* m! W9 W1 u; V0 U4 x5 | // complicated schedules.* S5 Y7 A( l) \. o
F7 c( d0 u+ z4 u$ d6 B modelSchedule = new ScheduleImpl (getZone (), 1);; `% f- p8 O, B9 \, a) z( ?9 e8 T" y
modelSchedule.at$createAction (0, modelActions);/ J, i' a" u+ r. D3 ?) _! V+ z
2 E7 _3 X8 o- t% h0 e) B9 Q return this;
) u; o9 z4 A b ~ } |