HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 c* N9 r' D4 ?% I+ O6 ]- q
6 m% A A4 F, {* }/ E# H3 w public Object buildActions () {" V& e3 ], u* q5 |& L" ~0 U2 t
super.buildActions();" C3 }2 J ^1 R+ b
$ h9 ?- L* |( |" I3 @2 L
// Create the list of simulation actions. We put these in
# v9 @7 T) |9 _# M8 T0 [ // an action group, because we want these actions to be
+ w8 y' r5 K- A7 }' y7 j! G // executed in a specific order, but these steps should
) O0 G& B+ A8 v" D W // take no (simulated) time. The M(foo) means "The message! k) V# u; m6 A1 @
// called <foo>". You can send a message To a particular$ C9 ^) O0 a4 G8 Z
// object, or ForEach object in a collection.
8 M7 u; _1 W1 g3 w ) h1 V. B8 T! A& o, K/ k
// Note we update the heatspace in two phases: first run
1 W5 W9 e( E2 w5 s1 x2 ]; P // diffusion, then run "updateWorld" to actually enact the
; T& b) g9 k% i' r1 g // changes the heatbugs have made. The ordering here is- d# A4 B1 J/ V( X& K6 g2 O
// significant!
" ^& T4 c" y: X' y ; C' ^- e: s- H7 b# _* ?5 l" n
// Note also, that with the additional
/ o+ j/ \4 a( `" d // `randomizeHeatbugUpdateOrder' Boolean flag we can
; V% ~& p0 C2 q // randomize the order in which the bugs actually run0 U2 y& k2 q0 K8 S h9 [1 V N
// their step rule. This has the effect of removing any5 e* Q k4 C- X! u( g- H
// systematic bias in the iteration throught the heatbug
# }# t! g9 T$ |$ r3 P% ?* L // list from timestep to timestep
0 a& a9 S6 `+ A: l( u2 k & m0 ?+ @ G! j9 H7 {2 w8 I
// By default, all `createActionForEach' modelActions have
" w$ x4 m/ r w( a7 l // a default order of `Sequential', which means that the7 Z# g% _" F1 A5 T# T
// order of iteration through the `heatbugList' will be, t; s% d7 Y1 J. }9 @. Y7 c- U. R
// identical (assuming the list order is not changed
u& \& k; \5 j* C* J, V // indirectly by some other process).
: t( M" z- n( p; x; G " @* q( f: r; d1 I% K- b4 E
modelActions = new ActionGroupImpl (getZone ());( z. i' q$ ^" }% z+ C
9 L- C& i1 g# w( h' H5 f9 Z try {4 Z) S: Q$ `2 x
modelActions.createActionTo$message9 v1 q8 J9 d! M8 \- D9 F" G# o
(heat, new Selector (heat.getClass (), "stepRule", false));: ^! G7 M: I) p- R3 a
} catch (Exception e) {8 c* ^( Q, d* X- `4 ~8 O
System.err.println ("Exception stepRule: " + e.getMessage ());1 v5 `% V& |+ F g! ^) j
}) q0 o# \ G' A! R+ D5 ]- n
. [3 s. f0 N4 M& E
try {
4 ?% _3 b. o# t2 r0 u: k. ~ Heatbug proto = (Heatbug) heatbugList.get (0);
) S* J9 l4 O$ f8 s Selector sel =
* |- W5 R9 e& x0 J0 ~ new Selector (proto.getClass (), "heatbugStep", false); g6 Z* ~" U; Y: M8 A, \
actionForEach =5 g5 ] y: g5 g$ s0 K8 X0 D( o
modelActions.createFActionForEachHomogeneous$call% u: V! G7 _8 n; U' n# {; t, V
(heatbugList,1 M9 F. k6 M) C, k; C# q
new FCallImpl (this, proto, sel,7 w1 l# I6 J$ `1 W) O$ a
new FArgumentsImpl (this, sel)));
7 W. |4 L/ ^/ R, f$ i4 n% v: R3 r* i } catch (Exception e) {
* N0 H" k' d- Y6 V1 [# s/ p- C e.printStackTrace (System.err);
5 e, w) r" \6 a }) ^4 n/ s d! q' T2 {
2 k2 H; x' m: k6 } syncUpdateOrder ();# @$ d& m( e% [8 J5 k- M7 u
. E7 l' S% k7 X0 n try {: \0 c4 y4 R# E" p& y. o
modelActions.createActionTo$message ( S+ {/ B0 }- U% e- q" v) k. m! M
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 E2 }6 K( D, R } catch (Exception e) {
7 |9 l q0 E& A$ C System.err.println("Exception updateLattice: " + e.getMessage ());
2 Y# r( F& q7 l5 |/ A0 f# K }& j1 u* O W* ~1 ?+ q; w
+ D1 O# N7 _8 t4 j2 s // Then we create a schedule that executes the
4 ]9 A- [1 T! Y* G* ]0 E6 u // modelActions. modelActions is an ActionGroup, by itself it
' u3 o: l2 t3 T3 f; L // has no notion of time. In order to have it executed in
X0 ^/ p% M$ y! o: x9 T! x9 p3 r // time, we create a Schedule that says to use the2 o7 Z+ x' {' H3 g3 S( _
// modelActions ActionGroup at particular times. This e- h4 Z( e8 ~# c3 n* w
// schedule has a repeat interval of 1, it will loop every; X7 d7 Y, s3 S! K/ X6 S
// time step. The action is executed at time 0 relative to
. u6 E3 B9 z! Z. x // the beginning of the loop.) I) G' g! b/ E0 U5 i. L |6 Y9 @
/ [* s% Q% P W$ p: j4 A/ L z
// This is a simple schedule, with only one action that is% R* w! c# s% _# J; q% H5 _6 d4 o9 _% ~
// just repeated every time. See jmousetrap for more
& B4 d# `, s, \5 h. I+ |6 f // complicated schedules.1 p, k2 l7 ]& s2 H6 K0 T2 a
$ {5 L+ x$ n9 I) m8 X o" U/ C modelSchedule = new ScheduleImpl (getZone (), 1);
- c* D* q6 b* g5 t" b5 ` modelSchedule.at$createAction (0, modelActions);: d) i0 i& ~9 l3 T
3 x3 w: B% a9 ?
return this;
' B; \5 y& o2 H' { } |