HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ {' H: M# O: w L
3 `7 ~% j9 Z5 S/ g( U; c; H
public Object buildActions () {" t$ U t- [7 p# A4 z% u) T
super.buildActions();5 u7 [; m: S+ j# H( j' } U8 {) _) j
' U0 J. U3 K& E9 X* C: e- Z7 l) ?
// Create the list of simulation actions. We put these in
$ {. ]( P1 N2 ` |5 T/ b // an action group, because we want these actions to be
1 b% k1 u+ J' |, A3 i // executed in a specific order, but these steps should
$ ~# v/ e/ R, F9 W7 a& c/ ?6 p // take no (simulated) time. The M(foo) means "The message
6 y7 X7 G7 c( h+ ?! h8 r // called <foo>". You can send a message To a particular! H2 Z6 C5 X v1 ~
// object, or ForEach object in a collection.( W5 `" r8 V+ T, y) s/ y
8 T) r& R3 p: ~6 e9 f
// Note we update the heatspace in two phases: first run
. U4 p) [+ j( [8 F4 j$ [ // diffusion, then run "updateWorld" to actually enact the' }7 [ j7 {' v" w) G+ r1 T9 [
// changes the heatbugs have made. The ordering here is8 o7 k ~0 u* G) t- F* d. B& W0 m7 S
// significant!
! m( V+ q" N' d2 w
0 f' f& c: f) R7 }5 w& b // Note also, that with the additional3 g5 i J1 h+ M/ G- x
// `randomizeHeatbugUpdateOrder' Boolean flag we can' F5 x, I! r; |$ M' C1 Y4 z$ B" _
// randomize the order in which the bugs actually run# y6 x: F" M( f+ }
// their step rule. This has the effect of removing any0 e3 [% |& ]" S0 @& X+ t) }
// systematic bias in the iteration throught the heatbug* w. H9 ]4 ?( C: d
// list from timestep to timestep: b8 J7 f. p. u
1 S, Q& o |/ d2 W! X // By default, all `createActionForEach' modelActions have
$ g, x' w; f- o; m0 } // a default order of `Sequential', which means that the
2 n7 {* x6 C4 R: A // order of iteration through the `heatbugList' will be2 Q0 Q4 T1 p- _. u; ^+ C
// identical (assuming the list order is not changed
$ l) x" I( I* b7 k; Y // indirectly by some other process).) [- D4 W1 E7 ?5 g2 I- R# y
4 \$ y: ~+ b" q" ]3 U
modelActions = new ActionGroupImpl (getZone ());. h# b: I) {0 }
+ N) F; k5 P$ ]: x' ] try {$ J: o' M; X; E6 h! f, J
modelActions.createActionTo$message1 q! X1 m) I! g) I2 v0 h
(heat, new Selector (heat.getClass (), "stepRule", false));
0 i2 P0 f4 Q5 g: l& b7 x! f5 [4 v4 j } catch (Exception e) {
! [0 t% w& g1 L% ~ `3 [ System.err.println ("Exception stepRule: " + e.getMessage ());
( J- `7 F* X0 n: W5 L+ D$ z }
) Q8 Q+ d/ d2 ?
: @7 U+ L) G7 U0 N( ~6 b try {
; F {& R0 E2 w2 t Heatbug proto = (Heatbug) heatbugList.get (0);. ?: x& _( o& D% i9 B# T) E/ x
Selector sel = . U4 I( d6 U3 U. [
new Selector (proto.getClass (), "heatbugStep", false);
9 @, a" V' K$ N8 ^. C# j/ c actionForEach =
+ ?9 I* `' [7 X modelActions.createFActionForEachHomogeneous$call- ~ k# H- X$ ?* v+ p% v) k7 q
(heatbugList,1 \1 W4 x# v( B
new FCallImpl (this, proto, sel,0 k+ B/ x$ K" F2 @/ U
new FArgumentsImpl (this, sel)));
4 ?9 A9 V X" c l0 z } catch (Exception e) {
& q! U8 I ~; \' { e.printStackTrace (System.err);
9 Z& m6 C! l; u8 F: d( L1 W5 q }
8 R9 M7 e, c1 [
; [ _+ P! S1 C$ }* F9 ]. [ p9 ` syncUpdateOrder ();
4 ^3 t% F6 K3 N/ t+ x( R: w; C8 A. C F$ G, L! M! c
try {
; N# x' O: g$ P& o9 G& f modelActions.createActionTo$message 5 Z. v8 @4 B& L9 D' N
(heat, new Selector (heat.getClass (), "updateLattice", false));
% l2 W1 O. S3 p* z/ A3 k3 y8 q } catch (Exception e) {& ~ X/ i% R5 y) Z4 U& Z
System.err.println("Exception updateLattice: " + e.getMessage ());; z1 f0 @( x' k- l" N
}
* i: r# V6 O# f& r0 N, X; M
6 `9 t, {4 \, p2 S% X4 i // Then we create a schedule that executes the, z' X d. H8 ~3 S& ~, Y3 j
// modelActions. modelActions is an ActionGroup, by itself it
* b$ J0 g6 z. |2 n // has no notion of time. In order to have it executed in
' @: B$ V) S/ q // time, we create a Schedule that says to use the
2 ]" \, V" Z* y4 o- E: V // modelActions ActionGroup at particular times. This" g: l6 l% k& X% F
// schedule has a repeat interval of 1, it will loop every1 _) a9 z$ J# N8 M$ X
// time step. The action is executed at time 0 relative to2 _9 Y }1 T9 V/ `
// the beginning of the loop.& d' ^5 ~7 n: a# ]% k: G
9 _. s) h$ G c4 C' r: G( Y5 | // This is a simple schedule, with only one action that is
, a# S0 {# M2 T* m, F- O% ` // just repeated every time. See jmousetrap for more
5 M; G/ n" N" @( d& f0 n // complicated schedules.5 @" Z8 h) p4 F; d
6 N7 m9 Y+ {0 [9 d' C' d
modelSchedule = new ScheduleImpl (getZone (), 1);% i5 X- c- {! ^/ E9 ]- _ Y
modelSchedule.at$createAction (0, modelActions);5 {& S9 n# |* p8 j3 ?0 A9 K
2 t/ ]5 q& d& f return this;
1 ~1 w! r$ j5 X+ P: a6 J } |