HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: O% ?0 W) A4 f- `# L
. E/ ?/ W3 p* T) L2 w* W
public Object buildActions () {6 w! P: K0 X" k
super.buildActions();$ R. H3 h* w' y! ^4 |9 w6 ?
2 I( D3 g5 p9 r // Create the list of simulation actions. We put these in* N' I) K% A8 M& G2 c
// an action group, because we want these actions to be7 _" o, D+ \3 Z0 b+ \& m r% x
// executed in a specific order, but these steps should
9 `3 U5 A7 n- C, g/ R5 Y, {1 g // take no (simulated) time. The M(foo) means "The message
; z3 X/ U+ O' R7 B // called <foo>". You can send a message To a particular% D5 l, y. Q/ ?: T, h; m t
// object, or ForEach object in a collection.
* X( L: M1 y1 k3 R+ M5 Q 8 ~ }/ |+ r3 w+ f8 @' p
// Note we update the heatspace in two phases: first run
( p3 S2 `) b3 N6 e6 L# U) B2 q // diffusion, then run "updateWorld" to actually enact the
2 t6 w; ^2 {5 I // changes the heatbugs have made. The ordering here is6 `+ \6 R+ v: u+ n3 K8 U
// significant!/ F, Q* o$ y0 K' s' x" w
& ]! l3 ~; S$ u // Note also, that with the additional+ h9 s Y: P/ Z7 b
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 a D/ ^# x) e) Z // randomize the order in which the bugs actually run
( }2 p! U" Y K) v1 C0 y4 k // their step rule. This has the effect of removing any2 ^/ H* v) L/ e: N+ M2 b
// systematic bias in the iteration throught the heatbug& k! e; p* B. J# i* c2 G
// list from timestep to timestep
M& p* P+ p( Y- I- J% O % y# V) Q( Y9 _; x- H
// By default, all `createActionForEach' modelActions have2 k; w6 i' w; s' y# F
// a default order of `Sequential', which means that the
- U: w- O. @# J3 k% v // order of iteration through the `heatbugList' will be
- x+ S& l, u6 L. l# X- W+ a/ h f& G // identical (assuming the list order is not changed
" b' a8 G, R) A( G1 B i // indirectly by some other process).
5 Y3 U" F* T+ [$ x 4 e; o* S; R% w$ `- }# K
modelActions = new ActionGroupImpl (getZone ());
. ]% U/ X1 i/ Q
4 W4 d$ q. N% [( d try {
6 ^7 p6 P5 n7 G8 S/ S0 z9 d' }0 u modelActions.createActionTo$message% D& W J* q" u, G% R9 b
(heat, new Selector (heat.getClass (), "stepRule", false));$ G* g+ k; R6 H5 M
} catch (Exception e) {( x$ Q# i+ Q. T& n! _0 s* A" v
System.err.println ("Exception stepRule: " + e.getMessage ());2 x; @8 ?" r% x0 h* }. C# ~- l
}
& E+ k9 U4 F- i; c- {* S5 B0 _* r: m% E
l% a- v; O N% U6 S1 ?2 K try {
?% y- Q! z% ]. W! r Heatbug proto = (Heatbug) heatbugList.get (0);7 H7 j6 C' u8 `. q4 b
Selector sel =
3 I. _ j$ E+ K new Selector (proto.getClass (), "heatbugStep", false);
) X* d* I# U2 b8 [$ j actionForEach =' m1 g, m! w! _* C8 x% S4 m
modelActions.createFActionForEachHomogeneous$call: ~! q q! P+ Z
(heatbugList,
2 Q& h( U( P4 ^$ ^8 D new FCallImpl (this, proto, sel,- z6 Z1 k: T2 J+ ]
new FArgumentsImpl (this, sel)));
) U# u2 F( ^" [. u6 y } catch (Exception e) {
( [8 M2 O$ ?" ]$ h+ P+ y m e.printStackTrace (System.err);: Q) |9 i+ A9 T2 U g8 ?
}
$ M5 o7 _# G( P $ X4 f( [: r! |# K* \7 {8 Z
syncUpdateOrder ();' i( z( w U3 Z( r: w8 V+ b- v
9 B( T( y q7 L& Q' ^ R- ]
try { k* k7 \0 W5 N3 ^6 |4 m1 {3 _
modelActions.createActionTo$message
3 }; R* w. x. R( O1 {/ d: k# N (heat, new Selector (heat.getClass (), "updateLattice", false));& z$ [8 K7 _6 A& i+ P6 k; R5 W
} catch (Exception e) {
3 x( D9 q+ N( l+ t& K System.err.println("Exception updateLattice: " + e.getMessage ());
+ B" k& T' z9 A2 B/ {4 y }$ P0 P1 |: C+ Y/ x/ U( J
& f# R; U* C$ W4 I: g& E. H
// Then we create a schedule that executes the
9 J9 u8 F# x- s# k2 W& {3 { // modelActions. modelActions is an ActionGroup, by itself it$ g U6 n2 V" n! D. H/ @2 q: g: |
// has no notion of time. In order to have it executed in
3 T( z+ I' L1 G l3 d! x+ \0 w // time, we create a Schedule that says to use the4 ^ [9 B" \6 i1 x7 b4 a
// modelActions ActionGroup at particular times. This
0 t" N5 i: w3 ~9 @# E // schedule has a repeat interval of 1, it will loop every
/ b' N' G+ q4 \. g! | // time step. The action is executed at time 0 relative to+ p6 X/ P+ p4 ] H5 A
// the beginning of the loop. ]; U( P! C* m b# N4 q5 G
' o# |1 B4 n8 Q- U* I# F, D- S4 h; E // This is a simple schedule, with only one action that is
& k* C7 z" N8 G // just repeated every time. See jmousetrap for more
- l3 M2 ^, I7 e* o9 o: h6 w // complicated schedules.
7 {6 m3 w/ p- ^* ^: r, N4 A
: R6 z' `: v5 N$ J- S \0 ~ modelSchedule = new ScheduleImpl (getZone (), 1);' h+ a& V/ g) r* e/ j
modelSchedule.at$createAction (0, modelActions);
: e8 e6 p9 J7 t5 O$ C
8 F- [* `) B3 J+ K1 ]& d return this;' d2 p/ x4 @/ n$ {' s7 h W7 X
} |