HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& P7 B- O W8 B$ c4 }/ l( m
+ G5 D( n. ^9 @! C) W public Object buildActions () { _7 [2 e4 u) Q, {" B2 W- ~# F j6 R
super.buildActions();2 d% ~0 I' J, g3 |2 I9 P
* s% Q* B+ F& e$ t' }( r // Create the list of simulation actions. We put these in
% e1 b! B& _& H4 x- r7 c8 y+ M // an action group, because we want these actions to be& n8 \6 |2 u k$ O
// executed in a specific order, but these steps should8 v- q$ M4 p+ p* x$ q
// take no (simulated) time. The M(foo) means "The message+ y' e6 k. E/ i
// called <foo>". You can send a message To a particular$ _7 s; ^* S! v3 q2 |
// object, or ForEach object in a collection.0 l! \. @5 D% r
, _; C: T; ~8 \; ~: Y7 W2 F
// Note we update the heatspace in two phases: first run; o/ C4 p d' G5 m8 p% @% F
// diffusion, then run "updateWorld" to actually enact the% t! Y9 p0 N3 i
// changes the heatbugs have made. The ordering here is
2 E" n& |* g2 i2 q5 ?/ [ // significant!
; Q( L" v9 o2 G 8 R0 H- @! E- ~# o/ j
// Note also, that with the additional6 @' A: B- [6 P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
8 N2 L" y i& U4 |3 O // randomize the order in which the bugs actually run7 [1 `* t( b; J. w3 L9 B7 h+ j
// their step rule. This has the effect of removing any1 I8 j6 H1 U7 R! K: ~
// systematic bias in the iteration throught the heatbug# ^ q4 k9 K& T. ]2 ^
// list from timestep to timestep
% u) S$ K9 T/ u }( r0 ] / O: ~0 o4 Y; \! u
// By default, all `createActionForEach' modelActions have$ i/ \0 a" |) a+ R I' E$ w
// a default order of `Sequential', which means that the6 S# \ ?' m0 I4 R
// order of iteration through the `heatbugList' will be
9 K/ S: ]) }0 L* W0 H: E. w // identical (assuming the list order is not changed& Z/ C$ `- ?6 L' n5 C/ q* l5 ?
// indirectly by some other process).
m( R* l$ T; N' ]8 X+ J% x ( e- R$ C+ o' s: t: N& K) J4 V
modelActions = new ActionGroupImpl (getZone ());
; u" [9 E" g0 B0 S' {+ I" w2 L3 U
" P" J* d& j4 G0 b9 C) ?7 H0 S try {
/ q6 j+ y8 M: R4 w, m modelActions.createActionTo$message
7 g9 V4 E9 O* L, g8 I$ Z. P" ^8 |5 q (heat, new Selector (heat.getClass (), "stepRule", false));0 J; S: u% m' e. m" b4 n
} catch (Exception e) {
' U8 k5 r/ Y7 b( {1 }+ c1 S System.err.println ("Exception stepRule: " + e.getMessage ());
- t8 e8 B ~) ]4 q5 h, M( J }, _1 S! A5 W4 i9 Y$ Z* A
! R0 o9 @- I" b- d0 [7 E8 Q$ W5 W try {
1 o1 i# l# {0 u0 ?( o Heatbug proto = (Heatbug) heatbugList.get (0);
$ u0 c5 m- b, t1 M Selector sel = d; I0 `( a: \' ^) u
new Selector (proto.getClass (), "heatbugStep", false);
. Z. s4 H2 ]. X9 d5 q# U' u+ _ actionForEach =( Y4 a$ W8 ^4 b. Q7 W. L
modelActions.createFActionForEachHomogeneous$call) B1 H$ g! {# |9 Q
(heatbugList,
+ V) }# R# d% u new FCallImpl (this, proto, sel,* K6 v7 \1 ]5 }7 x$ m
new FArgumentsImpl (this, sel)));
" r4 j1 ]( E6 f# J4 L3 l- [/ k } catch (Exception e) {: ?1 Z; X. z& c1 u5 M. A
e.printStackTrace (System.err);
0 e7 V) U4 {: m, {& ?: b }% g0 _, l, i1 Q% z2 ~
J- M9 s0 _) A! y! A$ s
syncUpdateOrder ();& c/ Q1 C+ f% c0 o0 _
. f7 A% N6 S, N5 W/ Q3 u: ?0 p try {
E- U, T8 D, W& e U modelActions.createActionTo$message
. ~; q% P) h+ S4 y8 B( c6 j. [' A (heat, new Selector (heat.getClass (), "updateLattice", false));
0 P' ~: _0 `; A! t) ~ } catch (Exception e) {+ h+ e. p7 S7 j( X7 |6 W
System.err.println("Exception updateLattice: " + e.getMessage ());8 P. a# R2 R4 X# D% e# v
}
1 Z1 @! q7 m \8 r' `% O 7 G7 l7 V: K; [- G5 X0 ^, h7 p
// Then we create a schedule that executes the* K8 ?+ t' c: ~6 V2 o
// modelActions. modelActions is an ActionGroup, by itself it
" l: ]( A% F9 }+ m2 c' A- S // has no notion of time. In order to have it executed in ?# e- @$ n5 }! \% ]* U# B$ } j3 ?
// time, we create a Schedule that says to use the( g6 a4 d/ J4 S! h
// modelActions ActionGroup at particular times. This K& y* ]# \5 g1 S& i( P+ B
// schedule has a repeat interval of 1, it will loop every
9 s7 r. V6 ~% L& D // time step. The action is executed at time 0 relative to
" O" g. A7 |/ l: }, e( n0 k // the beginning of the loop.3 Q: ^; b4 e8 ?0 X& G0 S- o
7 R8 l/ r6 B) c, C$ c% s% ^- ]
// This is a simple schedule, with only one action that is
8 r7 f( ]! e0 y4 y" W // just repeated every time. See jmousetrap for more
7 q9 F' W6 l' o# g! A1 h: V, C# r // complicated schedules.# l' e& x8 j) U) j, t% T# E2 H
. k. w8 {) Y L; i modelSchedule = new ScheduleImpl (getZone (), 1);
7 U% }; p) O$ z0 q8 q modelSchedule.at$createAction (0, modelActions);
% {: s: f+ Y0 M/ L$ a8 l( ~9 w 0 T" s: ^; Y" J N; f( X
return this;8 X, s6 ^# Z3 s1 d" _& ?
} |