HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:2 U" e0 _0 c6 k. ?0 }7 p* K# t( q; Y
! O% w2 C. z! P& ~ T
public Object buildActions () {% ]& N: p+ c2 ]7 v: s2 R
super.buildActions();
/ c+ c, S5 V- @! ?; W
7 P6 V4 K- K6 V // Create the list of simulation actions. We put these in4 C" o6 y/ b( W1 o& g
// an action group, because we want these actions to be+ o0 s V$ h a, Y( l
// executed in a specific order, but these steps should
! h- _% t; d9 i" L6 D L // take no (simulated) time. The M(foo) means "The message
4 {* I8 Q1 w- r) g6 W2 ^& J // called <foo>". You can send a message To a particular, |, S [) f. A3 F' c2 d4 r
// object, or ForEach object in a collection.8 l/ y. G6 U% T( A3 T4 d" O
+ ~# R' |' d/ l! o- |. j
// Note we update the heatspace in two phases: first run
! e9 Q, F4 G' H# Y, J$ k // diffusion, then run "updateWorld" to actually enact the. Y% y9 ~" V( @+ q6 N( ]1 q
// changes the heatbugs have made. The ordering here is. q/ h! G. [4 _! u
// significant!
' r4 f4 M3 \* N
; g) ?/ w3 p Y) A/ k- x7 H // Note also, that with the additional
4 y& x7 M4 K7 {; @ // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 p; y! u: j9 o% E! L. X" c // randomize the order in which the bugs actually run
$ L1 q& G/ J) p // their step rule. This has the effect of removing any
1 J1 a* s) p( D9 t; O // systematic bias in the iteration throught the heatbug2 r& `: z, P/ k" P3 }
// list from timestep to timestep! D% J+ T( b/ y) d- Q$ i2 p
5 w) \2 b9 e+ A; r; S2 A9 A+ z5 G
// By default, all `createActionForEach' modelActions have S: `& t: M1 U- ?/ e `
// a default order of `Sequential', which means that the5 a9 {6 Z( F! B$ l3 p6 s
// order of iteration through the `heatbugList' will be/ \) B1 R8 n& d" Q6 j
// identical (assuming the list order is not changed' T: U I6 }6 z9 t- f0 R7 ]( r
// indirectly by some other process).
) W3 g! B' i/ Z4 Q3 g( ^& [. L / i8 ]* y( h$ C' {8 L
modelActions = new ActionGroupImpl (getZone ());
$ D1 j$ h. t4 K' X" n3 B' ^: N7 |4 y* D$ ?) g' [
try {" y( M; Q9 c9 w( Q: C
modelActions.createActionTo$message
# @- ~0 `% n7 `* K2 E) o9 l' R (heat, new Selector (heat.getClass (), "stepRule", false));+ K( W% @6 W5 ?
} catch (Exception e) {
) n( U; F4 ? F' I3 X; b System.err.println ("Exception stepRule: " + e.getMessage ());
: U( L9 f) `9 g0 I8 t }( ^" l$ y/ P5 f; F2 l
1 \8 ^. j% }# p% K
try {
z, ~( S2 S3 s% a- T Heatbug proto = (Heatbug) heatbugList.get (0);* K2 o& Y8 x! J) u
Selector sel = 1 g( Z6 q% t+ \
new Selector (proto.getClass (), "heatbugStep", false);$ b' S5 K5 I& G/ W: W* A
actionForEach =
! ~- C# V! Z; `1 ^9 F* g9 M modelActions.createFActionForEachHomogeneous$call
' i4 t1 F8 |& a/ p (heatbugList,* ]0 v: d+ A4 K$ n; @
new FCallImpl (this, proto, sel,) u$ Q% u) h# E! K& G# Q1 g/ m
new FArgumentsImpl (this, sel)));1 E3 g$ }1 |' o' E) [6 e8 b4 n& R
} catch (Exception e) {
& n/ h4 G8 o- B8 I' E3 Q5 e. W. D e.printStackTrace (System.err);- @! p3 S9 M0 e- h5 {$ a7 s
}
; T0 \. v% d( I
, y- R1 O$ g& A' M syncUpdateOrder ();
$ t7 W5 A9 c3 P7 U) k5 H1 m6 R6 p0 a& `
try {! \8 w2 j8 i8 r& z
modelActions.createActionTo$message
. ^' J& C9 o. S2 R" o (heat, new Selector (heat.getClass (), "updateLattice", false));
" f3 J, x0 N! W% d } catch (Exception e) {
/ y' s& O: g7 z# F System.err.println("Exception updateLattice: " + e.getMessage ());5 B6 S$ D; ]+ ^; D& O
} ^& h3 l& @- x. h; y
; \* N# O8 @- o // Then we create a schedule that executes the8 ?, T0 Q9 x' s" m
// modelActions. modelActions is an ActionGroup, by itself it
4 M9 F, @ w4 N3 I1 c5 v // has no notion of time. In order to have it executed in% |/ f/ c' Y8 Q( P( N* I
// time, we create a Schedule that says to use the. s* a5 ]9 e. d' i
// modelActions ActionGroup at particular times. This
. C& v9 x1 i1 E1 \( Y( A0 a // schedule has a repeat interval of 1, it will loop every0 r0 _# y+ f7 E% w; f0 X
// time step. The action is executed at time 0 relative to
2 F, g5 {6 M6 p3 l, e/ n T // the beginning of the loop.
! V6 J) F& P7 F/ B$ q5 ]2 W8 f8 w9 o0 t
// This is a simple schedule, with only one action that is
' X9 {0 i/ s/ u- { // just repeated every time. See jmousetrap for more
: P. `4 U8 i- c' H1 y5 q* }; y // complicated schedules.1 L3 {1 A- a' W9 a
. a" q' P* F6 x, `, k: g modelSchedule = new ScheduleImpl (getZone (), 1);0 h& t7 ?) `( c% G: D0 K
modelSchedule.at$createAction (0, modelActions);
L" ?: ?5 C: Z" O; `
6 p& ], t% r: y1 Q* p9 \ return this;
4 U6 B4 i# I: ~) M& q } |