HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 S7 y$ i( M" k7 b7 ~& d( v7 s
* F& i- K7 _+ F5 Y. d; S public Object buildActions () {
8 d) M# @7 ~% d# V super.buildActions();8 w# c- p3 C" |( m
2 \7 G7 F6 U. L! H. B* f# U // Create the list of simulation actions. We put these in
$ p' P: E6 k$ B$ c3 e6 A( | // an action group, because we want these actions to be
6 A5 [+ O- [! o3 f# p; p7 E& d( f // executed in a specific order, but these steps should) G) C4 c* t, i
// take no (simulated) time. The M(foo) means "The message
; u0 X: ?( ~% ~& S // called <foo>". You can send a message To a particular5 w' ~6 i3 a0 D
// object, or ForEach object in a collection.
5 f: v0 k' z) l( C
$ x5 _ P! G8 D' w; N1 y+ { // Note we update the heatspace in two phases: first run
6 l9 g9 W. r8 M R // diffusion, then run "updateWorld" to actually enact the; L0 S1 r" K9 ?7 E) ^, D
// changes the heatbugs have made. The ordering here is
. u" z* x) F5 [. D. u/ N // significant!$ D, Y E7 r# v5 P) Y
2 V1 O6 Q0 Q+ S; ^+ c* \+ @ // Note also, that with the additional
$ o. w6 q( M! ?' O // `randomizeHeatbugUpdateOrder' Boolean flag we can. l6 F% [" k8 t8 K
// randomize the order in which the bugs actually run+ O* r2 u8 X; V' \
// their step rule. This has the effect of removing any
- g ^! Z& r0 ^( k8 D7 g // systematic bias in the iteration throught the heatbug y0 ~' v2 ]7 }' R/ i4 ]! M( r/ G
// list from timestep to timestep/ y, S% R) D$ ?8 }
8 j- p8 u5 B- T" C- O1 P/ j! }5 b4 H // By default, all `createActionForEach' modelActions have
5 {$ g) n; `- W3 A# O* i; h // a default order of `Sequential', which means that the
% w. q3 t, e' X! `' L // order of iteration through the `heatbugList' will be$ c0 B% N2 }5 I- l J B: f) M: e
// identical (assuming the list order is not changed O7 {' z; `% ^5 _5 B/ s* ~
// indirectly by some other process)., r& ` p1 s# J8 a6 F" {! D
) M, O0 [$ Q f$ z
modelActions = new ActionGroupImpl (getZone ()); p3 ?7 X x6 P
4 o e* j2 J/ s0 J& {6 R
try {0 ^0 i; s. b6 S" ?% _: U. C( `, h4 D
modelActions.createActionTo$message
$ w- m' I5 a7 i9 `. N$ }% l9 J- n (heat, new Selector (heat.getClass (), "stepRule", false));
, I: z ^( v* e( l K" b/ N, n/ x } catch (Exception e) { R# L: e$ }% ?3 _
System.err.println ("Exception stepRule: " + e.getMessage ());" M0 z' r$ R& N u
}
7 p& Q0 E4 R5 ]( D i$ [ G
' W) S$ d7 _: r' i7 @ try {
1 a& v0 n! o) w7 Z z Heatbug proto = (Heatbug) heatbugList.get (0);8 a! j* W' U2 G4 n. J! J f
Selector sel = ! w( _5 ]' |9 E! f. \* u
new Selector (proto.getClass (), "heatbugStep", false);; O4 Q; B' l) ~" Q6 A- l
actionForEach =
' o1 P) ?6 _& ?( p, I$ U% \ modelActions.createFActionForEachHomogeneous$call( t1 d: X7 T% j* M, ]: k4 c5 f8 P
(heatbugList,& t# {- @, J3 z; ~7 B: w
new FCallImpl (this, proto, sel,! g1 ]. W/ M( Z; O# T
new FArgumentsImpl (this, sel)));9 K2 Z$ i4 J2 t8 ^+ s+ J, i
} catch (Exception e) {
5 ?; L. \, h8 E) t( o% h' r e.printStackTrace (System.err);
1 S) q# S8 v& i6 H; K }
( J5 C; R! y/ N6 Y' E6 m# S( r ( e% M' G+ {+ c( I2 w. v
syncUpdateOrder ();/ X6 A- n( G1 C1 t" ?/ N
* I; Q1 R, a) T% t% f( q! {
try {" ^* D9 _3 Y) t
modelActions.createActionTo$message
, y8 O& [2 t0 H# Q% p. q: a (heat, new Selector (heat.getClass (), "updateLattice", false));
7 ]8 [0 J* E- c4 O } catch (Exception e) {; z f( n7 @9 `- G2 r' k! p
System.err.println("Exception updateLattice: " + e.getMessage ());, }4 X: q1 s- j& x
}) z$ i2 H" G) w! |' ]2 X
" X. s: a7 G6 q // Then we create a schedule that executes the
h' Y! m* e& }5 U X9 C8 ^ // modelActions. modelActions is an ActionGroup, by itself it
% n& t4 K# m- u6 S+ n: J* M // has no notion of time. In order to have it executed in
( r1 c6 @7 e4 P" I! f // time, we create a Schedule that says to use the
8 s: C) U2 d/ s. r* H5 U) L // modelActions ActionGroup at particular times. This
- f1 n Z/ L% A. a // schedule has a repeat interval of 1, it will loop every- w. W0 r* ~1 E6 ?! g+ j; {' a
// time step. The action is executed at time 0 relative to
9 ]- v" d& l( G% T // the beginning of the loop.4 p6 [. Z; e" d5 U$ r5 p) v
& `, `9 I3 s$ P
// This is a simple schedule, with only one action that is; F! X. h1 I3 Y f5 f& `
// just repeated every time. See jmousetrap for more
7 X3 [, B5 ]# \. ^* y' N" u4 B // complicated schedules.; `8 u5 D$ f8 D; L4 f
# G( h6 s8 H0 E0 F. e: Y* J( T" ]# Z$ o; s modelSchedule = new ScheduleImpl (getZone (), 1);
0 g3 _: r* Y# j8 u6 L( k$ K3 n0 |- k modelSchedule.at$createAction (0, modelActions);' ~6 n. A& O0 B7 X: N
/ ~+ Q# w6 S: N: X+ |. i
return this;
- \& d/ J5 ~: G: o2 Y } |