HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( \1 M2 O; J. H" T5 |+ y
& c' Y) P8 e+ ^ g
public Object buildActions () {
' Z! p9 |$ |8 P& V) {; Z0 m& J super.buildActions();, |1 o6 H) `& D: B8 }5 Z/ b, D( Q
$ f# B# _1 R, z5 ~. T
// Create the list of simulation actions. We put these in# p6 |& T8 Q" U$ N: o
// an action group, because we want these actions to be
" C' \. q/ U$ s2 z) ?2 } // executed in a specific order, but these steps should" z) w6 e$ N1 D$ F& D6 f7 P, X
// take no (simulated) time. The M(foo) means "The message
! E. z9 x9 i7 Q6 S // called <foo>". You can send a message To a particular
% G" A4 J& k @& N1 W* F \ // object, or ForEach object in a collection.
4 J9 f8 C, |/ {3 z7 e/ P2 P 5 U: w/ K) B- y% Z( ^9 v
// Note we update the heatspace in two phases: first run7 D# u, _2 U4 X% D& @
// diffusion, then run "updateWorld" to actually enact the( U! C# t* Z3 M6 @. e
// changes the heatbugs have made. The ordering here is
& b9 Y/ L" O) F# C9 v // significant!
( u5 V0 u% L0 Y2 p! j* z
! |6 q3 d. H* B, h // Note also, that with the additional; P. v! m$ k+ K( r
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# E7 }1 W+ j* e# N5 x // randomize the order in which the bugs actually run
4 f4 M5 W$ t0 Y9 u+ r" {2 ~4 n // their step rule. This has the effect of removing any; c- `# T' n9 @) ?
// systematic bias in the iteration throught the heatbug% T5 Z0 c$ C8 `5 I* ]
// list from timestep to timestep$ M; i5 m7 [: {8 t5 o1 l8 S
+ p, h- I: c7 z! g; a4 {+ o // By default, all `createActionForEach' modelActions have; k# Q2 t$ | C% {/ D
// a default order of `Sequential', which means that the1 I! f- V" d8 E: q+ s$ }; q2 v0 M
// order of iteration through the `heatbugList' will be9 }$ }* L( Q3 q Y8 a
// identical (assuming the list order is not changed
. f }* `+ M5 ~ // indirectly by some other process).$ Z3 f- S8 K% p: E9 s
. p, e9 s L R& I& n8 f5 z
modelActions = new ActionGroupImpl (getZone ());
# o- {3 V# G# @: o- V
8 b! r" ~2 F) x8 q try {
: o4 Z6 Y1 q( ?% c7 G/ k% p- Z modelActions.createActionTo$message
" ?& N3 X9 s# l# l5 h' H (heat, new Selector (heat.getClass (), "stepRule", false));
8 Y5 W$ b1 {9 M$ g& e2 T3 e } catch (Exception e) {
& I7 B+ _! V7 d% j3 ?: i System.err.println ("Exception stepRule: " + e.getMessage ());; |, ?4 ?6 x7 ?
}, U3 v1 v7 s9 z+ y6 k
4 _. l' O: K. t a' h$ U
try {% Z# b' h) a0 o2 x
Heatbug proto = (Heatbug) heatbugList.get (0);
: ?* m8 u! s3 M* _4 t# v Selector sel = # M- Y3 ?8 y/ C9 q
new Selector (proto.getClass (), "heatbugStep", false);
* f* B5 y: Q, g7 R actionForEach =
( k1 h# [8 `( A, w8 u6 y. F modelActions.createFActionForEachHomogeneous$call% c' b- O4 o3 M3 H) i+ N+ V
(heatbugList," u6 p" f3 E! o0 x
new FCallImpl (this, proto, sel,$ D) r9 a# O/ f- M* S- m; _' w/ s" w
new FArgumentsImpl (this, sel)));
0 K- A" @+ Z! |; V# J; { } catch (Exception e) {: b, k+ Q) V. O8 c& j L
e.printStackTrace (System.err);8 O0 y* v8 C5 ]# ^
}& `4 n5 M2 L' L+ ^2 ^
7 L4 u2 k; k* n2 p syncUpdateOrder ();, q+ }% p2 _3 Z4 W( _7 G* T7 u! w F
) l+ Y& I+ O/ ]8 o' q. O
try {
) [4 e% V9 r' H modelActions.createActionTo$message ) ^( k. J; M1 ?5 o! n
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 X+ N) g) Q: n* ]- H } catch (Exception e) {
: I& _% I+ k1 V0 z4 K2 k# m. @: `& \" h System.err.println("Exception updateLattice: " + e.getMessage ());
0 n! i Y; P& |7 v% ~/ [8 g0 o }6 X K7 D8 i3 A+ X6 l1 h* {/ s
3 ]& r0 B, \$ z+ K Y. Y3 |' P1 W2 q
// Then we create a schedule that executes the
8 L i0 j/ \$ _8 j( G // modelActions. modelActions is an ActionGroup, by itself it) Y- L5 s, b& B8 p9 w4 Z+ W9 j
// has no notion of time. In order to have it executed in* g- s- `, h0 B
// time, we create a Schedule that says to use the3 v6 r& O1 {! D7 |/ K9 u2 z
// modelActions ActionGroup at particular times. This4 ?' `& e& B6 H) W q3 B
// schedule has a repeat interval of 1, it will loop every$ G8 E6 ~0 J& R6 e& K
// time step. The action is executed at time 0 relative to. s' q4 O9 @) N4 V
// the beginning of the loop. i8 Z# C0 M: R$ h4 W
, U% a! _2 R5 J$ h2 r% n1 x
// This is a simple schedule, with only one action that is& A, G1 A7 L! x7 J& N
// just repeated every time. See jmousetrap for more1 w7 w# e, G. T$ G! T x, Z$ D8 X, u
// complicated schedules.
0 B) g4 p! U: Y
. y% Q: K; I7 Z; T modelSchedule = new ScheduleImpl (getZone (), 1);
) j5 E2 U$ C; l+ i+ j5 | modelSchedule.at$createAction (0, modelActions);1 b& m6 p9 ] B+ r0 |7 ] w
1 K7 ?) K; M( p8 J2 m return this;
$ D h7 t E6 P) q } |