HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 x8 b9 b9 ^3 c& Z+ f) M8 l4 ?% P1 a. v! h1 X
public Object buildActions () {
/ U0 X5 j" f* o+ n1 H super.buildActions();7 `% X- S% P0 l; k
" Y1 ^7 \5 f$ r% }5 Q, b // Create the list of simulation actions. We put these in/ U' v/ a9 M* M- X: h! h
// an action group, because we want these actions to be
# H9 x) w- k! q6 D // executed in a specific order, but these steps should/ t3 A7 V' V% D; }1 h: J
// take no (simulated) time. The M(foo) means "The message
- m, e( ], I2 b \: a1 A/ m // called <foo>". You can send a message To a particular# i" G* h8 F& Y1 E2 w4 U1 L5 U3 u
// object, or ForEach object in a collection.
7 `3 }7 u' \" Z9 T& i 5 S3 N0 x# W" B: \6 i5 m5 y
// Note we update the heatspace in two phases: first run! T0 |0 D& J: q5 Y. ]
// diffusion, then run "updateWorld" to actually enact the
3 g2 \/ X/ `6 o // changes the heatbugs have made. The ordering here is
8 C2 v" I3 O0 T( g0 m7 A& }. d // significant!! N. ?/ G$ A; v+ p; }! w& S' d4 w
3 w8 u7 t/ a7 X2 R6 t7 y1 V // Note also, that with the additional! z- u9 p- A3 ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 Q% @5 u* I. v% j // randomize the order in which the bugs actually run l9 c" V; W! H: X1 U
// their step rule. This has the effect of removing any
, |* v( K1 `# _+ y, A // systematic bias in the iteration throught the heatbug
/ v+ H( X0 ^) Q5 E6 i3 [ // list from timestep to timestep6 o1 o! X* ~ x
8 p g2 v6 V2 A7 P& P' @1 Z
// By default, all `createActionForEach' modelActions have. N: Y/ X0 g8 z5 K+ {9 z! v
// a default order of `Sequential', which means that the
5 v6 B5 Q% y6 N // order of iteration through the `heatbugList' will be
7 D! c+ x9 ? s/ Y8 K // identical (assuming the list order is not changed
! y/ W& n1 y7 R( r2 p // indirectly by some other process).
# `. u* D- t" g: F7 [
; \0 U7 J+ r1 g% _; { modelActions = new ActionGroupImpl (getZone ());* H A6 H9 l7 j' S! }3 @3 I' j/ Z! w
# T2 F2 G! w$ f9 A+ j0 K try {
" a! d/ ]3 l9 P modelActions.createActionTo$message
% v9 i! b9 u$ } q' M2 p (heat, new Selector (heat.getClass (), "stepRule", false));0 p3 \+ I1 L) u, z
} catch (Exception e) {
, S- T6 Y& z$ ~& n$ W5 n System.err.println ("Exception stepRule: " + e.getMessage ());$ s6 K0 Q1 S0 L7 Z4 g# N* S
}, n/ O+ E7 X4 L
' l+ o0 T0 L+ d, y
try {8 J q" t) }( {# G: i' r. q
Heatbug proto = (Heatbug) heatbugList.get (0);
. z7 w& i, A/ V# } Selector sel = ; Y+ J( A) {, d7 o
new Selector (proto.getClass (), "heatbugStep", false);
* o% h& ^% ]% M9 O actionForEach =7 u/ }$ ]. ]: k8 H- x( O4 u, u
modelActions.createFActionForEachHomogeneous$call! p; j' E) y, P, L
(heatbugList,
' _2 J- n1 Q" L2 D; T8 E new FCallImpl (this, proto, sel,# {/ j7 x0 l& u% P, z: I& v& [
new FArgumentsImpl (this, sel)));
8 K. P9 y8 D4 s( S } catch (Exception e) {
' r" \# F3 k* ^) l! p: j0 g m+ _ e.printStackTrace (System.err);% e! G. c: h1 s5 F+ }2 y1 p9 I
}) [+ |3 c0 @4 [5 }4 _
+ R1 j9 {5 w; o
syncUpdateOrder ();3 c- x- I& s" [& B6 N
9 n3 \# r* S {5 @& s try {
4 A0 I* g4 B8 N# A' L' r. p modelActions.createActionTo$message
: r1 Q5 C" H% a; w- [- x2 Q) J (heat, new Selector (heat.getClass (), "updateLattice", false)); k. w) Z/ ?' z4 m* g$ [& a. v% ]
} catch (Exception e) {
; f6 B P1 j% z. } System.err.println("Exception updateLattice: " + e.getMessage ());2 `, h& |; p( o
}
) {8 l- I6 h* X: M( J3 E: ^, P( X0 q
$ r; Y# w- i% `1 ^3 D4 t // Then we create a schedule that executes the
) P( L7 H. b) m' l // modelActions. modelActions is an ActionGroup, by itself it
9 R, B7 D# B3 f" b' E1 d // has no notion of time. In order to have it executed in
$ |% F" d, G+ v5 Z7 i8 v% P // time, we create a Schedule that says to use the
' r7 o* e7 Q' x2 c/ C' \0 R7 k // modelActions ActionGroup at particular times. This
5 X+ e- t8 G( s+ }% o. ? // schedule has a repeat interval of 1, it will loop every
( r3 J7 @3 }. S! ^/ E/ V // time step. The action is executed at time 0 relative to4 G5 m [2 t' D9 c
// the beginning of the loop.2 Y6 i( Y7 X4 L3 |$ _- M+ u$ g# m( z
. M# i8 k! |$ `9 F% Q6 _
// This is a simple schedule, with only one action that is
: G0 c$ x& Q% ] // just repeated every time. See jmousetrap for more* C8 R. J6 b8 q# v
// complicated schedules.
' r& z6 X, b' U ' o6 ^" e$ x( t# P# _8 Q0 x
modelSchedule = new ScheduleImpl (getZone (), 1); S7 K, e2 D8 O7 h) J
modelSchedule.at$createAction (0, modelActions);
. b4 f# ?7 f$ w2 C8 P * @& ]. b- ] G; c( f
return this;9 z. s5 Q7 U; a' |
} |