HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 D4 o6 b4 ~" e. J3 n) @( M6 M
/ J! y* s/ w- c( }' r# w- _
public Object buildActions () {
6 S! f- e; w3 t super.buildActions();8 ~* ^ |# K5 s0 m0 e4 Q
8 c N) e7 D0 C1 G! a& T- d( H // Create the list of simulation actions. We put these in5 ?4 h6 g! d. S8 ^+ d- P
// an action group, because we want these actions to be
& Y; I: E) T9 `, M4 q7 [ // executed in a specific order, but these steps should- H4 b8 x& ?! C/ I
// take no (simulated) time. The M(foo) means "The message
. _& ~% l& d- p' L9 U7 h // called <foo>". You can send a message To a particular; o4 t( C) s" X! _1 M, p. ?3 h
// object, or ForEach object in a collection.
/ }2 h, i3 A! p9 q+ X4 M & [& O7 p$ ` p+ d
// Note we update the heatspace in two phases: first run6 i/ h0 q- i6 f- \5 Z
// diffusion, then run "updateWorld" to actually enact the8 F: y% b2 r0 t) ?, H. O1 |
// changes the heatbugs have made. The ordering here is k1 O5 K7 {1 z' T+ v: \
// significant!/ {2 |+ r/ G, @6 E$ h
. B. z( Q2 l6 K, a- i
// Note also, that with the additional' A* V2 o/ U+ c* `
// `randomizeHeatbugUpdateOrder' Boolean flag we can1 ]2 v6 b2 b' D# H. ]1 j3 W6 d' M; K
// randomize the order in which the bugs actually run
) I% \) ~4 V( a: X5 l // their step rule. This has the effect of removing any
! ?: u# k( G2 I! Y) I2 @5 u // systematic bias in the iteration throught the heatbug
l: E8 }* ^9 N" I2 c/ ~% g // list from timestep to timestep
* S @, O# m6 [: W3 j, n7 F
2 |! |, x$ E( i: n // By default, all `createActionForEach' modelActions have
7 u1 z( p" z+ N, o$ s3 U // a default order of `Sequential', which means that the
4 O" R ~5 |. i4 ]0 ~: e // order of iteration through the `heatbugList' will be
: ~: G* ]# s: h( X& ` // identical (assuming the list order is not changed9 j, ~& @; @/ e! ]8 ^7 n% a
// indirectly by some other process).
& T) G$ g# R" }0 i: t7 b
5 j. B* K' f3 m! v+ d, m modelActions = new ActionGroupImpl (getZone ());
) a A- Y- K: p8 a# O3 g6 Q9 W7 E! N, z
try {
* d# i# ^. \7 x, B; I c modelActions.createActionTo$message
" l% t9 D( n. b- b% G8 u (heat, new Selector (heat.getClass (), "stepRule", false));
2 e) l7 I0 b" X0 U$ n2 Q3 P# I% Y } catch (Exception e) {
- { c5 E* n- ~) p" U+ w9 w System.err.println ("Exception stepRule: " + e.getMessage ());% x8 I1 j( [, M1 @4 N' I
}) S' I, V" ]* B' G7 p, k
" W& A, x3 o/ W; I try {. C6 {. q' ]0 a- E+ k" N& S
Heatbug proto = (Heatbug) heatbugList.get (0);
5 a2 b9 u1 y+ L; I/ x' | Selector sel = # b( h2 J7 S. |# H# a% E6 W
new Selector (proto.getClass (), "heatbugStep", false);4 y# n2 s' x3 ?- M
actionForEach =
0 L' v" q1 O( u6 f" o& L2 g1 t modelActions.createFActionForEachHomogeneous$call
- f. p9 f+ S) l3 [+ W$ F/ U8 o (heatbugList,0 ~0 Y4 y9 `1 \/ x& h+ `+ c
new FCallImpl (this, proto, sel,
- l8 K1 h+ T+ I/ Q8 ^/ [/ V new FArgumentsImpl (this, sel)));
- H1 B& f$ E& v: ]' i } catch (Exception e) {
" N% F! A0 |' Q4 Z) J e.printStackTrace (System.err);+ n: }+ x6 O2 K' [
}
) ^% x* c- L( [7 J5 G) |- `' S( d # f( L$ b' l. H0 R
syncUpdateOrder ();1 E0 f# Z6 N( T- k( P; ?
* D! A5 E6 g' S try {
* ^, P' J1 y; V) ]7 N0 ~ modelActions.createActionTo$message + d K& N1 e2 R* i# Z+ M
(heat, new Selector (heat.getClass (), "updateLattice", false));9 n" A9 ^* }8 i
} catch (Exception e) {
5 A' o6 C9 y8 r# n2 J) _ System.err.println("Exception updateLattice: " + e.getMessage ());
5 l( f0 ?, d9 g" j }# A0 `7 V4 k. U
# Z$ `( C& x1 S9 P // Then we create a schedule that executes the2 g$ _4 J, c. _
// modelActions. modelActions is an ActionGroup, by itself it. B+ d0 {4 K5 t2 X( v
// has no notion of time. In order to have it executed in3 T1 C! W! E6 Y& {8 a
// time, we create a Schedule that says to use the* |& n8 M. G \8 B0 i& l; S
// modelActions ActionGroup at particular times. This
3 A% E# p* U+ M6 E6 P // schedule has a repeat interval of 1, it will loop every
8 \: U" T' P1 r) a1 P // time step. The action is executed at time 0 relative to
+ H3 v2 F0 {; ~- B) W // the beginning of the loop.
8 ~& S8 [6 x+ Y# {
8 F. P* i" u; R! n6 l7 B // This is a simple schedule, with only one action that is* J+ l( T) |* @$ K* c* |+ r8 e
// just repeated every time. See jmousetrap for more
3 M [* i( y5 s8 e0 c // complicated schedules. k- [/ g* m- I+ V
( J( } b% M! s5 Z `: C( ?' F modelSchedule = new ScheduleImpl (getZone (), 1);
, @" @+ o x+ x+ J. V( }" G4 d modelSchedule.at$createAction (0, modelActions);+ U. T6 N1 R3 w% J9 y" z
3 n0 e6 Y7 D& w7 L3 M return this;/ I3 Q3 ^- F) k1 {
} |