HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, |6 v% E: b1 y D
2 M% I1 N* }6 t% o% h( q public Object buildActions () {
: {& ]/ Z: t/ Q: f0 z- W super.buildActions();
8 ~4 L) \) ?0 f2 ^+ F) D
. x# s: d( z+ K" l/ i0 C, ]4 F" m* ~ // Create the list of simulation actions. We put these in% u4 j/ G; m0 r
// an action group, because we want these actions to be
& ~5 I6 `' h" K y3 `7 ~ // executed in a specific order, but these steps should
* T, H6 `+ t2 B. a4 X" a5 X7 v; C // take no (simulated) time. The M(foo) means "The message3 c# S6 ~$ l) R: s) M5 R) H/ Q
// called <foo>". You can send a message To a particular1 ]* I9 o, F, p0 ~' \5 z5 u* u+ ^
// object, or ForEach object in a collection. m2 X$ Y" k$ B& [
9 K7 F+ S! G% O0 a1 Y# a: ? // Note we update the heatspace in two phases: first run
$ {3 k( {8 m5 a0 ~. U" Q! Y! F // diffusion, then run "updateWorld" to actually enact the9 G' g% z$ j+ `0 l5 z; g$ B* N9 I4 P% e
// changes the heatbugs have made. The ordering here is
3 m* r) V/ V3 k- F# e. Q // significant!
( n$ V& x; `5 A W
$ G% e: A7 r: w& N // Note also, that with the additional* ?, ^1 o% o. e0 V$ x4 b
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 m6 L- a$ H$ G
// randomize the order in which the bugs actually run
7 c# b* l8 j: m // their step rule. This has the effect of removing any. q2 D, l( c3 C/ f u$ Q" C
// systematic bias in the iteration throught the heatbug/ H* x1 `$ i# V: E8 e6 J
// list from timestep to timestep
# k H" I7 v, T, l' l: I $ y, p% m/ B4 O
// By default, all `createActionForEach' modelActions have
- \" \- s7 [. G4 ~ // a default order of `Sequential', which means that the
! u. H: k! @ ^& u% t: N/ F! `" W // order of iteration through the `heatbugList' will be* Q& h0 o# P; B
// identical (assuming the list order is not changed
# u3 K: W. h: \' v8 y2 o // indirectly by some other process).. O ?: |# y0 ?, _5 r: s* J& e, A
: |& h( g$ m: C; X
modelActions = new ActionGroupImpl (getZone ());
: Z' X8 b; P2 ~3 H8 P
8 {/ q* X9 B$ m6 O C9 G try {
& Y2 U9 W0 @) F2 I% q modelActions.createActionTo$message+ z7 t2 o$ ~6 L$ R1 E6 r0 U- v
(heat, new Selector (heat.getClass (), "stepRule", false));
$ H4 z4 G& h: S$ K! P } catch (Exception e) {
5 a+ n! |: |6 k- H& [ System.err.println ("Exception stepRule: " + e.getMessage ());, Z8 k& S+ D' B
}# s4 Y1 t* p5 @
. d) U9 ~: {1 _ try {2 F# T0 c( H1 D& s F5 a4 a% t$ \
Heatbug proto = (Heatbug) heatbugList.get (0);! G1 g3 _0 w- g4 u( X2 x+ ~. J! s5 M
Selector sel =
2 n+ |9 u% h8 j. u* [9 v* { new Selector (proto.getClass (), "heatbugStep", false);
+ N* v1 A* ~, T% G o actionForEach =) D) c; \% z% U6 x6 K& j" k: R
modelActions.createFActionForEachHomogeneous$call
7 a3 O$ s0 `$ `7 L (heatbugList,
2 B' i& h6 t* B new FCallImpl (this, proto, sel,0 X. E+ T6 V6 w7 w. c Y, u: x
new FArgumentsImpl (this, sel)));3 R6 Z' M. _% q5 F* s W& f+ j
} catch (Exception e) {, w, N2 f, y+ P* g7 I( I- T" r
e.printStackTrace (System.err);6 `- [2 \0 \/ G9 e( T9 ^
}6 P: u: n# @1 u: h' I2 l
* U' t9 O# L# @/ S) y2 Q0 D syncUpdateOrder ();! L- B6 A/ W; V) R. t
( Y9 e: I5 O8 x1 c" q% Z6 `5 i try {
. L. I- @- ^3 e# \/ @1 Q modelActions.createActionTo$message
/ R/ G3 A5 S/ D& S7 T( c. f n. m (heat, new Selector (heat.getClass (), "updateLattice", false));7 D" F- g7 O) O1 ^- [, W! r* l
} catch (Exception e) {
5 R4 I( Q4 _ ~$ y; K7 G) e System.err.println("Exception updateLattice: " + e.getMessage ());
6 D# \/ y0 @; j2 \9 W+ m5 n+ @ }$ w; y- Y" G6 v
! V0 X( u, t3 B( i- j
// Then we create a schedule that executes the6 i+ u' z1 T% O( _* {* x
// modelActions. modelActions is an ActionGroup, by itself it
) A* T! O! m. H2 M // has no notion of time. In order to have it executed in" x1 V7 ]: q k+ z, j6 H! Q) L
// time, we create a Schedule that says to use the
8 h3 g: M9 R( ]/ w4 {! ?" f // modelActions ActionGroup at particular times. This$ w1 M% o' X8 m
// schedule has a repeat interval of 1, it will loop every& n* Q5 W$ \. G! s
// time step. The action is executed at time 0 relative to2 _/ I$ o% f; h) t# f
// the beginning of the loop.1 j" o0 c& {! g( I7 c k7 ?
% _6 l p" N% L, v. S: Q
// This is a simple schedule, with only one action that is0 q1 g) e* i/ y# Y& U, t
// just repeated every time. See jmousetrap for more
4 j! r& `0 v2 Z/ ] // complicated schedules.
2 Y- h1 a2 ^7 m - o$ Q0 ~, z' J+ K0 n# D
modelSchedule = new ScheduleImpl (getZone (), 1);
' e+ `1 J9 ~: z' [+ u {1 H, a( P modelSchedule.at$createAction (0, modelActions);
# z. p. P" D7 g$ m9 b
6 O, v+ d) w* |; j! {% l% J, O return this;) a. _; @ [) p6 q8 A; R. n4 k
} |