HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ s. D; P# D+ f& ?% {4 e/ V! @, g8 Y6 P/ G
public Object buildActions () {
9 b* a. a7 p* d/ t* {8 H' G super.buildActions();
( L6 T) r" {2 {) [; R ; P% h! D9 Q# n# a7 D& q4 r% h
// Create the list of simulation actions. We put these in
" g2 {9 d/ V' y* q. u( C$ `# E // an action group, because we want these actions to be. _+ J3 q+ o H! x/ N5 t
// executed in a specific order, but these steps should
1 T; t7 c9 e3 I+ s& {3 q) H // take no (simulated) time. The M(foo) means "The message
, o' }& u7 `2 _: x8 n- Q# K5 i // called <foo>". You can send a message To a particular
6 K( u, |- ?* t' }8 R2 @) ~3 | // object, or ForEach object in a collection.
% ?2 z( ]0 E: Y& K+ ?, G
" Q' R8 W- R1 r5 q8 P8 k // Note we update the heatspace in two phases: first run
; @, H3 A3 G3 g // diffusion, then run "updateWorld" to actually enact the9 ~8 z: A; b* i: P4 S, D: ]
// changes the heatbugs have made. The ordering here is
6 I9 p3 E9 T8 [7 ?$ J' O // significant!* |* \7 S3 h' z7 I* n+ q; e" O r
5 O" [1 q p5 M
// Note also, that with the additional
0 v7 {" F6 I# G- Q9 A+ X* ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can% K5 t* i9 C" r* o' ?
// randomize the order in which the bugs actually run2 m, ~! d7 \5 s: A$ X
// their step rule. This has the effect of removing any+ M/ o$ ~4 W1 |
// systematic bias in the iteration throught the heatbug
( g) q! H! J2 u2 v' j- j. K% x; J // list from timestep to timestep
( E8 o3 R, }9 l; L; I' i% N. G6 s
' l7 p: Q8 D/ V# T9 ~4 s0 T // By default, all `createActionForEach' modelActions have
+ y$ p, f7 Z+ O+ k9 }: S- N // a default order of `Sequential', which means that the
* s3 O) |# S( r* c- `; B! U8 f // order of iteration through the `heatbugList' will be
/ S! ~- Q. L$ {" m. I$ b // identical (assuming the list order is not changed
4 c3 j! H- H, J4 n! } c // indirectly by some other process).# O! G0 h) J5 [+ c/ N
, w& X) |2 O. O
modelActions = new ActionGroupImpl (getZone ());
5 u4 v- g% g$ H1 s
( i" W) j. b7 N& }5 c try {! o1 \# a W/ K" \
modelActions.createActionTo$message( _% E6 R& Q9 o5 q- m5 r
(heat, new Selector (heat.getClass (), "stepRule", false));4 h x: E. N% l, Z% j/ b9 O+ C4 A
} catch (Exception e) {# d; A4 a# k! E
System.err.println ("Exception stepRule: " + e.getMessage ());1 l! T b) z! c& q. K
}
" i0 I. x7 t% ?+ @
. ?0 g. U) \7 P# R- K try {
) V2 B1 d7 x! ~1 M Heatbug proto = (Heatbug) heatbugList.get (0);
: n. l7 F; n2 g( ?9 i4 |/ Y Selector sel = 4 [! g* ~7 I. o% L* J0 J( V) `
new Selector (proto.getClass (), "heatbugStep", false);. T1 N; r* R& O2 z7 }& y+ p5 K7 }4 A9 J
actionForEach =
3 I& r5 j4 i% Y' r! g: _! h/ ] modelActions.createFActionForEachHomogeneous$call+ \8 |6 B2 y# x( j
(heatbugList,% g4 K: s3 ]( h, z/ E
new FCallImpl (this, proto, sel,. g |/ E& c$ E7 I8 i
new FArgumentsImpl (this, sel)));
5 n$ k$ ^& |0 c% C" w% v } catch (Exception e) {1 d% M$ C# z6 L
e.printStackTrace (System.err);
7 f* L/ e5 z4 V# P% p$ s8 P# s$ z }' p( b+ T1 j# r" [ p+ A( U
4 Z" }3 k% C: c5 V8 m. F7 L syncUpdateOrder ();
6 i! J' \' J v7 \' i) `/ L! t$ _9 K. y
try {, b0 O" B% u5 d/ l7 |' T- F, h9 x
modelActions.createActionTo$message ; {) \" V/ J9 _9 j
(heat, new Selector (heat.getClass (), "updateLattice", false));2 k6 M" e! R0 C7 X Y. v4 X
} catch (Exception e) {' s* O6 L- e$ H
System.err.println("Exception updateLattice: " + e.getMessage ());
- @" c3 g( I4 N/ A }
; K. y) X5 o9 q6 s ] ' p! p0 R( {' q' L6 l1 r3 k
// Then we create a schedule that executes the* n/ h7 J3 w# k0 I% X R$ @9 S
// modelActions. modelActions is an ActionGroup, by itself it. G6 B! M! d7 y6 T
// has no notion of time. In order to have it executed in
# k0 {- Z" S& p" B) @+ y // time, we create a Schedule that says to use the! t1 r% n7 R0 |8 p) m
// modelActions ActionGroup at particular times. This7 Q! g& X# Y1 Z$ h$ b
// schedule has a repeat interval of 1, it will loop every
6 u. {5 E% U7 j% Q // time step. The action is executed at time 0 relative to
+ @& Z2 O6 U8 s5 O7 k9 n7 } // the beginning of the loop./ v+ N" d0 v8 A$ b: B! F; u0 y9 F
`, i) k% Z5 ~ // This is a simple schedule, with only one action that is3 G, ~* y) Y" v9 h
// just repeated every time. See jmousetrap for more: S* O. p. p" n4 W- `) \ R
// complicated schedules.
6 m; {0 W& m+ ~& ^, Q/ [ - o+ H5 t. }9 s: C. v( ]0 R
modelSchedule = new ScheduleImpl (getZone (), 1);8 @2 F4 ~4 Y' g; u% \9 B0 [
modelSchedule.at$createAction (0, modelActions);1 h2 }7 Y9 W' P9 F
4 ~% k% ^' X) E% [+ H h return this;
. Q) e+ v! m V, Z& x8 R0 A } |