HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. g* u; {8 W! F1 w2 P
6 V. a/ a+ f) f5 Z public Object buildActions () {2 ]* i+ K+ M; j0 G( z
super.buildActions();
" J& P& h0 }# Z( ?# T
% E9 {! p) t8 N$ l; u6 { // Create the list of simulation actions. We put these in0 Q5 s' d7 Q" | i
// an action group, because we want these actions to be( w1 ~) u# l0 @ o7 C% [% N
// executed in a specific order, but these steps should7 H3 [* ]8 m; B4 t& q3 E
// take no (simulated) time. The M(foo) means "The message8 b+ v* p+ I- H2 J3 _& R* [
// called <foo>". You can send a message To a particular" A* p e$ j# ]4 ~6 o
// object, or ForEach object in a collection.
" ^ e' `' ?5 c" V1 g+ ~2 H6 p# O & S$ @- f% ]+ q# y4 _* Y
// Note we update the heatspace in two phases: first run5 E/ u" V8 l7 P; {$ c
// diffusion, then run "updateWorld" to actually enact the
) W$ T7 f; E v: m. K // changes the heatbugs have made. The ordering here is
. ?+ }. V; B8 u2 j- ~' j$ N# Z // significant!
# G, M. t6 x' |3 a# \* q
0 ^7 k% |# N7 G" H( p' b8 E // Note also, that with the additional! E% E0 [" P0 R3 V& f1 Y, m+ I
// `randomizeHeatbugUpdateOrder' Boolean flag we can; b" C* r4 V7 `
// randomize the order in which the bugs actually run
8 h" O# ~ `, k1 G. [8 C // their step rule. This has the effect of removing any
7 ~( c }8 c: [ // systematic bias in the iteration throught the heatbug& O( a2 F: p: b- B: F
// list from timestep to timestep) H ^4 R" D+ D. D6 z* D& h
1 G- \/ x5 W# F/ G, U/ R# } // By default, all `createActionForEach' modelActions have* n" n' C W3 D: v" ], @/ Q! }
// a default order of `Sequential', which means that the
: [$ n+ E$ B5 S% m* Y. V1 Z // order of iteration through the `heatbugList' will be" w% x, d% }! @; u
// identical (assuming the list order is not changed. ]: R3 ` W2 T b y
// indirectly by some other process).
: N4 q3 O1 B4 B8 x2 ?
' ~6 X/ S' |0 J5 J; ]7 L( c modelActions = new ActionGroupImpl (getZone ());/ a3 n) M% G/ s' X1 u; s$ R
; i' j! Y5 d7 P2 V3 i+ t3 K
try {
, s3 R/ a* q5 v1 u! R: u modelActions.createActionTo$message
6 T$ `' B, f S% d" m (heat, new Selector (heat.getClass (), "stepRule", false));
5 u8 j& ^ [+ X+ @" X9 b } catch (Exception e) {4 w( j* g; [. M5 j5 r4 r# Z# e! ~
System.err.println ("Exception stepRule: " + e.getMessage ());
9 C5 C, A& |* J# |2 c/ i4 U }+ M3 H$ y, T- O- Y H2 r1 C
9 u; _# y( F9 G- _; c9 ` try {
0 l% A# O5 _, b- A+ ~; | Heatbug proto = (Heatbug) heatbugList.get (0);
9 [) \) ?8 [2 z2 ^ Selector sel = 3 C g5 Y/ ^3 n& p! w! I
new Selector (proto.getClass (), "heatbugStep", false);* M' J1 k2 Q6 y9 A f8 f
actionForEach =- V6 L( x9 E/ K. y# A+ _
modelActions.createFActionForEachHomogeneous$call
- s: F* Z5 B- s( K) s (heatbugList,! o: ?+ u- h5 f+ F
new FCallImpl (this, proto, sel,0 h0 s2 D8 G0 H' w
new FArgumentsImpl (this, sel)));8 j: k. j, c+ z* Z2 Q D' x
} catch (Exception e) {( A8 n8 m# H4 e) [, P
e.printStackTrace (System.err);6 \' S9 w+ i3 G4 s) x
}. w0 H8 E+ e) A
6 \9 V1 ~9 x. |0 \- k( q, z/ R n
syncUpdateOrder ();$ W( q+ }3 p0 M9 x7 A% X4 ?
1 {, m* z5 L9 E0 K9 ?, u+ _
try {
) z; P" K8 h' ]9 V modelActions.createActionTo$message ( B% M$ Z5 Q0 U7 l Y' U
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 L0 |1 w6 T% \) \ } catch (Exception e) {
2 ]( H6 a. ~" q, m% r# Y! `" E System.err.println("Exception updateLattice: " + e.getMessage ());
' P& v7 S9 y! | }% b' S, m$ Y6 G5 N' X
( {$ Q3 o2 p) q3 t // Then we create a schedule that executes the9 K- I& e; w4 }
// modelActions. modelActions is an ActionGroup, by itself it% i2 D3 I$ ]. \+ Z! s5 s+ [
// has no notion of time. In order to have it executed in
* l' N% o d! I6 G // time, we create a Schedule that says to use the% ]/ ~. M: A! ?& ~
// modelActions ActionGroup at particular times. This
2 e% I q+ Q9 V: I t# F9 I3 Y // schedule has a repeat interval of 1, it will loop every
Y' q* Y" ]- s; P: m // time step. The action is executed at time 0 relative to
& ]6 p; o+ r$ b' m; R$ Q# d5 n // the beginning of the loop.7 P& u0 A) J. v1 C
+ o% ]0 e( v' o
// This is a simple schedule, with only one action that is
3 v6 K2 _* M: j) v4 t$ s- S% z // just repeated every time. See jmousetrap for more
: d1 x1 S7 [ X/ P; s: d // complicated schedules.6 ?" r4 _6 p3 a# L# Z1 M0 P* G$ k
* \# l- j% w% a( n! }3 e: ~: F
modelSchedule = new ScheduleImpl (getZone (), 1);
8 l# _" F2 ~6 `' K: c( N modelSchedule.at$createAction (0, modelActions);# ^3 H# Q5 ~* D* ~& q' q% @
! M9 v7 T* q. w" l$ V return this;+ ^3 T/ j* t" v6 ^
} |