HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: T9 p) T1 x. r9 b3 O r$ N
7 D0 b, N1 E1 t. e public Object buildActions () {
6 o2 i4 f3 E! L/ _* w1 b1 D super.buildActions();
$ e- N% i! _ C1 Q 8 C7 O+ c+ u, t/ m7 F
// Create the list of simulation actions. We put these in
6 |& Y( G# k( F* I, k" b // an action group, because we want these actions to be6 h4 @8 c& @, D( Z' j
// executed in a specific order, but these steps should
$ z% F( Z* b3 r0 v4 _ {$ Q$ Q // take no (simulated) time. The M(foo) means "The message
5 B) b. B: L% t8 r5 i) W- y9 i // called <foo>". You can send a message To a particular+ |. q) v7 V! w3 h
// object, or ForEach object in a collection./ k" K+ [+ _% K, V- N r- j9 W+ }
& A- w# N% A3 }* p$ ~* V // Note we update the heatspace in two phases: first run
9 `; G* t$ \5 S( M) r // diffusion, then run "updateWorld" to actually enact the
' e& O g+ _7 [8 r* i" m // changes the heatbugs have made. The ordering here is
& S9 S5 z8 T& g9 t- A+ f6 e // significant!
) R5 K: I( L- H# o6 @' `
1 ?$ K- \+ r& m7 Q // Note also, that with the additional
- [8 a0 u) j2 R( ? // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ `. \! r; Y/ T6 P // randomize the order in which the bugs actually run+ d0 Y/ v8 y. [; ^- M, |
// their step rule. This has the effect of removing any
! C6 W% E! r. t% o // systematic bias in the iteration throught the heatbug
+ G2 @$ @; l# }& [ // list from timestep to timestep& j9 e% w T- |8 H( q
: P0 J$ n9 x5 F8 V) \% w; ~ N
// By default, all `createActionForEach' modelActions have) k! Y; T; ~3 l* R) ^8 B6 J
// a default order of `Sequential', which means that the3 E$ q, H! M l
// order of iteration through the `heatbugList' will be
( z6 J" k4 M% S4 w // identical (assuming the list order is not changed
" z' B6 J: L& G' G+ r // indirectly by some other process). E$ Q3 h/ t6 Q3 B- g
! o6 f8 O3 S* d& T) K; b5 Q modelActions = new ActionGroupImpl (getZone ());# z9 u9 ]% p; w# M$ H
. I3 | n% D# ^# {2 g. K
try {
" _; c6 D2 n1 o9 j modelActions.createActionTo$message& [. t. x7 y( G I4 `4 Y: `
(heat, new Selector (heat.getClass (), "stepRule", false));
2 s/ T6 H2 X, j2 ] T1 A2 k( D( j } catch (Exception e) {
; d9 c' K* g; W) W# H System.err.println ("Exception stepRule: " + e.getMessage ());
. J: O3 h- z5 n" N, u' l1 k2 C }9 l- q4 {% u6 a7 I( h1 j4 S
- E5 A, X1 g" O$ I+ E7 V7 X; n! N try {
$ b% N$ K$ R8 a Heatbug proto = (Heatbug) heatbugList.get (0);
; @0 ?. c) K4 k0 F) } Selector sel =
# x, ~/ n) v" Q( j new Selector (proto.getClass (), "heatbugStep", false);( q& K: I, g5 ^* }5 a
actionForEach =! D5 F" U- n( l. M
modelActions.createFActionForEachHomogeneous$call
/ n3 P8 f! j7 p, r% Q (heatbugList,
+ u7 P* q7 P2 n- R+ l- v new FCallImpl (this, proto, sel,
! s( w4 B( K/ H new FArgumentsImpl (this, sel)));
7 A$ e# S5 k3 v. h' M& w } catch (Exception e) {
Y- r6 j# c! C1 N e.printStackTrace (System.err);& O& H3 W' d! w& P+ h2 b6 g; w5 {
}# @8 V8 D! ]- y* k( y% M# y- a$ b
8 T5 k7 g1 A7 Q- z! d# X8 V syncUpdateOrder ();+ x8 m% W" C+ [" b
+ X( y; |# Y! D4 l5 _ try {
+ G$ W; @- C; A' }, y# a: d modelActions.createActionTo$message " K+ d2 _' W; V$ }, d' f" p
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 k; e4 u5 Q" l3 P o } catch (Exception e) {! D, c1 N7 j j) _5 r# m
System.err.println("Exception updateLattice: " + e.getMessage ());
( s0 W( ~# l$ ]5 p; g9 b }
7 b, {4 Z6 U1 S' W+ Q" K
! v; A1 S7 Z1 A- \0 r' I // Then we create a schedule that executes the8 {/ W5 \& u# Q7 J/ o/ N4 a
// modelActions. modelActions is an ActionGroup, by itself it1 S* l1 v8 Z9 j: {
// has no notion of time. In order to have it executed in
6 R2 I2 H8 x+ K; C // time, we create a Schedule that says to use the: M$ Z; @7 k$ e& G4 J, U/ d% s. g
// modelActions ActionGroup at particular times. This
1 x/ v; y# c7 e3 _9 r7 T* Q // schedule has a repeat interval of 1, it will loop every
9 o: ^8 r/ v1 Y6 W9 y6 H // time step. The action is executed at time 0 relative to* j) o4 K9 U1 U' B1 ?* x
// the beginning of the loop.# M# m& D) L: U8 _' Z
' H! d; C1 o- @$ ~2 L$ g // This is a simple schedule, with only one action that is& E) }9 A; _; z* s/ ^3 D6 R
// just repeated every time. See jmousetrap for more- j3 \/ P4 T- C( R6 j8 e
// complicated schedules.( B( d8 T& u. l; T7 t, H; T! ?
) P5 R& b2 I# u! ?" u x5 C modelSchedule = new ScheduleImpl (getZone (), 1);. e/ M2 R5 n% z$ D# P2 i
modelSchedule.at$createAction (0, modelActions);
/ u8 j t) o/ H( K 6 T! `6 y; v$ ^
return this;
; O3 \7 }( k( I } |