HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 R# R; k/ g* v' ^5 a
, I/ m. ]" A1 n: | public Object buildActions () {
; r8 q; [) d" q5 g- c8 d3 a; o. j super.buildActions();
! J& i: k Q1 {
& S9 f _0 `3 @3 y // Create the list of simulation actions. We put these in
* e: }4 K0 G8 G; x, s( g. N // an action group, because we want these actions to be
' a' p8 l6 e9 p) ]5 d // executed in a specific order, but these steps should2 c! }: d+ a5 q# X" S G1 r2 S6 r
// take no (simulated) time. The M(foo) means "The message
3 z. d3 P5 B6 W4 { // called <foo>". You can send a message To a particular
+ T( }! f+ K4 k, ~. z5 w // object, or ForEach object in a collection.7 w8 H; u# o4 l" n6 u
" O- q/ ?) {- E" b. o& m$ P" S // Note we update the heatspace in two phases: first run
& F. F( m& X8 V // diffusion, then run "updateWorld" to actually enact the! R5 f2 b: A% f
// changes the heatbugs have made. The ordering here is: q6 e+ Y4 [2 y! S# x
// significant!0 l. E2 m7 M* d8 ?* q6 R
! `- F9 m6 P5 z( t1 Z // Note also, that with the additional
$ s3 y/ n" w+ U) j, j: t // `randomizeHeatbugUpdateOrder' Boolean flag we can# v K6 V- b% v7 p& T. ]
// randomize the order in which the bugs actually run
" ?; T9 w& m: C // their step rule. This has the effect of removing any2 T& z3 v* Y0 o8 f
// systematic bias in the iteration throught the heatbug
# E- P7 x3 O+ H9 t/ p& Q // list from timestep to timestep
8 Z" |: S) C8 ?5 Y: b r 9 V0 j5 ~* w# m( C' b9 H9 A& _
// By default, all `createActionForEach' modelActions have
; l- T% N4 x: M$ D9 J" @8 d // a default order of `Sequential', which means that the3 U R& |* S$ [4 N; l2 C
// order of iteration through the `heatbugList' will be
* i( H+ _) x# j9 q // identical (assuming the list order is not changed
9 F, q0 T( g$ |; I8 o // indirectly by some other process).3 M4 C0 q, {5 g! V
! p! G! b. M0 f# t: q) C3 N
modelActions = new ActionGroupImpl (getZone ());
F. \7 G: f' H/ M9 e0 m" ~; ]
0 @% A+ I6 i0 z" b; n try {0 G2 [) @( o; n
modelActions.createActionTo$message
9 _0 R7 u( c! X) | (heat, new Selector (heat.getClass (), "stepRule", false));5 W* D& [7 Z7 |" Y. L- _, P$ l( Z6 X5 g( _
} catch (Exception e) {
5 A2 s) S8 R' u# o System.err.println ("Exception stepRule: " + e.getMessage ());- [. \$ M8 G' x* \
}0 ^: H3 [* d. v
$ R/ Y% U% M8 G! C8 Z; s- Y7 y
try {
5 E j0 a. s* S6 o; e9 {! [ Heatbug proto = (Heatbug) heatbugList.get (0);
* z5 `+ R/ b/ j7 A: g( A2 n Selector sel =
! i/ { @+ D9 |/ ? new Selector (proto.getClass (), "heatbugStep", false);% H6 d& g8 e8 U& K
actionForEach =- z X2 T% ?4 k4 w9 ] y
modelActions.createFActionForEachHomogeneous$call
: f9 U) h. B$ j8 x' w# x (heatbugList,% P2 J7 \# Z1 h! q9 z* {7 L# ~
new FCallImpl (this, proto, sel,/ B7 I$ G+ k, P F* t
new FArgumentsImpl (this, sel)));! N2 c# C. v: l
} catch (Exception e) {
5 p2 L+ W( [8 |$ G! f4 h$ J* y' b0 X e.printStackTrace (System.err);7 K: N/ \% z3 \
}
2 q: j7 `" V. ]& @: q+ I1 e6 n; {/ C; x
( ?( ~( s* U& ?: x2 [4 n! l& v; h7 R" r# P syncUpdateOrder ();8 @4 o' z1 u, h5 A0 l, T; B
* f. E& `* P+ v7 m4 b, m try {
2 ]2 I% I* ^8 q7 }- ? modelActions.createActionTo$message . B8 O0 Z6 i. f' ^
(heat, new Selector (heat.getClass (), "updateLattice", false));
- p! g! V8 S5 z/ q- W" i } catch (Exception e) {
, h0 Z2 T. s' [( Y; _ I System.err.println("Exception updateLattice: " + e.getMessage ());2 C2 u5 `6 \6 R! F8 b" }: q) Y
}& _2 O8 O* K+ |; f6 x
* E. ?1 `/ q. W1 }5 g* F
// Then we create a schedule that executes the. H B$ u. H3 C
// modelActions. modelActions is an ActionGroup, by itself it! j% ~. @8 G" E5 {& s! s- K
// has no notion of time. In order to have it executed in
) e1 X0 O6 P8 u! d // time, we create a Schedule that says to use the1 n- R7 [' f- j [2 l' Z; J
// modelActions ActionGroup at particular times. This4 K# k" O9 Z3 Z- {. y: m" t
// schedule has a repeat interval of 1, it will loop every
3 ^* P7 E0 a3 Y- h3 F. ~$ D // time step. The action is executed at time 0 relative to; l' x0 R7 V) I& V3 i
// the beginning of the loop.
; [# G1 L. P5 R% A7 L1 y$ `) J" z- J4 u& M
// This is a simple schedule, with only one action that is
5 j/ D( J1 O/ Z0 R. {* { // just repeated every time. See jmousetrap for more7 r( i( i& S+ o2 Z
// complicated schedules.# V3 i( S# [( Q9 O1 i& l5 Y5 w
- I; D; Q0 F# S0 F; w
modelSchedule = new ScheduleImpl (getZone (), 1);
# w4 M- s7 |6 B: g8 I% ] modelSchedule.at$createAction (0, modelActions);1 V/ s/ A4 A) I. L: C [# c
) N# A- E9 `5 r; b @9 `/ |6 i
return this;! t% i$ W* ~ @8 H6 a3 j
} |