HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 h1 U( L" B- e; O8 s, ?. S' |* e8 I5 O$ E( [4 X
public Object buildActions () {
* J# ?. ^( N* q, s1 U' E! u9 E super.buildActions();
9 {8 B r* k; a. y3 O$ n7 U( y
v7 \' w/ m" a* `" z; h; c // Create the list of simulation actions. We put these in
' D$ L" ~$ U/ y/ ^1 E // an action group, because we want these actions to be o' O: a Y9 l' q& S% `6 B) a- q
// executed in a specific order, but these steps should9 h; \! T* j" M9 F) @
// take no (simulated) time. The M(foo) means "The message9 r0 f! U. ]! j) q3 G" u
// called <foo>". You can send a message To a particular
( O; ~$ p% T7 f1 C7 u9 b9 o+ Y // object, or ForEach object in a collection.
! J' n! b$ q ? & k" e, c* m6 X$ b9 O4 A
// Note we update the heatspace in two phases: first run
2 s7 w( d9 L4 T3 m/ w2 g // diffusion, then run "updateWorld" to actually enact the
: [7 V$ c3 G& T; E C1 ?' \3 V // changes the heatbugs have made. The ordering here is' G n9 N( s& @" B- U x- N( v
// significant!
. z: |7 k; o: U8 b
0 R! V9 ~9 C V, A- @$ W- X // Note also, that with the additional
4 C, B4 c" A2 ]! }: a5 N: g/ G // `randomizeHeatbugUpdateOrder' Boolean flag we can
4 }: ]1 z1 M P7 T0 A // randomize the order in which the bugs actually run; n8 U( @; B* t! \- J
// their step rule. This has the effect of removing any
# q( A. G) \* f5 Z8 Z+ G // systematic bias in the iteration throught the heatbug1 N3 j# z, ?7 ~: J# G, |% c3 Z8 O
// list from timestep to timestep
- M0 t7 `8 L; p5 u' { 3 }! S) M( K# I( f7 d5 x
// By default, all `createActionForEach' modelActions have
: R+ Y7 V0 p" z8 D$ L% I1 I7 A // a default order of `Sequential', which means that the/ i1 N. A, D( X9 D
// order of iteration through the `heatbugList' will be: w# I0 Z7 l9 c0 z d& J5 N
// identical (assuming the list order is not changed2 a* [! k2 O: u
// indirectly by some other process).
: c9 H! O+ |7 P! p, o % }4 J5 W* @8 K7 y4 t4 m+ @! o
modelActions = new ActionGroupImpl (getZone ());8 y% D9 V& P( i/ c+ \) t
: m. } \5 T" _: \8 g$ g3 v
try {- Y. d8 H- { c. Z$ t
modelActions.createActionTo$message
) W" P5 U7 \9 E v" t0 |; [ (heat, new Selector (heat.getClass (), "stepRule", false));' C$ k* X/ }; v1 x7 Z/ }
} catch (Exception e) {3 W6 E2 o3 G, x+ z
System.err.println ("Exception stepRule: " + e.getMessage ());! b# n" ^- \! V! ?* t' V7 m- y- g
}- z! `8 u! K1 Y! s( y
: B" ]( r9 y- E$ A
try {
$ Z t9 l4 b; G b, u Heatbug proto = (Heatbug) heatbugList.get (0);4 ?0 R5 B, ~4 v; s4 Y% b0 a# |
Selector sel = 0 j5 g$ L u( [
new Selector (proto.getClass (), "heatbugStep", false);! b0 y( ~! G0 m& h' B! s
actionForEach =' f5 U+ }/ m8 I+ ^7 g+ C
modelActions.createFActionForEachHomogeneous$call+ _0 A1 J) v7 V' C3 o! K
(heatbugList,; x. y0 Y0 x5 U
new FCallImpl (this, proto, sel,
9 W4 V- z: H5 q. l/ t new FArgumentsImpl (this, sel)));
/ y" ^4 t& K7 B& Q9 e } catch (Exception e) {7 u" U6 L$ |- j ~
e.printStackTrace (System.err);
3 E/ e9 m. ]' x w3 { }8 w/ _: u" |% Z M! O/ ^; ]
/ S0 o" C/ v: V, ?: _ syncUpdateOrder ();! `0 x" V, g3 Y1 H( ~2 Y
1 h3 |, K9 Z+ o: O$ Z6 c3 v: w! a, e; p try {
' M. ?1 w! y* D0 j' G/ M D: Q z modelActions.createActionTo$message
* h; L% N) w+ q9 v (heat, new Selector (heat.getClass (), "updateLattice", false));
* k X6 P+ k4 u } catch (Exception e) {
8 J2 i7 r) h# ^! _& [ System.err.println("Exception updateLattice: " + e.getMessage ());5 ?7 T% A" E* P# J; _2 a' Y: d
}
9 U i0 I- B+ [6 j" `/ T) v! a4 Y
5 y# H5 ^( K# `% q8 R( @/ ^5 L% W# c3 ?# t // Then we create a schedule that executes the0 Y" A4 O% r7 p t& R
// modelActions. modelActions is an ActionGroup, by itself it
, G6 v x- g2 K2 z+ s' I( a // has no notion of time. In order to have it executed in9 ?; J7 P L+ z+ V9 G
// time, we create a Schedule that says to use the
' K6 ~* I9 `# t3 X9 @* Z9 b // modelActions ActionGroup at particular times. This
2 ~' X2 ~7 b8 W+ v+ s9 O // schedule has a repeat interval of 1, it will loop every8 }/ F* J" ?" s8 A% j$ b
// time step. The action is executed at time 0 relative to! C% v. p3 [- s- ?8 x2 T! B
// the beginning of the loop.& v+ M/ E& j& x% Q5 q O! c$ c
( }1 W$ {: h I. H6 h3 v // This is a simple schedule, with only one action that is
: B" j6 |/ ? z // just repeated every time. See jmousetrap for more
. A, p0 v0 {6 C; c' X& F' H // complicated schedules.: |6 A$ ]3 k$ G Z' G& {
4 X s$ J8 u& e% f8 N$ `6 ~ modelSchedule = new ScheduleImpl (getZone (), 1);# B" y8 Z! v$ D( _
modelSchedule.at$createAction (0, modelActions);$ O0 F" z+ i( c! t
/ a W4 D8 s2 K( }9 N+ }1 i
return this;
: w* ?. b% e, j/ ~9 ]0 [1 e } |