HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: x7 e9 M$ f% d' ~, {! }
( t$ I) M- `8 m9 ]# \( t
public Object buildActions () {
4 u& x1 v( A* }! B7 [' x, q super.buildActions();
8 ?5 o& l6 I5 B' P2 \1 L
& ~- b$ ^. i* v) g! u" _) b; Z // Create the list of simulation actions. We put these in
1 O# T' r, H4 b9 {* M& q! d! e$ M // an action group, because we want these actions to be8 K6 m) l! n7 d2 @; E4 M1 i% d
// executed in a specific order, but these steps should0 r% |" {3 ~+ b( u
// take no (simulated) time. The M(foo) means "The message
( n8 R @+ ^8 {- h0 Z0 M* {( M9 v5 c // called <foo>". You can send a message To a particular# t( Q, |9 a% G# y( h% E; ?8 s
// object, or ForEach object in a collection.& e) X4 g+ L# n3 A2 l0 a
$ ^; }: y! |& G3 S& D: S7 D4 L // Note we update the heatspace in two phases: first run
1 @. w8 n. }$ U- T" a7 n( ~ // diffusion, then run "updateWorld" to actually enact the
$ P+ U, E$ e. }# ]! V // changes the heatbugs have made. The ordering here is9 F2 F! _9 C1 g( v1 W
// significant!
0 s- r0 m, L- d. o
u' @& @5 e7 X% K // Note also, that with the additional9 l% }* Y6 g. H+ G T0 @
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 Y0 ?+ c$ s8 p0 @4 r: H // randomize the order in which the bugs actually run% \6 Z7 F) P) {; d
// their step rule. This has the effect of removing any
* ]4 h5 h% [8 n2 g; g // systematic bias in the iteration throught the heatbug
7 i3 C; B/ g+ l R // list from timestep to timestep% o% x2 s& m9 O0 a8 J
! b R! D7 G8 f" H // By default, all `createActionForEach' modelActions have
. \: r) {8 ?. n; K/ Z, ~ // a default order of `Sequential', which means that the
% e# F& q5 C5 l& V% U% t+ F // order of iteration through the `heatbugList' will be
# L4 R& v& ^1 l/ s& Y, n8 @6 H9 ^ // identical (assuming the list order is not changed/ ~% E8 i( D* ?1 X0 w
// indirectly by some other process)./ U l! ]3 [/ E% a1 s
8 h$ x9 W1 @1 O v5 u- y4 [- J modelActions = new ActionGroupImpl (getZone ());- [1 G% u( d# `( g
2 J5 z2 V- y1 i0 j6 X6 {1 g# c try {
9 R7 C! r' E' _ modelActions.createActionTo$message) U. o; n! r* z' T3 T
(heat, new Selector (heat.getClass (), "stepRule", false));
! [. H; b5 ^- s( A } catch (Exception e) {
2 m% R1 @3 f' q3 u1 S System.err.println ("Exception stepRule: " + e.getMessage ());0 I6 |! u& }. N% M8 h$ u. ]& c
}+ k: j/ H; \( W$ S/ ~ b. ]8 o) ?( c
5 ?/ i5 J+ S2 q6 \3 Q
try {! ]" ^* n8 } g) s& h+ Q, X4 K
Heatbug proto = (Heatbug) heatbugList.get (0);
. C' x* w9 l8 k. M# Z Selector sel =
% \4 |$ b5 \( ]9 l, t9 G new Selector (proto.getClass (), "heatbugStep", false);
7 R( w( V0 i* Y/ {( k5 Q) [ actionForEach =
$ ?3 k' V) R7 k1 n modelActions.createFActionForEachHomogeneous$call% W/ ~$ n. b2 T8 E: @4 c
(heatbugList,! h% u% q2 A& R) M
new FCallImpl (this, proto, sel,
) F, X0 r9 ~2 x( z/ ]+ Q new FArgumentsImpl (this, sel)));
) o4 a/ `+ }; e& C8 ^8 k } catch (Exception e) {
: }+ ~8 ]7 e* f$ {2 h e.printStackTrace (System.err);
5 z( e( A: T- W; I }
' X9 z7 J; a" a
$ u+ `0 {0 j/ I5 ^5 q+ O6 s5 @ syncUpdateOrder ();
1 G4 L& z$ n# t6 e/ m& g
2 D5 g5 C( l4 N# Y/ D try {
% A* q/ H8 A# ~* O modelActions.createActionTo$message
8 H9 [9 J% A4 o7 o( r (heat, new Selector (heat.getClass (), "updateLattice", false));
+ i+ J( }# w4 D! r } catch (Exception e) {
) K4 G7 c5 Z+ U System.err.println("Exception updateLattice: " + e.getMessage ());$ g9 C5 A1 ~4 _) b+ B$ y* q
}1 h$ l; q9 h) J( @# g2 Z, B" K8 a
3 v3 G* ]$ ~6 F I- O( H1 p // Then we create a schedule that executes the, G5 h0 l; v6 F: Z- i
// modelActions. modelActions is an ActionGroup, by itself it' o- L r4 A' s: ]/ l" }/ X
// has no notion of time. In order to have it executed in
0 A: ^" I6 K! @) F // time, we create a Schedule that says to use the
+ K/ a8 ~9 Q6 m! R // modelActions ActionGroup at particular times. This
& g' A6 U3 H* n' b S7 z // schedule has a repeat interval of 1, it will loop every2 O5 q3 K5 W+ d! h4 U1 K
// time step. The action is executed at time 0 relative to
( i! E8 ?1 g1 u O4 V# o6 | // the beginning of the loop.
) {* f5 ]% _, S( L5 e a* \& M
// This is a simple schedule, with only one action that is
# o8 o" A u1 D2 v, O! z // just repeated every time. See jmousetrap for more' T7 c% d- ^2 ]/ \
// complicated schedules.
6 w( W, Y0 Q1 p& t % q& p8 O+ o- J) A
modelSchedule = new ScheduleImpl (getZone (), 1);' l5 _3 B; x$ C! {, ` `
modelSchedule.at$createAction (0, modelActions);% q. d* c7 W) w) u
$ O3 _3 L# }* f4 v* n! W return this;, h! i- d7 O) U( N# `( t
} |