HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- l J! H5 p8 w/ Q. w! X( ]
% v! y0 }$ N) F& d% l
public Object buildActions () {1 I3 A3 }$ z$ j4 |; C
super.buildActions();
: E( J! F I. \+ d- E
0 G7 J( B1 X4 r // Create the list of simulation actions. We put these in+ }7 K% }& o: \/ |1 g
// an action group, because we want these actions to be
" f) ~$ r+ N$ i, w! {8 k E& F7 j) | // executed in a specific order, but these steps should# A# }, E* v' ]6 y& t- _
// take no (simulated) time. The M(foo) means "The message8 H2 b2 {5 Q: \) M
// called <foo>". You can send a message To a particular
2 c0 O( c( A- R- J4 A // object, or ForEach object in a collection.+ f( \& R. C, z
1 w E! u# A7 W9 y // Note we update the heatspace in two phases: first run
h' S6 d/ q/ m [) ^5 C3 V5 R" @ // diffusion, then run "updateWorld" to actually enact the! Q l% y2 b7 b: q/ p* i. p
// changes the heatbugs have made. The ordering here is
" A$ W5 u, l* h3 m& c5 n' a // significant!3 {4 X$ Q4 @( [" Q
Q% J: y8 q- s: a6 |% Q' p // Note also, that with the additional# v2 |! F+ I% @2 g
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# f1 U7 }0 K2 [% F& { // randomize the order in which the bugs actually run
% c+ r6 r6 ]9 F# [9 k [ // their step rule. This has the effect of removing any1 L, i7 o1 U( A9 ]
// systematic bias in the iteration throught the heatbug) P# \' ?/ A) ]4 U7 i6 v9 j( j
// list from timestep to timestep
( j+ Y# J Z1 Y3 r; c I" { 7 l: s4 V8 Q4 W9 i) ]
// By default, all `createActionForEach' modelActions have
1 P3 W3 i# M& P1 t/ S& Q+ j9 [ // a default order of `Sequential', which means that the
. Y3 ]5 ~+ f' [1 m+ ~$ ]/ e // order of iteration through the `heatbugList' will be ?3 V' b+ H/ d' l$ N2 [+ K# w# @
// identical (assuming the list order is not changed2 l. z% A; p% ?4 B
// indirectly by some other process).' @& l5 n6 o3 ?6 Q3 C6 b( n
. X) ?0 B/ V8 s) a7 G/ z
modelActions = new ActionGroupImpl (getZone ());
7 G( Z, x, t( ^" Q7 u% T9 ?; \; k+ w/ g9 M- j$ `7 @& j
try {+ |# I; t' ~: m1 _' J. x8 `
modelActions.createActionTo$message
9 ~* K& A+ D/ r4 H2 | (heat, new Selector (heat.getClass (), "stepRule", false));
. p- x, f8 W2 F0 v7 w } catch (Exception e) {& q7 W. l; v- A( V! \
System.err.println ("Exception stepRule: " + e.getMessage ());
n9 i8 f, y- V& f" i }
g c9 r) p! n3 N) r# I; C- D q1 j, g3 U" {) z
try {6 f$ m0 _6 `; w: E; l$ w
Heatbug proto = (Heatbug) heatbugList.get (0);; ~) |! b% c: X7 `6 C8 D$ p, e
Selector sel =
; j' @' T& p: f I' W6 S6 L new Selector (proto.getClass (), "heatbugStep", false);2 H3 c6 t. \; _+ V2 L" T7 m
actionForEach =* i3 j& W. }' L9 G7 e" S
modelActions.createFActionForEachHomogeneous$call
; {( i# {+ a' R9 c, O9 p" x9 ]2 g (heatbugList,+ I2 z) @/ z A0 V" [
new FCallImpl (this, proto, sel,
4 E m! D, K5 \9 t. P: L' [ new FArgumentsImpl (this, sel)));
. k- c& }( L' G; Q" T2 Y& W! f; f } catch (Exception e) {3 t* D" u& y4 y
e.printStackTrace (System.err);+ ^+ _- Q% j9 H' C
}
* `% ~: Z) h" y, l* l0 ^ j ! ^* f( t5 f* ?
syncUpdateOrder ();" l$ o: X% r7 D6 |7 K8 `/ @( _
! I6 T' k7 n" J+ {$ ~( ]. l try {- R3 d, Z0 k2 x4 y
modelActions.createActionTo$message
% z& K2 v# |# ?0 {+ w! o (heat, new Selector (heat.getClass (), "updateLattice", false));# l$ d& ~0 `( d3 C
} catch (Exception e) {
$ f5 I$ H* k; C% T& y, A6 ` System.err.println("Exception updateLattice: " + e.getMessage ());6 b: b, P: `1 \5 F
}- @1 e: w9 {0 M! o. W6 }: N, l+ a# Q* s
9 _1 ?7 d2 Y* j& I( A
// Then we create a schedule that executes the
4 J7 x3 A- r1 J' ~4 e // modelActions. modelActions is an ActionGroup, by itself it, e. z# A3 w; Z+ h
// has no notion of time. In order to have it executed in+ Q, H/ r8 w1 ^# N' Y4 _! ]
// time, we create a Schedule that says to use the
, r/ |* k5 V$ X1 z$ T( n% }) ` // modelActions ActionGroup at particular times. This( E( o: u8 @0 h# {1 ^6 H* h
// schedule has a repeat interval of 1, it will loop every
; }" F6 K& x, w \ // time step. The action is executed at time 0 relative to
; q- D6 r) A& P9 f // the beginning of the loop.
% Q4 T5 a; y( I0 K2 c* Y
% ^- z( K1 ~: h5 g // This is a simple schedule, with only one action that is
8 a D. p! o4 z3 X- [ // just repeated every time. See jmousetrap for more
3 L9 p- k, j% z5 J) O" F! o // complicated schedules.* U& z, K9 u1 g- v
% z/ @8 s- n9 i( R: v' J
modelSchedule = new ScheduleImpl (getZone (), 1);" H" ^8 N, C/ o( c w8 N% M. L& ~
modelSchedule.at$createAction (0, modelActions);0 K/ [& f. i) Q. @4 ?" D
0 M, @) a) M! n- ]: g5 v return this;, h8 c& a6 j5 c1 A& u3 V
} |