HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 y) w, [3 V* U0 ?) \% Q- E* j8 \' l9 \& C/ f! V2 @5 o
public Object buildActions () {
+ I5 F- W* q- [0 c3 P super.buildActions();
[+ J3 f) P, ~/ ~2 y5 F ' U! n* A0 F0 B; m; j0 a+ D; a
// Create the list of simulation actions. We put these in
+ O& l: E+ ~1 ?/ V& \/ z4 ^* v // an action group, because we want these actions to be
8 l! y1 D$ k- _- D% u // executed in a specific order, but these steps should* U: w6 q. \, j, _
// take no (simulated) time. The M(foo) means "The message
. y# N) e* J, _5 z // called <foo>". You can send a message To a particular
2 j R# H" m3 j2 p5 U* E, v // object, or ForEach object in a collection.5 z: N! Y! F; I& N1 X
( g0 l" T. p2 _' h+ y4 r/ x
// Note we update the heatspace in two phases: first run
( {" }, B m1 a0 w! y9 x7 }5 J // diffusion, then run "updateWorld" to actually enact the
: ?, }) u# z! s8 ?( }2 I8 G // changes the heatbugs have made. The ordering here is
9 _, f t# C9 T: M! ^* d; P0 { // significant!
$ P$ N- q6 f5 f% O9 _' H
! B3 ], u; H }; p // Note also, that with the additional
+ P: y/ z' Q/ i v // `randomizeHeatbugUpdateOrder' Boolean flag we can) q% t3 Y7 {+ _' A7 e3 Z l+ F, X4 e5 P+ O
// randomize the order in which the bugs actually run* m, \" C, j% B: \" X, Y
// their step rule. This has the effect of removing any( |6 l6 r3 Q4 |) W9 F. V4 _& U
// systematic bias in the iteration throught the heatbug
0 h+ Z; J, @5 B3 u8 K1 d4 d9 n // list from timestep to timestep. O, ?- }8 j* w. B- h [+ Y# `
9 O! v% V. p$ L6 A, G/ Q2 U // By default, all `createActionForEach' modelActions have
+ t0 F4 d0 c6 ?9 L+ g' K a // a default order of `Sequential', which means that the
7 z: a+ b* Z* Y1 M9 t& H: L2 A7 x // order of iteration through the `heatbugList' will be2 D }+ W. r% e T! b# Q6 g, }
// identical (assuming the list order is not changed
# l: ~8 a4 u/ d& U1 G // indirectly by some other process).+ |6 {. u& D O0 m# H
5 e& h; T$ m' V+ F) J7 l1 y* z! t modelActions = new ActionGroupImpl (getZone ());
& n& ~* N( e" f7 A
& g$ b: C3 G( b" K$ I- k# i! Q/ m try {2 r( ]* |4 O/ Q5 z- q {8 G: V6 M
modelActions.createActionTo$message% e! e/ K- n* c
(heat, new Selector (heat.getClass (), "stepRule", false));2 ]6 ^) J' J+ o7 F8 W1 T
} catch (Exception e) {) k+ p( A% d( E4 A5 W) L3 c" E
System.err.println ("Exception stepRule: " + e.getMessage ());
* H8 @1 H( t. B1 q/ [8 Q }* I, J+ w+ ~8 [$ {% d @. Q4 |
7 b% C7 k4 E# F$ x4 L/ i S try {/ |( s/ x* Y4 l" q3 f
Heatbug proto = (Heatbug) heatbugList.get (0);
6 W: j' n& V3 T' ^4 G9 t. [7 R Selector sel = . `6 }8 `+ W% f# r3 s1 [7 F9 M- ?
new Selector (proto.getClass (), "heatbugStep", false);
3 u7 Z. E0 ?" O) I* r! ^ } actionForEach =2 D: r- L' c# I$ |4 g" ?! I$ T, b
modelActions.createFActionForEachHomogeneous$call
- [. T3 U4 A# Z5 B2 v/ \ (heatbugList,1 j5 `1 z( g$ M% ^. I
new FCallImpl (this, proto, sel,
% Z7 e1 ~9 x Y: R7 S new FArgumentsImpl (this, sel)));
j1 l( O* {/ c } catch (Exception e) {
8 B# T6 w# M" {4 C e.printStackTrace (System.err);
: n8 V' P1 h+ W5 F; m }
b' {, I2 X! ]/ J; f v/ N * v+ [$ `% f- \' Y5 E/ S
syncUpdateOrder ();5 j& q' h6 a6 r- H) w
/ |: s: d% x# O" i# C6 W% E7 B/ h! C, P
try { a2 W, M/ ?2 L2 [: m1 b2 K5 i% C
modelActions.createActionTo$message ' g1 m3 G) m% |
(heat, new Selector (heat.getClass (), "updateLattice", false));
# ]$ Z1 r3 J: b; e9 J% d } catch (Exception e) {
7 M8 E" n, [! L0 y System.err.println("Exception updateLattice: " + e.getMessage ());1 D2 w3 { Z" m! ~6 v- E
}
4 X# z! R/ J# v4 d5 t' J
4 k& J: n& E1 L% m2 b, T* u) | // Then we create a schedule that executes the
* n6 g* M) g4 w; K1 _' W // modelActions. modelActions is an ActionGroup, by itself it
2 ~2 x% D$ T2 f5 m // has no notion of time. In order to have it executed in
3 `1 n/ d, h6 ]! I7 s( ` // time, we create a Schedule that says to use the
' d: s* a0 F6 S; S! L3 { // modelActions ActionGroup at particular times. This, x z4 E: I( X6 p9 d f4 d
// schedule has a repeat interval of 1, it will loop every3 L% t A; a$ X3 g/ ?
// time step. The action is executed at time 0 relative to
4 T2 x: C6 n2 o% z2 s // the beginning of the loop.: F' F- ?4 [' g, X7 j
" T& O& Y/ x6 U: _/ M# |
// This is a simple schedule, with only one action that is- t f: H: j+ F( j, {# ~
// just repeated every time. See jmousetrap for more% r/ h% E7 h# m% ~" t5 W c
// complicated schedules.
2 N+ l) m" c& H4 {$ e$ C ; @+ j9 g* C- Y/ ~- N# G
modelSchedule = new ScheduleImpl (getZone (), 1);
8 ^, I0 N$ m9 \9 c modelSchedule.at$createAction (0, modelActions);; q/ [7 s( }9 [, ]4 P B
. L9 q9 {9 D% A
return this;
+ F0 D5 i9 S) j* x } |