HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( v! n( ^7 g$ R# n+ ^" e) ]/ U
0 u7 ~1 s2 V8 y
public Object buildActions () {
$ n8 [3 C: {. W* Z& `9 F5 @ super.buildActions();
- y* L1 n# q5 E* _* a- I
[: b2 h4 R$ |: m- C4 u // Create the list of simulation actions. We put these in
/ L( D' o/ T; v9 | // an action group, because we want these actions to be
0 B& v; v; \. p. D: V // executed in a specific order, but these steps should1 U$ c$ @- ?6 @3 B5 E$ f
// take no (simulated) time. The M(foo) means "The message! ~; }. _! T [+ }6 _0 F' i+ Q
// called <foo>". You can send a message To a particular
/ ^; l* ?6 D/ l" D // object, or ForEach object in a collection. d$ M! N6 \3 ~3 d& N) R
8 @: j, m9 I" e( P0 z5 l& x" V // Note we update the heatspace in two phases: first run
. p9 t C& c8 V% A i' h7 X // diffusion, then run "updateWorld" to actually enact the" L3 G" [( U1 \! e) Y( D
// changes the heatbugs have made. The ordering here is8 G4 p* b7 @# v4 R ]+ y
// significant!3 W$ i! a8 x; q
" b( H% H! F. t4 t
// Note also, that with the additional
9 G2 m% o4 p2 ~4 \) g# Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
: [2 F" ^9 u/ Q- O // randomize the order in which the bugs actually run" j! s- `7 J8 e; [
// their step rule. This has the effect of removing any
$ h' K3 K9 [3 C$ v // systematic bias in the iteration throught the heatbug* ]: T: [2 v8 H0 ?+ }2 ]
// list from timestep to timestep
. K' `) Z+ o( s: Z) C: O 8 B. V6 G9 {, y0 P: [4 _
// By default, all `createActionForEach' modelActions have
0 g1 b! z# C# c' ]6 c // a default order of `Sequential', which means that the
1 z/ N, ?$ {& K3 a; a" \% I" K // order of iteration through the `heatbugList' will be5 d8 n* Y& s/ r1 i9 g3 C' b
// identical (assuming the list order is not changed% G/ y1 X" p1 X' \# T+ ]2 @5 v$ ~
// indirectly by some other process).
8 V$ P& f8 V1 s8 z! X: q! } # T5 X, C, u5 j( D- l
modelActions = new ActionGroupImpl (getZone ());
6 F: o W% b U) L4 G4 | N4 O$ T. R2 @
try {
$ c! [7 T# H6 g% ~4 _2 m modelActions.createActionTo$message
. V3 t) x+ g( L (heat, new Selector (heat.getClass (), "stepRule", false));
- N, ^2 _. {4 T) i. ]9 r4 t" d( E } catch (Exception e) {& R! `# S1 ~. V" t
System.err.println ("Exception stepRule: " + e.getMessage ());; g$ y& }4 O' k% [) V2 M. z- U R) U/ m
}, m% |/ x$ w1 G
" c8 k8 [- D* g5 o try {' f W6 C+ D* Q: N8 H% G( H
Heatbug proto = (Heatbug) heatbugList.get (0);3 @$ Q4 c6 s% I+ R+ X
Selector sel =
: a& d" f, O3 y7 e1 U8 _ R! A new Selector (proto.getClass (), "heatbugStep", false);
3 H# T+ f/ J/ m7 @8 @ actionForEach =
4 o1 U. ]% z6 e T6 y3 a modelActions.createFActionForEachHomogeneous$call
" L5 U5 `! \" H2 K9 I (heatbugList,0 ^5 b9 ?( E. j8 a
new FCallImpl (this, proto, sel,- U' | m( G' g# Y, P
new FArgumentsImpl (this, sel)));
7 G) x7 N8 _: a* t9 e% P) o- ? } catch (Exception e) {6 z# R, q2 [6 N; g
e.printStackTrace (System.err);- \0 l0 I8 e9 t% J) Z1 I
}( i* I0 d5 Q+ @$ e
, \) Q5 o6 {4 ~" n U
syncUpdateOrder ();; L! J! \% p. L0 W
8 g! o; D+ X9 C" ]9 ~ v/ L( W* t try {
) d/ l8 S" \5 K2 _ modelActions.createActionTo$message
2 E* Y# t7 U+ |& L$ M! b5 Q (heat, new Selector (heat.getClass (), "updateLattice", false));% n# w" j1 i+ Q3 u, L4 ~7 L: a# i
} catch (Exception e) {: H% s, [) @) S" v
System.err.println("Exception updateLattice: " + e.getMessage ());
1 b5 V+ L# A' q; N! ` }0 q+ i- S+ N3 R8 [! }/ v2 Z+ V
1 W: g! Y( P, i; g s // Then we create a schedule that executes the
( e" d( w, P1 L% H6 f; V // modelActions. modelActions is an ActionGroup, by itself it* l0 k. m6 q: f$ I# u
// has no notion of time. In order to have it executed in
5 _2 c$ U# c2 _: E4 g // time, we create a Schedule that says to use the1 R8 x. M9 ~5 U- _3 ~) |. L
// modelActions ActionGroup at particular times. This& k) \% x. e+ k" N& I# Y4 Q! e
// schedule has a repeat interval of 1, it will loop every+ ~# |: T- V( c5 [7 ] A5 l0 x
// time step. The action is executed at time 0 relative to4 i- o* o+ u( i' j
// the beginning of the loop.8 T, k$ F/ e8 z
, z5 Y+ i3 p- F // This is a simple schedule, with only one action that is5 m/ y t; M- ^+ ?
// just repeated every time. See jmousetrap for more B0 h6 r* G& j
// complicated schedules.
/ H; i& v9 h) z. q" @. ~
& [( {0 B/ N+ R7 b9 n modelSchedule = new ScheduleImpl (getZone (), 1);
9 q( z) z+ t. r% N# Z modelSchedule.at$createAction (0, modelActions);! y9 H0 ^% s% _/ v$ |
) _/ E2 l- R7 H$ d# P1 U; ]
return this;
0 V5 \4 }+ F$ N$ s# G" S; v! }3 o! w } |