HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 m1 q, r5 u5 \$ T* W
9 W$ Z! x: d( s! L$ `8 y$ m" s) s public Object buildActions () {
' Y! }% i9 ]9 U super.buildActions();/ s: E6 l' g& b# e3 `' v: B
/ b& G; @8 ~' X4 x! v: a( ? // Create the list of simulation actions. We put these in/ z: R. p# x( h( z; {+ B
// an action group, because we want these actions to be
$ R/ K$ {: V6 p // executed in a specific order, but these steps should
" B% K9 I4 [ k C0 x) } // take no (simulated) time. The M(foo) means "The message( N9 V0 Y3 ]0 j5 ?8 U1 s$ G1 f0 l; x
// called <foo>". You can send a message To a particular" I2 G- A! W9 l8 r: o
// object, or ForEach object in a collection.$ V' d7 b5 `; m, g3 D# J: [
" R# K* w: L) m4 J
// Note we update the heatspace in two phases: first run2 h- {5 {+ t4 Z
// diffusion, then run "updateWorld" to actually enact the# e* F2 ~% M6 c( H2 c3 N
// changes the heatbugs have made. The ordering here is
4 Z6 p% B }" J( _8 D // significant!, Z) v# a) i/ W6 z+ G6 [
' `$ W5 {& x) f) G/ Z // Note also, that with the additional
4 p" G) H: b5 ^& t3 E8 w4 d/ P8 f // `randomizeHeatbugUpdateOrder' Boolean flag we can1 N2 V# H* M# |5 b( J+ p8 E6 ^) ] ~
// randomize the order in which the bugs actually run% N. r4 U, h$ x) O- a
// their step rule. This has the effect of removing any* q. z3 e* _8 z/ q
// systematic bias in the iteration throught the heatbug4 D$ k; L% c( Y! g/ _! M% Q8 _- @) j
// list from timestep to timestep
- J; {8 {, c+ \! L
5 T( j# p0 D, r* ?& s M // By default, all `createActionForEach' modelActions have
4 Y& f$ S, s0 h9 s/ P // a default order of `Sequential', which means that the! _/ N2 F7 _) C2 |0 l+ I4 T' y: m! r
// order of iteration through the `heatbugList' will be
8 `% S8 T: M& |# ?( ~9 K2 x // identical (assuming the list order is not changed2 _4 {: h' e7 i8 W
// indirectly by some other process).
( Y9 S1 I. L( p e; [% I7 l/ t9 f, \ , _. D! z3 b9 a, ~
modelActions = new ActionGroupImpl (getZone ());3 X1 n0 D8 O: C X! B
8 V" N2 l' i( U2 L. d* P% a5 V9 r try {0 h# [: h% H, C+ _6 O
modelActions.createActionTo$message% k$ X/ \* w, Q% o5 k8 Y3 y& P
(heat, new Selector (heat.getClass (), "stepRule", false));. Q1 @) S$ y) x. F
} catch (Exception e) {
3 t' Q( C+ U- s System.err.println ("Exception stepRule: " + e.getMessage ());' w3 K6 x" w5 D x
}
7 r. S5 F& }: p/ c$ @/ o% Y
) B' J* ]5 e! q/ q+ Q# q- z try {, h% {/ q- S! l
Heatbug proto = (Heatbug) heatbugList.get (0);% T# _1 v) T0 ~/ I# |9 N
Selector sel =
]: A$ E# F& q1 S) j new Selector (proto.getClass (), "heatbugStep", false);
. C/ [' N, {# A) a( E( G( T, e/ Y actionForEach =( u9 P( G! U5 `3 @( @: V% E+ n. f
modelActions.createFActionForEachHomogeneous$call0 ~4 E" a0 i- F2 N
(heatbugList,
- A3 o/ q6 M% s: A" ~0 x: G8 b new FCallImpl (this, proto, sel,8 T+ ~0 D* C; [0 o3 S. r5 z" Y8 T$ M
new FArgumentsImpl (this, sel)));
% a4 I' n& ~- [$ f8 E. h2 C$ z } catch (Exception e) {
9 F. n- w8 k$ C# f8 M% m e.printStackTrace (System.err);
' |- L6 Z0 E. G+ u( ~: i }3 a* r4 r2 E6 j1 e( T* I
, k& b" L5 _- L6 ?3 T- V* ? syncUpdateOrder ();, y; m% H X- A- x
+ `5 g& Z7 c# x* L5 B try {
2 x: |/ M* D- o1 } modelActions.createActionTo$message : T4 J$ a, L4 X4 A7 j1 i) u# e. L% h
(heat, new Selector (heat.getClass (), "updateLattice", false));$ L" c( A5 v3 r. u( v3 {
} catch (Exception e) {
3 X* [- b4 M3 P$ n% n System.err.println("Exception updateLattice: " + e.getMessage ());% b# X4 q! C2 y' x! d
}. T, G; @& J6 h; }7 u" O! z
' V- `5 f7 Y2 r4 _ d // Then we create a schedule that executes the- s( \7 M( X8 c5 I
// modelActions. modelActions is an ActionGroup, by itself it0 ~/ j2 _" Q& l6 l K- }/ x/ v
// has no notion of time. In order to have it executed in
4 V" v6 Y0 n4 _9 n // time, we create a Schedule that says to use the
2 L- T; W3 y$ Z0 q // modelActions ActionGroup at particular times. This
+ c. y; D1 b" w // schedule has a repeat interval of 1, it will loop every
) T) _. K- x& }$ P# t, o // time step. The action is executed at time 0 relative to
3 E9 J( L( `) j0 O // the beginning of the loop.
/ n# u. C- X' R8 Q5 Y7 [( B
: o' L" |: [& K( K" W7 C // This is a simple schedule, with only one action that is, j# r+ t/ e8 @1 C
// just repeated every time. See jmousetrap for more
$ i3 o& t7 v% } // complicated schedules.
* l" V/ W8 E M1 N% i6 e6 B , m, ]/ Y% f% W# Q
modelSchedule = new ScheduleImpl (getZone (), 1);
4 I+ K8 k1 e5 e" y, s" |( v6 | modelSchedule.at$createAction (0, modelActions);2 y/ A4 I D" l3 j8 M% h- s
+ \5 Z- j3 K7 D% u' I
return this;: A' m6 r9 N0 k0 [1 o# {! e5 G2 @" i& ?
} |