HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 v8 `8 r& h( p* f4 k$ Y
! v4 d! J @+ o4 ?$ E4 P* P/ A
public Object buildActions () {. J' }/ f7 H$ ^: p% ~- C
super.buildActions();& H$ S! D+ m- W0 x3 E0 G
: C" M/ C- k' g2 B9 A // Create the list of simulation actions. We put these in
2 g4 p1 r* W$ T; f$ B // an action group, because we want these actions to be
$ q6 E; r% A3 I$ C* d // executed in a specific order, but these steps should- {" w, h5 T: I3 z" v
// take no (simulated) time. The M(foo) means "The message: W% W0 @: ^$ ?" G+ g& y
// called <foo>". You can send a message To a particular
! @- i; ?1 C- [2 j2 U // object, or ForEach object in a collection.
. y2 O$ \7 {% J7 a1 {3 d! L * u8 A% J' X7 s8 u
// Note we update the heatspace in two phases: first run
3 ^4 m$ m! q6 k I* c2 H0 c // diffusion, then run "updateWorld" to actually enact the# }4 W) l# k& G4 C
// changes the heatbugs have made. The ordering here is4 U: }3 H N& } ~: ?* Q
// significant!
" n) [: z+ d0 t' p3 |3 H6 R
( Q, j# a# t4 ]4 [: S; _ // Note also, that with the additional' D/ H9 N9 Q) b: K2 X! r$ b# V
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; A5 S8 S8 Y8 N/ e: u6 O // randomize the order in which the bugs actually run. k" i5 y0 h. i
// their step rule. This has the effect of removing any
4 \$ z3 N8 C, c/ d0 U // systematic bias in the iteration throught the heatbug
5 H. H/ t; g2 p6 u/ f // list from timestep to timestep
7 b# [+ g+ B. T( u- ?& y $ A: l, u& L* c# _, N; K
// By default, all `createActionForEach' modelActions have) s% f0 _- [# \5 u, O
// a default order of `Sequential', which means that the
8 x! ]4 |0 ?0 y) a$ l // order of iteration through the `heatbugList' will be4 z2 a7 k) y: v1 l2 N4 D! R5 w: F0 z
// identical (assuming the list order is not changed4 D N* x% s' ~
// indirectly by some other process).
& @% i+ o; W6 S$ G% M+ ~1 L: Y * R+ I* v5 j+ `
modelActions = new ActionGroupImpl (getZone ());, p4 u" I) @+ Q& z0 d
$ r+ u# _% f) E try {0 @! W3 y# F+ m" o1 b5 s
modelActions.createActionTo$message
% a$ l. E: F2 N (heat, new Selector (heat.getClass (), "stepRule", false));( n. x8 |( e9 M. ?0 A
} catch (Exception e) {
. h) i( B1 C6 c System.err.println ("Exception stepRule: " + e.getMessage ());$ ~( q2 B# ]4 D! E- E
}
6 F Z, K. ]8 O( N" C5 `4 w; y( H0 E5 H; w1 ^9 {5 Q
try {* g& t- a0 y2 o) H$ N) D
Heatbug proto = (Heatbug) heatbugList.get (0);9 S& T; L o( w$ c4 P9 n
Selector sel = % l& r- ^3 B, D- A& T4 @! K4 k
new Selector (proto.getClass (), "heatbugStep", false);* }- P$ P0 A. ], F8 V8 Y8 {0 J' u
actionForEach =2 r9 |8 Q L& M9 S, t# e/ ^
modelActions.createFActionForEachHomogeneous$call
8 S9 t0 E2 w3 C7 a0 l2 q. C3 D! d p6 h' Y (heatbugList,
0 T0 P: u) ~9 a, k; q; | new FCallImpl (this, proto, sel,$ s$ \; H/ f# I8 r. q) E
new FArgumentsImpl (this, sel)));
. D7 [2 X( e' [/ |. o; d3 y2 S } catch (Exception e) {
`0 g5 x8 V0 ]. Y. f, t e.printStackTrace (System.err);
- G. j5 r6 a9 Q- f }
2 k$ ~+ q7 J# A
3 ^! `! L) A% x syncUpdateOrder ();0 Y |4 p& U. y- H3 _5 R# [
/ G; V+ h w8 H/ u; ] try {* [( L% |: u0 L
modelActions.createActionTo$message
- R1 K* i/ |( @: f+ _5 L (heat, new Selector (heat.getClass (), "updateLattice", false));1 z( u7 Y8 |5 Y9 T! N- R" R
} catch (Exception e) {* m/ B2 P' _. {3 Q" X
System.err.println("Exception updateLattice: " + e.getMessage ());4 g! d/ `5 \5 r( G0 }+ P
}
' M5 K2 H/ K0 U; w ) t1 V" W$ n. w. _/ l0 L
// Then we create a schedule that executes the! R1 h: n5 d/ D/ z$ r6 b8 v
// modelActions. modelActions is an ActionGroup, by itself it1 z. [9 C# B* T& H- u* P
// has no notion of time. In order to have it executed in
4 c9 f# h( [% D2 w // time, we create a Schedule that says to use the% \7 N( @* M! k* V. H
// modelActions ActionGroup at particular times. This
7 E! V5 m! C+ Z7 ~ // schedule has a repeat interval of 1, it will loop every
+ y5 L5 r0 r9 i* \$ O* \) G; a // time step. The action is executed at time 0 relative to3 O0 Y6 a6 J2 X6 D% P7 K; @7 t5 n
// the beginning of the loop.! s. s* a' U. _/ g4 [
& C5 ?; s7 F# p; ~ // This is a simple schedule, with only one action that is. p$ [" U; s; s# L# ~% ~
// just repeated every time. See jmousetrap for more
. `2 b" j6 F2 Z; \ U: U" u // complicated schedules.
: W/ u: y( C( {% l, t " s; L" I% K5 L7 g' K
modelSchedule = new ScheduleImpl (getZone (), 1);
7 w% R& C3 k( ~. v9 M( H7 ` modelSchedule.at$createAction (0, modelActions);
% u* `7 {6 e5 x 7 b, _7 ]: S- |
return this;
+ N. W" X, G0 e! m3 b* c- l7 v } |