HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 E8 R! h1 b7 E1 p9 p
2 N7 F% H$ s$ H4 |" w4 I4 O! o7 { public Object buildActions () {
( R C3 t: Z% w5 k super.buildActions();" r2 i) }3 n8 h3 C i
' t% C, g U' c
// Create the list of simulation actions. We put these in
1 j2 F% j& _& \: h // an action group, because we want these actions to be+ l" @9 [& F$ M" {
// executed in a specific order, but these steps should
2 n! U1 ?" t/ C3 T- K7 }& g4 F // take no (simulated) time. The M(foo) means "The message$ E% _" \8 j+ {& @+ _+ u
// called <foo>". You can send a message To a particular
' M$ M r) {. A% M. k4 r! n // object, or ForEach object in a collection.
& N, b" C6 I& Y B+ z
8 a, b; I1 X C6 G // Note we update the heatspace in two phases: first run
: k; k+ i' X, u% j5 K // diffusion, then run "updateWorld" to actually enact the8 O* y1 y4 n0 m4 m
// changes the heatbugs have made. The ordering here is
. V* K2 p% W* y9 ]! J // significant!
; |% N" A8 f8 g* Y2 n
* Y( H4 n5 Y9 ]$ p' q // Note also, that with the additional
4 B2 r- ]6 H4 C4 T! n+ A // `randomizeHeatbugUpdateOrder' Boolean flag we can
& e! L; \" {, a/ a% x // randomize the order in which the bugs actually run
' ]" W0 Y. w# B* {8 Y# O // their step rule. This has the effect of removing any3 R- v( ^/ |3 ]% w7 ~; x6 L
// systematic bias in the iteration throught the heatbug: D% G: G5 w( @$ v0 E
// list from timestep to timestep
3 p7 t9 [9 Z/ d% G5 D& U+ Z7 Y# [ % m+ u' @9 }4 c& X
// By default, all `createActionForEach' modelActions have
: E8 g# A( `6 i) I9 _ // a default order of `Sequential', which means that the
/ I7 S- i$ k; C$ y$ O' E // order of iteration through the `heatbugList' will be) a W |/ y/ h8 p/ I
// identical (assuming the list order is not changed
R1 [/ w! E$ t // indirectly by some other process).
6 H, J( i- d$ o0 z4 D# l( L , w) k0 }3 I) G* C( C+ i% q3 q
modelActions = new ActionGroupImpl (getZone ());6 H6 G. {, `4 ]. n+ O+ e
) E& r: u- n5 {: P try {. g1 _; e. L* M* R
modelActions.createActionTo$message& y% y; a( Y' q, C
(heat, new Selector (heat.getClass (), "stepRule", false));+ s* D) n% A9 {/ S, O7 p, H
} catch (Exception e) {
9 _0 h& t- i8 X+ l System.err.println ("Exception stepRule: " + e.getMessage ()); i1 J) O$ G8 o u* m8 ^7 ?( @
}
* b ~; O, Q; g) Z8 V$ F: c/ T. t; K2 E* ]2 S4 b
try {
$ k7 ?4 G4 N. c; \ T Heatbug proto = (Heatbug) heatbugList.get (0);6 H: c& t1 O6 d2 W6 [' g) ]
Selector sel =
4 q0 b+ _9 _' b b. a- s0 r new Selector (proto.getClass (), "heatbugStep", false);
5 W7 X% ?4 k% X. M* e3 Q! ^( j; p3 d actionForEach =
" u. t) |# \9 Q& M' u! Y6 F modelActions.createFActionForEachHomogeneous$call+ q+ v8 K# s0 j) r4 m. @
(heatbugList,) {/ {+ g3 E/ L2 J- D n" o
new FCallImpl (this, proto, sel,
* M4 r1 A% p- ]$ }0 A. _7 e$ f new FArgumentsImpl (this, sel)));
2 G8 m9 @7 E* ~8 v5 q0 S) ? } catch (Exception e) {$ b8 Y4 H2 |9 S* X
e.printStackTrace (System.err);
5 ?2 m' a/ l/ b- X% ?6 W. J }: s2 D0 k# X3 }- g: U
) d: y$ D% U: n3 A6 p* l+ q3 h syncUpdateOrder (); i9 C( A8 b' p& I
3 o( {; V& l2 Y# ?$ d9 J3 L9 a
try {
# ?- G2 t6 \2 _8 S4 v) S modelActions.createActionTo$message
$ e9 d- K* r5 u9 b6 W% c# e# j (heat, new Selector (heat.getClass (), "updateLattice", false));
6 [' m9 d, z5 m; } } catch (Exception e) {
# O6 l7 x" ^* e System.err.println("Exception updateLattice: " + e.getMessage ());- @4 B& K5 f8 C+ t
}8 A: F/ u/ q& r) c
" f. B1 U7 P4 F
// Then we create a schedule that executes the
9 y8 D# E4 _% w! a4 Z* L6 _ // modelActions. modelActions is an ActionGroup, by itself it
6 y" _& L3 }9 Z // has no notion of time. In order to have it executed in( h1 j6 \7 C" C s$ }+ [4 B/ F
// time, we create a Schedule that says to use the
0 p$ [ \% d- H6 [; i3 E // modelActions ActionGroup at particular times. This5 M1 q \: r! p: J3 t6 G
// schedule has a repeat interval of 1, it will loop every( |/ l/ F" M( m+ G
// time step. The action is executed at time 0 relative to
$ H C& j2 C2 I* X7 I/ _2 ~3 o7 p // the beginning of the loop.
5 C! ~* K, E: {. Q } O& c* K: s# Y9 ]7 o4 `/ W
// This is a simple schedule, with only one action that is6 q; D$ p Z/ }; E
// just repeated every time. See jmousetrap for more8 u/ G/ E' f9 V. `) M- u3 M# \
// complicated schedules.. P6 S+ d' V0 B) X! h( y
; s: Y) X# |+ Y/ y modelSchedule = new ScheduleImpl (getZone (), 1); F) T/ m( c. k, t) ]3 [
modelSchedule.at$createAction (0, modelActions);6 ^+ J5 s- e8 s9 {$ G2 B
1 u9 j5 v: z0 t, ]/ E
return this;
9 p$ z% L( u8 m8 M0 ?+ U3 c, K. a } |