HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: c9 R& _) m3 i5 ]0 t3 I4 Q
]9 l( p, D8 n8 S* T
public Object buildActions () {$ [# z. K: _, q! \: d% @
super.buildActions();
6 a' L8 Y \' x5 A
3 J! I+ X s! ?( j // Create the list of simulation actions. We put these in
1 y" d' W' p; w // an action group, because we want these actions to be$ \5 X! B# Q6 F
// executed in a specific order, but these steps should
8 V' p' d, e4 M7 P // take no (simulated) time. The M(foo) means "The message7 |, @' c: N! Y7 s* B
// called <foo>". You can send a message To a particular1 Z ~3 p& r3 s1 O5 q
// object, or ForEach object in a collection.9 K3 p6 n/ e/ }2 r8 E
# i% y3 @) J4 N // Note we update the heatspace in two phases: first run
9 `6 ~. V7 y$ O- p$ e, l // diffusion, then run "updateWorld" to actually enact the
* ^1 G5 P T8 { // changes the heatbugs have made. The ordering here is
2 m( h, F& {. J+ b2 s; ?0 ]) J7 `: v // significant!5 X3 ]" S' A/ D
9 O3 k& h/ F( v0 P. I6 U
// Note also, that with the additional% l0 H; d, J6 {: k5 ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- h6 h5 q6 V' Y2 Y // randomize the order in which the bugs actually run4 F7 {" P% A( h2 e- ?9 D4 z
// their step rule. This has the effect of removing any
& \( w2 E$ N. Y5 o/ f7 y. P0 N // systematic bias in the iteration throught the heatbug
: v c! ]5 [% d5 D" w( }7 M // list from timestep to timestep9 f( n0 o- _: ~& m3 A2 g0 x0 z: I5 B
2 ^; W4 G/ h( l/ X. I2 y7 |
// By default, all `createActionForEach' modelActions have; \( C' E5 h3 o; M% I
// a default order of `Sequential', which means that the
9 ?+ w% D3 h, f: O // order of iteration through the `heatbugList' will be
* {2 ?6 e9 e+ }+ X7 u# o3 Z0 K- p4 u( L // identical (assuming the list order is not changed
* K9 S4 a! ]( @7 m* E1 y // indirectly by some other process).+ y8 n( j( R- R
+ i7 x, B- x! q& H6 s
modelActions = new ActionGroupImpl (getZone ());
! B3 v0 k* c0 z+ k4 |0 ~) {2 ]9 m' `. ^9 j" C- N/ h
try {6 H9 H8 e/ D T1 J+ r. Z
modelActions.createActionTo$message
" ~2 w- s9 b# V3 d5 b2 Q, g (heat, new Selector (heat.getClass (), "stepRule", false));
: B& ^ [; g# C- f* i } catch (Exception e) {
2 j; Q5 x' W# ^4 ~" v System.err.println ("Exception stepRule: " + e.getMessage ()); F9 B: M5 N3 W8 C$ z" B3 S+ n8 J
}
3 P, T1 R* _" p8 D" u- z9 ?$ Y
8 D* D" f1 G" E3 y6 ~( J% V9 q4 a try {
1 l8 g z( g; \ Heatbug proto = (Heatbug) heatbugList.get (0);: M2 b: r/ A2 Z/ b8 k0 G0 O& |' d
Selector sel =
6 [8 \* Z8 B9 M! I- X0 S! P/ J j new Selector (proto.getClass (), "heatbugStep", false);
% j/ ^) k- t6 k8 t& L \ actionForEach =! a& o. d; ^2 j; m( l% z
modelActions.createFActionForEachHomogeneous$call
, v3 A1 M. z- r: P (heatbugList,7 |! o2 V- l6 |/ T! G
new FCallImpl (this, proto, sel,
8 v1 p+ O0 g$ Y2 w) i! Z new FArgumentsImpl (this, sel)));- ]$ C/ I1 ~# z! d" a5 s2 V
} catch (Exception e) {
& q- c1 u! I8 h e.printStackTrace (System.err);
5 Q. z: Y* K9 f& ^+ y k( a; `( M }1 |. {) K- Q2 q
1 C. c9 i( H# S% |' z1 Q syncUpdateOrder ();
6 N% {. x8 j7 G/ b* V6 E4 P
: G. E/ }' s' F. l8 R. e try {
* ~9 }' j# c- v5 P1 b- U modelActions.createActionTo$message
0 q9 O5 S; ~6 y- A+ D0 p (heat, new Selector (heat.getClass (), "updateLattice", false));
5 T" e( a9 Q7 c% T, O } catch (Exception e) {! N5 f: r2 K8 X) \0 u( P, | t9 k! h
System.err.println("Exception updateLattice: " + e.getMessage ());+ T a! ]7 E1 Y& e, I- p
}
- c3 `3 c0 }! p% ^6 \
% t( W2 P- u+ m, o. [. ]8 z // Then we create a schedule that executes the
- U! {8 v! q6 A2 L' B9 y. _6 N% a! C8 E // modelActions. modelActions is an ActionGroup, by itself it8 C& H% E$ J7 D
// has no notion of time. In order to have it executed in
- A6 P, ^/ u& I/ k& \& {# b // time, we create a Schedule that says to use the
- |/ d3 [3 D" ]' w2 U2 f( w // modelActions ActionGroup at particular times. This
( n- d0 d: @* H // schedule has a repeat interval of 1, it will loop every) r+ x, {4 Q- y9 {- L0 @
// time step. The action is executed at time 0 relative to5 e r7 b7 F" _3 B9 ?* o
// the beginning of the loop.7 i" {* X; @+ R
8 ]6 m3 c/ P* |0 C; R/ H0 { // This is a simple schedule, with only one action that is
2 [7 t+ {6 f4 b7 g2 f // just repeated every time. See jmousetrap for more0 o' B. E7 i! c! g3 Q4 n( w
// complicated schedules.
3 h% g& ?: \" A& X9 ?: K7 u; Z ( |3 m/ L- y, |6 w3 W9 `0 C
modelSchedule = new ScheduleImpl (getZone (), 1);8 |# M& g' E: n! D
modelSchedule.at$createAction (0, modelActions);
) D% C4 N4 d3 j# b1 u
1 |0 B% _, b# G8 u" y2 @ return this;3 j* U9 K- V. Q/ ?
} |