HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:( f: Y [5 Z/ e! Y9 G: k
2 V/ T8 p! v4 q" ]
public Object buildActions () {7 y. `& \& u6 V. q8 A
super.buildActions();
9 \ }2 |# }+ Y+ `! G9 W0 ` / z% A( I! f% `
// Create the list of simulation actions. We put these in
( b3 ~. E* D% f- k) ]5 i // an action group, because we want these actions to be1 b. q" B; `2 b+ S( g. Z. S
// executed in a specific order, but these steps should% B$ v% K( j8 [2 y
// take no (simulated) time. The M(foo) means "The message" [3 ]" i3 [, \' f
// called <foo>". You can send a message To a particular
: ]" O9 ^1 P9 \5 Q2 G8 s. \! \2 @* ^ // object, or ForEach object in a collection." L9 T4 s2 @ C$ ]% x
- y6 K0 z9 f/ G" T5 o
// Note we update the heatspace in two phases: first run2 g" ?. ]9 s# a1 G' t4 x0 ?, ^1 ^: W u
// diffusion, then run "updateWorld" to actually enact the8 I$ P K: |; F# ~7 j* I
// changes the heatbugs have made. The ordering here is
4 W* f: L2 N7 t/ ` // significant!" R3 {5 l5 V2 V
4 u0 n5 R, r! Z; @: Z // Note also, that with the additional
* n, t, }/ T' t" Y8 D6 X // `randomizeHeatbugUpdateOrder' Boolean flag we can
[7 l: B7 ]7 Y9 ]& e // randomize the order in which the bugs actually run* }2 T2 f& `- ` z
// their step rule. This has the effect of removing any; C" x2 N( Q! N# Y/ k' j& E
// systematic bias in the iteration throught the heatbug
0 t7 }, Y2 ?1 _% k // list from timestep to timestep
( s9 A! e& `, F
) O& b* L7 c3 P8 R8 e/ R4 V // By default, all `createActionForEach' modelActions have
% m4 k. Y& a4 D2 ]" o // a default order of `Sequential', which means that the' ]& H: M+ M% M. e+ b
// order of iteration through the `heatbugList' will be
" V8 a9 U9 N: A. C6 u _ // identical (assuming the list order is not changed
3 c- x( p3 Y4 d; X; h // indirectly by some other process).. E* a8 i# ~; ^& ~& t
5 p6 O. U9 T; R, K& e4 d0 u
modelActions = new ActionGroupImpl (getZone ());: N, \& o4 W/ E
* Y+ w. y1 b* i% |2 ?- l
try {: m# H$ z( Z. W8 R) {. N; t
modelActions.createActionTo$message
) y2 s4 k( J# u& F (heat, new Selector (heat.getClass (), "stepRule", false));
+ Y+ {' ] l+ P( E( r6 O1 R/ N& } } catch (Exception e) {
6 n1 Y8 |1 S: X# w+ C) q1 I. L System.err.println ("Exception stepRule: " + e.getMessage ());; P: a/ ]: h" c6 O5 `% X& L
}. N$ e! q3 D: ]7 N' d4 M
- M) c/ y/ \9 s* A: h7 H" J, e
try {/ x% S% t* c2 t+ I% ?/ ~
Heatbug proto = (Heatbug) heatbugList.get (0);
+ _) P# B/ n) f0 v6 ^ Selector sel =
% O& h- u/ p6 I. G) C new Selector (proto.getClass (), "heatbugStep", false);+ t* _9 j: x: C g' X
actionForEach =
7 s. ?# p+ q3 L9 M* d0 C9 c, S4 c! J modelActions.createFActionForEachHomogeneous$call0 n# B2 }5 i. q6 ~
(heatbugList,
- Q5 X1 S e. m# T' j3 l; w" M$ C% y new FCallImpl (this, proto, sel,
1 Z$ T$ Z3 L( Q* ^/ z G2 t new FArgumentsImpl (this, sel)));
1 G0 X% ^) W; w' R5 ^' ^- K } catch (Exception e) {
2 R- ]+ O- _! ^) M& S4 ?6 z e.printStackTrace (System.err);% V1 m- e4 E5 T* @( E. c
}
: }0 G2 l6 w2 N5 C$ r' n2 _ ; c) O( T6 Z( v7 y6 h+ u1 L5 D" u
syncUpdateOrder ();. ~- ]4 o' y5 {9 y* M8 q
6 y( Y8 P& Y2 Y8 d. `( J
try {
' _) T# q2 Q$ u; `& \ modelActions.createActionTo$message
1 `" E. f; }0 W9 \- G% l* [; @ (heat, new Selector (heat.getClass (), "updateLattice", false));
/ {) P6 z- J8 o! ~' {9 r7 w& x' [ } catch (Exception e) {6 c* V+ f5 W% i
System.err.println("Exception updateLattice: " + e.getMessage ());( z# d# ?8 x' x- X
}
5 O$ o9 x% v. F* m. u/ B
% t) E. I, ] i5 J3 \4 L; C" @! s // Then we create a schedule that executes the" ]$ ^5 t6 g0 O. Y. N* j
// modelActions. modelActions is an ActionGroup, by itself it
4 n/ \5 q, ^# E9 y0 P9 L; \ // has no notion of time. In order to have it executed in
, _# P: R+ u- t1 G. h% j7 D' k // time, we create a Schedule that says to use the
. t* M# s: V& p$ u // modelActions ActionGroup at particular times. This. z/ a) Z' Z6 F* R7 g/ V& l
// schedule has a repeat interval of 1, it will loop every
9 t8 u& ?: G2 C7 E& P m% k( |( u4 i! Y // time step. The action is executed at time 0 relative to3 X/ A) d5 `% o) \. u2 D
// the beginning of the loop.& c+ l, m2 P9 l+ j. d8 {4 O% u
- P4 P+ M3 m) t" } // This is a simple schedule, with only one action that is
; S* c& P& Y5 E3 h. m7 @ // just repeated every time. See jmousetrap for more) R, |; J; H; c: U0 z
// complicated schedules.
% F1 O& j/ m. u8 F6 \9 ^ & H* \( c" Q, N) c# B
modelSchedule = new ScheduleImpl (getZone (), 1);8 V w9 d7 V) s' r$ p# f
modelSchedule.at$createAction (0, modelActions);
9 x; | w" x% m% z
! u% N G. l! Z2 N2 w7 {3 ?9 z0 K% l. t return this;+ \+ x: E' P) g$ D+ R) h1 W
} |