HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 R" b# k- M; D; H, ^
; W# }4 |( `% ~1 q public Object buildActions () {
) W6 N* A- ?& P( U% Q7 | super.buildActions();
5 l* y/ q+ P$ E* ~1 C
2 b/ h& {2 f* J+ _3 | // Create the list of simulation actions. We put these in
" g; P3 \6 s* q- i, F" s D // an action group, because we want these actions to be
9 p( X9 h4 Z' L# H6 o X9 q // executed in a specific order, but these steps should: D6 r* [( g& A7 c; a
// take no (simulated) time. The M(foo) means "The message
8 u% K1 E5 t( ]% q // called <foo>". You can send a message To a particular9 `# t; O/ l0 s. i5 v8 X
// object, or ForEach object in a collection.
$ p, v) B2 M5 x! y2 ?
$ ~- U( b; b0 m. y: H // Note we update the heatspace in two phases: first run& w/ C, J9 D; I4 {( s
// diffusion, then run "updateWorld" to actually enact the6 t' G% W9 n0 M) _5 e
// changes the heatbugs have made. The ordering here is# D& e8 C# L$ V; R
// significant!
+ v V' L" T+ v* b ( L2 X7 y" i7 M8 ]: c' b
// Note also, that with the additional; [ q! I6 g/ ]. O
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 M, U, u& [0 u) q // randomize the order in which the bugs actually run; R7 @% l8 m; o6 S. |; h* K& ?
// their step rule. This has the effect of removing any
0 y1 U" g$ Y! J+ F4 B // systematic bias in the iteration throught the heatbug
4 ^7 n' {/ B! K9 R& T7 k // list from timestep to timestep o" U6 m4 Y! |& a
# K4 z9 F- g+ K1 z5 E; l" M // By default, all `createActionForEach' modelActions have
2 e* t4 H8 o; @6 Z1 S3 _ v5 n // a default order of `Sequential', which means that the
' ~) V) T8 w/ w/ \0 Z& n# @ // order of iteration through the `heatbugList' will be- B) V% I5 ?- Q! ^, T
// identical (assuming the list order is not changed
7 ]$ r l! D6 ^6 ]1 d# E! g9 ` // indirectly by some other process).
a0 T. i. i" ]/ x' i1 ] 8 E9 W$ {8 k+ G( y6 h# u
modelActions = new ActionGroupImpl (getZone ());& {" V/ g: _7 V
( p d8 p+ I, J' y$ L: T9 v8 H- o( S
try {
- i& O; L& t4 [, G modelActions.createActionTo$message$ |+ w8 M1 z( z
(heat, new Selector (heat.getClass (), "stepRule", false));& w* y+ H- U6 T
} catch (Exception e) {
$ s8 k$ O& P+ ?1 w: O3 R+ [ System.err.println ("Exception stepRule: " + e.getMessage ());
% a$ c" S* [: j1 | }1 u0 ^: }1 n$ p
; m l9 Q% Y" a0 U3 B
try {
8 ~" K3 V& h$ D D Heatbug proto = (Heatbug) heatbugList.get (0);1 s/ x7 n9 \% ^$ C" }, a4 P
Selector sel = & P0 t! x9 ?. v; _+ w
new Selector (proto.getClass (), "heatbugStep", false);
. U- M, D+ {7 y+ o actionForEach =
2 g7 L3 O" W: v4 F modelActions.createFActionForEachHomogeneous$call. ]% f# U9 ?9 R; L1 T) j
(heatbugList,
* x( L( \6 P5 t1 y9 G e2 p new FCallImpl (this, proto, sel,
1 p- C% P$ R: \6 g! P. a new FArgumentsImpl (this, sel)));
6 A7 _) j4 d6 v: L/ K& h } catch (Exception e) {
4 h6 ~; M: z. b+ {2 A e.printStackTrace (System.err);% P- x$ A5 @6 ~- F$ A) c! z7 [; g' }8 `
}% z6 q& ?( {/ }0 E" h8 K c" t
% S! F5 ^. @' x% n6 Y. m; T7 w
syncUpdateOrder ();+ u9 H5 o U* N, _
+ h1 ~3 [, {) P% P- g: c
try {
' B/ s9 s5 Q d6 L modelActions.createActionTo$message + v6 K( a2 a. |% Y: f. t# o
(heat, new Selector (heat.getClass (), "updateLattice", false));- d7 c' D/ z9 z9 C- C! b
} catch (Exception e) {
8 c! k$ `- L7 N1 I2 y! F) z System.err.println("Exception updateLattice: " + e.getMessage ());
, i% g: B9 O; @4 b+ w" g }
6 _6 i5 u# T( _ B - c' ^/ h2 e& Y& H) t! P
// Then we create a schedule that executes the
0 S4 g! m& i' z) Q4 A7 L9 `) U // modelActions. modelActions is an ActionGroup, by itself it
. e: C3 x2 o9 S, g2 O // has no notion of time. In order to have it executed in
1 [" q2 Z! U% g. u j% M5 z: k+ o // time, we create a Schedule that says to use the$ [* _2 v9 v5 a3 ~) b( D& O0 D
// modelActions ActionGroup at particular times. This
4 {" k W4 V" ^6 `3 F4 l- z // schedule has a repeat interval of 1, it will loop every
9 h( q2 Z9 r7 ~( b) Q t' m- E' i // time step. The action is executed at time 0 relative to
; y' V/ p$ r) R& {# _ // the beginning of the loop.2 _2 z3 g% S" d( B& b: N
; p. a( h- S+ [# D& D' O4 m
// This is a simple schedule, with only one action that is
5 J# ]8 s& t" {( D // just repeated every time. See jmousetrap for more
+ z" a! i. o: Q& N8 [+ T // complicated schedules.
% i1 O9 `: U* w3 g1 K
$ z! C9 ?# d! \$ J modelSchedule = new ScheduleImpl (getZone (), 1);( G4 @* ^+ i# s$ {3 O! ^0 [
modelSchedule.at$createAction (0, modelActions);
5 N- K- q& R) N) C4 Y
2 ?3 A% y) T, N6 V2 \" u; d: t return this;
* H2 k; e0 b9 ^; N% N } |