HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 s! ?1 U7 m- L4 o. J' \
9 D* q2 O/ l& `: B
public Object buildActions () {3 @- e7 b& X( h9 `/ L4 ^' X' `( ?
super.buildActions();7 _) U/ q* H5 k3 P& [8 X
6 i5 o- c, O3 h: S- y8 g- [/ ?, U" w. b
// Create the list of simulation actions. We put these in
7 A' r; W- R4 W, ]: X2 ~/ p! K // an action group, because we want these actions to be# d; E, w( v) f8 w5 k4 e: _) L
// executed in a specific order, but these steps should
7 ~: a" T+ K& l. f; \# d; ?5 m$ D7 X6 O // take no (simulated) time. The M(foo) means "The message
7 G' O# f2 b. |% G9 I // called <foo>". You can send a message To a particular
8 } o% s; h% V+ w$ ? // object, or ForEach object in a collection.+ S' `. C6 g2 g [! Z
7 {7 i8 _8 O2 W1 x) [8 P* ?! i
// Note we update the heatspace in two phases: first run
3 i9 F. c$ v2 b, b2 b3 g6 P // diffusion, then run "updateWorld" to actually enact the
" w, Z/ g% Z" l& }4 C // changes the heatbugs have made. The ordering here is' j, K2 P9 X8 e6 {' |. k
// significant!
0 d* r0 q# {4 C4 w S
/ o' _ A6 `" F6 O& | b2 [ // Note also, that with the additional) S8 f F9 P0 G; n2 v5 z( k
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, h# ~% o$ U C // randomize the order in which the bugs actually run4 [6 w9 [5 ? V
// their step rule. This has the effect of removing any7 W- f( k5 p* t7 _; T( h
// systematic bias in the iteration throught the heatbug
# z! ^; }8 V% U- t: G1 a Y // list from timestep to timestep
7 r5 x2 V9 m6 {$ A & h+ Z* X0 ] {( }+ [8 R8 l
// By default, all `createActionForEach' modelActions have( L) k6 g; U0 R/ ?5 O2 A
// a default order of `Sequential', which means that the
: i2 r6 ?& P! t; H. @ p // order of iteration through the `heatbugList' will be
" {+ }; ^8 x" f3 Y$ D6 J! D // identical (assuming the list order is not changed
, s9 j3 k+ M7 s; a/ J Y // indirectly by some other process).+ W* J% R& ?2 t
! M! [( d7 C, ?: n modelActions = new ActionGroupImpl (getZone ());
& ]% J. k; R. ^0 `" F) E9 T; r0 z/ e0 P6 B/ ?; V
try {5 Z( y5 Z' s- `* Q7 R
modelActions.createActionTo$message4 [5 a8 ~/ X/ I5 n+ F9 S
(heat, new Selector (heat.getClass (), "stepRule", false));
: L5 p' R) A6 W5 h, a5 n* K1 h } catch (Exception e) {
; Y; c* {' r( {* F# {5 W, t System.err.println ("Exception stepRule: " + e.getMessage ());' V4 J1 o/ x3 Y) A$ z w$ l* x
}- b/ T0 F @: w' ` v- s
2 `# ^9 }% t/ z2 P" ]3 c% d) y) ]* M
try {# M- u' f Z- h) L$ o5 Z( I5 c1 R: J
Heatbug proto = (Heatbug) heatbugList.get (0);- u0 W) T& ?$ ~
Selector sel = " o* o% \" M) o, C
new Selector (proto.getClass (), "heatbugStep", false);
- Z7 X3 _& X) B. I7 L* M+ O actionForEach =
) Q* D% Y) J5 H2 O6 ^* T. ? modelActions.createFActionForEachHomogeneous$call
e+ f, b' c5 P# v (heatbugList,
. d2 c% o8 G5 b s new FCallImpl (this, proto, sel,4 Z' ~$ ^2 r& P4 d4 g# F
new FArgumentsImpl (this, sel)));
# L$ ?: ]0 ?" E% Y: ~7 y* | } catch (Exception e) {6 ^- _" m% d/ }! s
e.printStackTrace (System.err);- r7 G! B: r1 x" G
}; D: Z7 _3 }2 k+ Q, ^$ l8 G
0 o3 t! q, |6 ^/ r2 s) z syncUpdateOrder ();# o: [& q, j. H/ t$ V
5 Q7 K2 G8 [& L2 J try {
3 o! r$ m$ S- Q/ V# B modelActions.createActionTo$message
) ^; |; o6 U9 y$ c, p0 r (heat, new Selector (heat.getClass (), "updateLattice", false));
" I+ Y0 l9 A0 d* H8 L } catch (Exception e) {
1 o6 _/ X( P1 k- n" E System.err.println("Exception updateLattice: " + e.getMessage ());
9 ~5 A! U: M: c! ` }
7 h0 |$ V4 u" V7 ^) `
! }* j' I$ I) z I5 z8 z // Then we create a schedule that executes the
9 O) c) y9 ~& k0 J% w // modelActions. modelActions is an ActionGroup, by itself it
5 x2 P3 z- X3 z, [1 l // has no notion of time. In order to have it executed in
& \5 C# D- T6 N# R // time, we create a Schedule that says to use the
$ O: |" |$ i% I3 ^+ X% O* s( a // modelActions ActionGroup at particular times. This
1 U p5 k% R5 W I. u // schedule has a repeat interval of 1, it will loop every
" M/ `8 {. ?0 n, H7 Q // time step. The action is executed at time 0 relative to
' L& ^6 a& Q( s9 n2 d2 U- \ // the beginning of the loop.& `' X* y5 ?: {
$ p; C1 c8 E# E! }. _6 h // This is a simple schedule, with only one action that is
w% [7 ~# \& D2 r/ @' _ // just repeated every time. See jmousetrap for more
B T) h+ N) B6 ^# E // complicated schedules.
; I, d. p8 a3 h* `3 w
$ G* N" e+ F/ b! I modelSchedule = new ScheduleImpl (getZone (), 1);: V7 E" G! I& M. R0 a
modelSchedule.at$createAction (0, modelActions);
3 A0 i) m$ @0 E; t# q8 \ / n2 O* n/ l o' [4 {
return this;+ `. U; F* X" u4 }0 l# u9 g" F
} |