HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 e6 n* J6 D4 B6 Y
; ^3 t# @. ?8 F: I/ f3 W public Object buildActions () {
3 g4 H( E$ z* Y* h super.buildActions();* I+ C; @. f$ I; \! P" g; {
5 B- u/ ?7 E% ^" v
// Create the list of simulation actions. We put these in1 J4 S, R s8 Y5 W& ?1 x
// an action group, because we want these actions to be6 P5 l. B# P& g2 e! i0 x
// executed in a specific order, but these steps should
: t( @: R+ A7 b$ D- `- ^7 E // take no (simulated) time. The M(foo) means "The message7 I, l: o( w* o7 m7 t. i' a! n' l
// called <foo>". You can send a message To a particular
- u4 U5 M2 |: H4 c5 @ // object, or ForEach object in a collection.1 l/ b! L! _9 N- l
1 j) |4 b( e7 h. U% n! U; \1 I# Z // Note we update the heatspace in two phases: first run6 ^+ J3 O7 V+ Y1 Z' r
// diffusion, then run "updateWorld" to actually enact the
* B! `, ?+ a3 H, G // changes the heatbugs have made. The ordering here is! c6 z1 ]" J9 Q# Q2 { H- N/ \
// significant!
( g6 i3 K! ~3 G$ x: I! Q* d- u
4 V" R0 l) J( \) y4 S8 w // Note also, that with the additional
' A- m+ ]) B' I/ ? // `randomizeHeatbugUpdateOrder' Boolean flag we can. a$ m( x0 u, z' R+ d. x2 Z; _
// randomize the order in which the bugs actually run9 x) Q6 @7 u6 n, l! R" n* Z2 [
// their step rule. This has the effect of removing any$ U; R' |; C) N+ u1 h! N! r
// systematic bias in the iteration throught the heatbug6 T7 l; G. O1 Z" O. r8 w
// list from timestep to timestep
' g1 G+ y/ C5 {- C) B
& l& ?9 E5 O7 @8 ]7 Q3 F7 w0 `' c // By default, all `createActionForEach' modelActions have( H4 ~& l9 [% a' \
// a default order of `Sequential', which means that the" S4 L" I' q4 A4 ?6 Y4 }# Q& r
// order of iteration through the `heatbugList' will be
" y! B g2 p: F; S% g' f/ t5 O // identical (assuming the list order is not changed: S: m/ o# h0 x* x" \" [
// indirectly by some other process).9 N5 i1 w5 t. @0 V4 N
( r5 p/ _ g6 y% j6 K* p$ G9 ? modelActions = new ActionGroupImpl (getZone ());
+ ~8 L' u- X5 [3 @- ? ]
( e# P: s7 [0 o; C" w5 k try {% V" Z( [* f7 Z6 C6 Z6 A* Y' j5 \. `
modelActions.createActionTo$message$ R L+ r6 B. J# J
(heat, new Selector (heat.getClass (), "stepRule", false));
9 q8 C$ [0 n7 H0 |4 |( U } catch (Exception e) {0 S: m& h' ?8 e6 S- u0 U$ {' j
System.err.println ("Exception stepRule: " + e.getMessage ());% H5 k4 z" e$ n
}. c1 ^% \5 ~, D% ~8 N, `* m. M1 D# D
; f% m* j/ T6 |4 m/ r
try {
/ H7 ?+ `' A; h Heatbug proto = (Heatbug) heatbugList.get (0);/ Q! P% k. v. I0 {
Selector sel = 1 q7 N7 I8 Z; a1 A7 V' x
new Selector (proto.getClass (), "heatbugStep", false);
4 A3 E8 F6 y5 Z" ^8 Q actionForEach =
" @, V7 M3 a8 }6 k modelActions.createFActionForEachHomogeneous$call- L* ^% D( P" d. H6 I5 @6 y! ?/ w7 e
(heatbugList,& G- y/ `* N) U! m
new FCallImpl (this, proto, sel,
$ W4 ]9 }- C5 k! h! `8 W new FArgumentsImpl (this, sel)));
$ H8 Y9 m+ V4 V6 Q4 M3 ~ } catch (Exception e) {9 \0 W: _; A1 G) D
e.printStackTrace (System.err);
% y, s* z+ o% g& s1 ~7 m3 z }: c/ r2 i: K0 L7 d! }
) M$ L3 m1 {0 x z s$ H4 r* s" r0 t syncUpdateOrder ();
/ F+ n$ h. ^6 j0 \
; p2 ]6 x. p+ L; p$ h2 \) e0 } try {
# @8 k+ X" ^* K0 T# n$ P% W modelActions.createActionTo$message . B& Z7 o7 H! o4 W
(heat, new Selector (heat.getClass (), "updateLattice", false));+ G8 r/ Z3 E6 `
} catch (Exception e) {' b/ m7 {7 [& V$ U( o7 Z/ A
System.err.println("Exception updateLattice: " + e.getMessage ());2 j+ l- ^! c6 T% |$ t1 a$ t& u, M* x
}, e, H6 u( L* }" h F; s! `
+ @" d0 h( {5 E4 j& U* v2 C // Then we create a schedule that executes the
+ x" h! X" B, [- a // modelActions. modelActions is an ActionGroup, by itself it
; s; K w2 t _$ F- E8 a2 F; I& _ // has no notion of time. In order to have it executed in
7 `- ]1 `3 p. Z0 u0 q* G$ M% K // time, we create a Schedule that says to use the
! E% f7 j0 d1 C# g" O! o( y // modelActions ActionGroup at particular times. This) D9 m- m3 G7 {7 }
// schedule has a repeat interval of 1, it will loop every
: b+ Z; {( N6 A5 w: j. y$ M) q // time step. The action is executed at time 0 relative to7 c; D$ t4 S' E% f& C; k3 O
// the beginning of the loop." s3 r$ b; T* Q4 P Y! p
$ K# n& t( S Q // This is a simple schedule, with only one action that is
) \: S3 h; ?: p9 q6 C# z% C1 s // just repeated every time. See jmousetrap for more
6 [! k' c$ @! @4 o- ?- l( g, { // complicated schedules.* {7 P' g) N# d: H- T
' D" ~6 D2 m7 }& G modelSchedule = new ScheduleImpl (getZone (), 1);- F+ ]. ^4 T; N4 l; M0 d
modelSchedule.at$createAction (0, modelActions);
$ I: A- D1 y; R& q' v6 e3 v+ e) l
5 f; V. B2 n2 y4 Q2 m4 v' ] return this;
" y. F( Q1 k1 ^% E; J' Q& z } |