HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 i+ {, N& `% Z8 d" ]# `
& A& B7 }5 g0 G& k: ?" r' G public Object buildActions () {
0 r& J n0 {. f z super.buildActions();1 R! x, d. }6 n
( K$ v0 X) _- O0 s% Q // Create the list of simulation actions. We put these in6 y* ~0 I6 h3 k; H2 j* \$ M
// an action group, because we want these actions to be
$ B* R V, `/ v- t4 u0 D' }' K // executed in a specific order, but these steps should
{! N( M7 _" X& ~# k; U // take no (simulated) time. The M(foo) means "The message
& K( P6 n" _) t2 O% Z% D // called <foo>". You can send a message To a particular
. O$ D( E9 X9 o1 r$ e // object, or ForEach object in a collection.- _' ~! W+ S; p
7 w) ` }0 g5 }2 ?
// Note we update the heatspace in two phases: first run6 [6 o% }$ Z! q6 R: i O5 i
// diffusion, then run "updateWorld" to actually enact the
. n7 L5 t( a C" |+ `) Z // changes the heatbugs have made. The ordering here is
( q- V5 O3 h( m // significant!
9 Y# Y+ I) W( [ $ c( \: R! }; U* K ?: V
// Note also, that with the additional8 _- r# u8 U. d: y, o
// `randomizeHeatbugUpdateOrder' Boolean flag we can- d' e: C) j, s- ~
// randomize the order in which the bugs actually run
& W( i0 J8 g, g: p // their step rule. This has the effect of removing any/ T3 \; B. I0 W q0 C' |
// systematic bias in the iteration throught the heatbug
0 N; e, N- e n# X9 ?6 S // list from timestep to timestep
6 X+ Q/ [7 E0 e5 Y& o & J7 e, C x/ l' I; M8 h( C+ \
// By default, all `createActionForEach' modelActions have3 z0 C3 L0 t* ]; q+ X% A
// a default order of `Sequential', which means that the
) _7 m, c' u% G3 D; ?1 H // order of iteration through the `heatbugList' will be
: k; T7 `3 d" \" ~+ X E // identical (assuming the list order is not changed
4 R i" D' }/ H // indirectly by some other process).9 V8 ~2 e# _8 X: y
% j' M& ~) o! ~; u7 O% a3 K0 g' ` G
modelActions = new ActionGroupImpl (getZone ());2 _" m9 ]- T8 _& `( W
r4 m! _$ t6 w Q' } Q
try {
+ }& o P8 I _* ]" a( h V4 R modelActions.createActionTo$message
. V% {2 i9 \* q1 r (heat, new Selector (heat.getClass (), "stepRule", false));
. p; S1 u( @* W/ a5 U" O } catch (Exception e) {
( F' i4 r8 q! q+ r System.err.println ("Exception stepRule: " + e.getMessage ());( P$ D: A! g0 T8 C2 m& j
}/ i% I( p& i4 N* B
; i+ U3 u9 ^( w5 ]1 F
try {6 F9 x( M+ `" m ]& _8 K+ W* M
Heatbug proto = (Heatbug) heatbugList.get (0);
5 |) s' A, A; R2 A3 Q Selector sel =
1 n8 m4 i( u$ P% }% B, M new Selector (proto.getClass (), "heatbugStep", false);
z6 G8 l0 \, l" {! M actionForEach =5 ^9 Q: f) y4 s8 {
modelActions.createFActionForEachHomogeneous$call
* X7 B& L+ l y8 ^ (heatbugList,
0 S1 A; `8 Y8 |! T9 `3 I4 { new FCallImpl (this, proto, sel,/ N2 g" D6 E+ f9 H; T* u9 R, H
new FArgumentsImpl (this, sel)));
# g4 I# D% s7 \; K3 v } catch (Exception e) {
, J" ~# P- p V/ ~ e.printStackTrace (System.err);
# `+ }0 k( F; b' v4 D4 V }- L V# C1 I E
. W7 I4 c: F+ [! d8 \6 T# L syncUpdateOrder ();& |/ J3 B$ b2 Y
! P3 a$ ?9 L4 A try {
( X0 X e& F- l2 m/ b% V/ | modelActions.createActionTo$message 1 M$ k9 |0 h! t6 q1 ^
(heat, new Selector (heat.getClass (), "updateLattice", false));$ l3 v Q$ [: V) J6 v1 f/ h9 e
} catch (Exception e) {# ~% r, P0 T& j: X& o
System.err.println("Exception updateLattice: " + e.getMessage ());
5 |3 d% y* p9 W, @ }) n$ Y! H6 h& [2 m( ~; c+ D
; T! C; t6 n1 `. K // Then we create a schedule that executes the+ ^) f0 Z0 m) P
// modelActions. modelActions is an ActionGroup, by itself it% q% ^0 z0 k% A Y2 M: _
// has no notion of time. In order to have it executed in
' Y) v. Z, }. `, j // time, we create a Schedule that says to use the0 j- H/ u i, F: k9 C
// modelActions ActionGroup at particular times. This0 P$ E4 P# P% w8 n
// schedule has a repeat interval of 1, it will loop every- }: n( E/ [4 s, x. Z- E
// time step. The action is executed at time 0 relative to
- a% S, L' B3 \( ` // the beginning of the loop., l V6 T P9 k+ J1 j( Q9 K
% `* I6 ?& d/ d, ^! z8 ]' }
// This is a simple schedule, with only one action that is
7 |% q" L+ x: ` // just repeated every time. See jmousetrap for more
7 n6 e' Z0 y- q0 G* O% j // complicated schedules.
1 S* M+ a3 n0 r5 _ * z% I/ K8 M4 l/ H5 ~& Q8 B H% Y* c
modelSchedule = new ScheduleImpl (getZone (), 1);3 O5 ]7 T' w& G/ a% D3 [3 m
modelSchedule.at$createAction (0, modelActions);
1 G( i [7 k* r- N$ c ' X- g9 y0 x$ s; e |
return this;
7 X u9 r9 L+ [# A0 h+ V } |