HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 r# a2 n' [% p% F, ]6 c
$ d) B1 O1 S, i1 s; V' Q
public Object buildActions () { r2 U8 a* }$ S) d
super.buildActions();; j. s$ N) L; Z7 F' O7 H% N
6 V/ f( d8 ^/ f9 I. @, x; e5 r9 x // Create the list of simulation actions. We put these in
3 B" j9 b4 v7 |( i% n' |7 s // an action group, because we want these actions to be" q5 G s$ q, L! y* r8 ~
// executed in a specific order, but these steps should
[7 f: z' R; R, Y$ j9 A // take no (simulated) time. The M(foo) means "The message1 @0 K( T6 P9 b9 ^ `# ]
// called <foo>". You can send a message To a particular. X$ w6 L8 p5 Z/ d9 v8 Y5 ~
// object, or ForEach object in a collection.3 F$ |- k' P5 L0 U& ]7 Y2 P
3 t$ c! i z, L g3 _( S S ~
// Note we update the heatspace in two phases: first run2 S, h4 n+ p% y [! G) Y
// diffusion, then run "updateWorld" to actually enact the
5 h' s+ W- r5 }( m1 b // changes the heatbugs have made. The ordering here is! W( X3 a; s/ W. O7 l& ^- s
// significant!
" H. X" E4 r. g' r) }6 M# J
: V( L: `( e4 u$ s" h7 F // Note also, that with the additional
) }! i8 Z) W( ?3 v. p1 W* J% ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can
% p0 z6 X3 B* r) G# n0 C& q$ L // randomize the order in which the bugs actually run
\( E# l5 Z; ~! A7 u // their step rule. This has the effect of removing any
$ m \: U6 F% J+ J // systematic bias in the iteration throught the heatbug$ D9 p& Q7 c' z0 W
// list from timestep to timestep
a) L, T& A+ r$ j5 B
7 N) o: H3 z6 G0 Z, s0 c& k // By default, all `createActionForEach' modelActions have
) t9 G o* U; T* G+ T; M- Y // a default order of `Sequential', which means that the
9 y* G. @% |: X) U // order of iteration through the `heatbugList' will be5 x2 U2 h( I- d( U3 d& d
// identical (assuming the list order is not changed% b' j9 X+ j. [; R
// indirectly by some other process).
! w; k" {( v0 T+ T% m, ^
* \1 y; @; x& }+ n V modelActions = new ActionGroupImpl (getZone ());- m* v) \; o8 M3 g* Z7 |( x+ G
c5 c- z. K2 j) I1 t/ ?: X& n# d try {3 Y/ g/ i! g+ t1 |7 c
modelActions.createActionTo$message: @9 j$ B% H9 y* F( N- q% g' j
(heat, new Selector (heat.getClass (), "stepRule", false));
) F3 j, d1 j# X& r0 o } catch (Exception e) {
5 g2 F5 K/ }: q System.err.println ("Exception stepRule: " + e.getMessage ());6 n. i. f0 e# y
}1 K" f+ \8 x+ Q' y8 W
5 |% |" I' {5 n( r% C try {
; x7 C8 k7 Y/ c Heatbug proto = (Heatbug) heatbugList.get (0);
* z; A) z& X/ ^$ e0 \ Selector sel =
. t5 b/ m1 {1 [ new Selector (proto.getClass (), "heatbugStep", false);
* o8 X6 D; D& }8 |9 H" V actionForEach =$ P! P, _! D; U0 V% `4 c4 Y% a/ G
modelActions.createFActionForEachHomogeneous$call
$ K9 E. x" M3 j* {; p9 @: G (heatbugList,
$ h- J9 O* }8 d new FCallImpl (this, proto, sel,
6 L4 e0 D3 p2 I, i1 E8 b* R new FArgumentsImpl (this, sel)));
" t: q. t! r9 ? } catch (Exception e) {
$ e* h$ G- E {; `- o3 f- b e.printStackTrace (System.err);7 Z$ y. }- {5 Q2 ^; b
}
; U9 L% K" ?* j$ d/ q5 ^ V" G$ M* P4 S; }. A9 T0 ~
syncUpdateOrder ();
3 j& O6 V- ~8 M' N$ \( x) V) `4 U, z( b; ]& D0 s
try {
& n+ |2 k* q: x. Q modelActions.createActionTo$message
# U7 p$ F# l; Z" Y1 t (heat, new Selector (heat.getClass (), "updateLattice", false));5 `3 a) m! q/ ?3 r" }8 U
} catch (Exception e) {6 T4 c. D% N6 N9 Z
System.err.println("Exception updateLattice: " + e.getMessage ());
( o6 z2 n( X4 L3 {. } }; \4 T8 {& L* O% L
. ]5 g! s$ r5 c4 F // Then we create a schedule that executes the
" L. a' C! j! a. G // modelActions. modelActions is an ActionGroup, by itself it8 s6 h3 z6 f0 M) M3 i
// has no notion of time. In order to have it executed in+ _! l7 E4 s8 c) t
// time, we create a Schedule that says to use the; g1 [! w4 h3 _" Q: H! n
// modelActions ActionGroup at particular times. This. J) b" g& U( J ~ J3 o u- t# b9 o
// schedule has a repeat interval of 1, it will loop every* L# L. n7 f8 V) {0 E3 j* M
// time step. The action is executed at time 0 relative to( Y- `" j: {, k8 J
// the beginning of the loop.
# A: R% B) R" E8 H
/ b' W3 S# ~# k" V3 } // This is a simple schedule, with only one action that is
0 T$ P* e4 _ z# U( A+ c d& f // just repeated every time. See jmousetrap for more% z! E, E/ j" B4 q* F
// complicated schedules.
( Y, R t. g k+ t% q
/ o/ W% ], ~; F+ v3 t; l modelSchedule = new ScheduleImpl (getZone (), 1);9 J* f: s1 X# P( K% ?$ o; Q
modelSchedule.at$createAction (0, modelActions);
7 ~' a& _+ W) d6 A: m
5 G8 l5 F5 ]# h return this;! ~# ?& p6 U( y! ~: K; ?
} |