HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- u" p. X8 K ~# i
4 |0 [8 c; _- D# g( V$ b& V/ c
public Object buildActions () {
+ ~2 f# ~0 j. l+ i super.buildActions();
2 G8 I: L. S: v
- y- U3 l4 G3 g2 c. y // Create the list of simulation actions. We put these in
9 b. s% D2 R1 L7 I; x& |1 f // an action group, because we want these actions to be% B7 w y6 ]" M' e& @/ ?. k3 T: j
// executed in a specific order, but these steps should$ z1 T* c2 J4 @
// take no (simulated) time. The M(foo) means "The message
, {7 A2 i0 d2 `( Z, L3 O // called <foo>". You can send a message To a particular+ s7 w! T* ^5 {6 f
// object, or ForEach object in a collection.
, O" @; I2 o0 e" I( P x
6 f6 }" v( |: H1 J/ ~4 G, E- j // Note we update the heatspace in two phases: first run/ V( @8 }) N+ V- U/ r
// diffusion, then run "updateWorld" to actually enact the
4 i3 z1 v! C$ G3 k // changes the heatbugs have made. The ordering here is9 [- ^8 D2 Z7 f
// significant!
* d$ N# N$ ^: }) U1 _1 D/ Z
. z h/ {) d# ^% Y4 z // Note also, that with the additional
7 `) h* m0 C1 D# G // `randomizeHeatbugUpdateOrder' Boolean flag we can V* H/ y( p9 u0 A0 o/ l
// randomize the order in which the bugs actually run
+ X5 a# F5 q0 @# F& g% p y // their step rule. This has the effect of removing any/ O2 e0 h0 `" Q9 V6 N' h7 E
// systematic bias in the iteration throught the heatbug
9 z/ \/ J. C2 d8 ~ // list from timestep to timestep) w5 ^3 R J, A
, h: ~' j; y$ \5 l% c) ^' D // By default, all `createActionForEach' modelActions have
9 d Z2 }8 k; J I T8 t0 J8 B- | // a default order of `Sequential', which means that the
. u( D( G9 D+ t // order of iteration through the `heatbugList' will be
8 T! ?. z1 i% Q3 F& T% c; U // identical (assuming the list order is not changed
, v3 y3 u4 H1 V; I) W# u' ?' K j/ Z // indirectly by some other process).1 S2 E5 H0 x0 K1 L0 L" V2 ?% ?
: w% I5 r. \7 ?( e modelActions = new ActionGroupImpl (getZone ());$ d% [" E/ v9 L5 Y, S
8 Z5 @1 I1 N& K$ O) e try {+ K* Z4 `0 q/ }5 S+ I
modelActions.createActionTo$message9 v* i. u- I: D2 o; G; M4 s9 x
(heat, new Selector (heat.getClass (), "stepRule", false));9 C! ]0 K. d, v1 I$ K) v7 }5 [
} catch (Exception e) {
6 T0 c7 B7 ?" P7 o' H; M System.err.println ("Exception stepRule: " + e.getMessage ());
6 V/ m0 H( l, w. U }- ~! k1 @1 j4 f, M5 V: s$ d
" s) C# X) L( P. t8 y B! g
try {
* c( A% I1 P4 d" o! q Heatbug proto = (Heatbug) heatbugList.get (0);4 h% x) O V# O& H! t5 T4 i$ f2 v
Selector sel = 3 B, l) z, M6 N' n. b9 P ~+ k
new Selector (proto.getClass (), "heatbugStep", false);0 c! ?8 ~$ i8 O, l! ?# {# e
actionForEach =
1 n2 u& P& [9 q3 g9 G/ t% H, { modelActions.createFActionForEachHomogeneous$call
2 U! t+ ~$ ]; V) z8 s% N5 L (heatbugList,/ r: x @- _/ G( p( N
new FCallImpl (this, proto, sel,
9 ?7 z1 |8 j# ~( F new FArgumentsImpl (this, sel)));/ n, a5 B3 _- V# H
} catch (Exception e) {
( e, M; o/ _% o0 p% j2 N7 N+ n e.printStackTrace (System.err);5 |! b; x% p0 m T. y
}8 a: w6 L( ~, A P8 m
& b* B. f4 l7 k# F
syncUpdateOrder ();) t9 E1 L) f/ |# U4 A0 H3 P
9 B; Q: F2 N3 l
try {
" h6 f2 q8 W% ]/ e2 r modelActions.createActionTo$message # W0 D; m2 h, K- J
(heat, new Selector (heat.getClass (), "updateLattice", false));
" c4 I, L: m' {7 w% r( l } catch (Exception e) {
" ?) J, [( Z; f+ g- d System.err.println("Exception updateLattice: " + e.getMessage ());
8 r+ ^- q- z2 d5 q }/ ~% _) C* L/ C* K: \
" |* B1 X7 Q$ E. r2 O! U% C' ?# \ // Then we create a schedule that executes the: d( O% v7 ~" T: h3 R0 Q. l4 I
// modelActions. modelActions is an ActionGroup, by itself it
( f' a$ \9 g e6 r, s+ D // has no notion of time. In order to have it executed in6 {. U1 u& d" B+ B' ~8 W! X" H
// time, we create a Schedule that says to use the
$ A" `( ]; Y1 ]7 Q8 A // modelActions ActionGroup at particular times. This! t1 E! h) Y% i/ Q4 m* j
// schedule has a repeat interval of 1, it will loop every) r2 W6 x) q7 k
// time step. The action is executed at time 0 relative to
5 B# n( `6 K$ \ // the beginning of the loop.
6 U2 O$ r3 n/ V1 T8 u. ^0 a* z4 u; }3 x3 w: P T; u$ i! o
// This is a simple schedule, with only one action that is7 U6 S* M% {5 b
// just repeated every time. See jmousetrap for more
0 y, @. j5 @. N: N/ [% ^ // complicated schedules.* `4 ^9 w2 e. W0 U4 Q
. W/ N3 a: C# M, n modelSchedule = new ScheduleImpl (getZone (), 1);
9 ]* x" g8 \: I& a modelSchedule.at$createAction (0, modelActions);
$ n# W# V: L# j( L% ^, f 4 E) A8 q$ X- \& [& g* |% u8 D7 s+ y- d. y
return this;
6 X; I; P/ E0 M7 {: R) \: P; n } |