HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. [! [! o9 {1 ~6 Y1 T1 u0 \! P
- X# d& z: N4 [* c* | b
public Object buildActions () {) K4 V& H4 E2 P
super.buildActions();
5 L9 Q" ^7 C' m$ j
0 t9 {/ ]/ S# t! x- |" j1 I" e+ n // Create the list of simulation actions. We put these in
# w( \$ J% N* x" K# k // an action group, because we want these actions to be, ^# |& r; n3 J4 k9 w/ f0 z
// executed in a specific order, but these steps should; F* ~ f) D+ {! d7 B# {
// take no (simulated) time. The M(foo) means "The message
6 M; g7 j# Z* O, \; o // called <foo>". You can send a message To a particular' Y6 F/ y9 l7 d+ X# Z) f. H
// object, or ForEach object in a collection.
; K. p* C" R1 g P7 }1 Q" t2 D) K9 G 3 z6 G+ `& S$ C! J @8 M0 }
// Note we update the heatspace in two phases: first run
/ T2 g) X2 I. N4 T9 a8 Z% c1 w // diffusion, then run "updateWorld" to actually enact the
6 c$ V" ~& T5 o" k2 ?6 w // changes the heatbugs have made. The ordering here is: `) u+ u% _4 D) x+ O) L# C# }' w
// significant!: D `" F7 }* Y/ V! |
' N5 T# @% I3 |2 J X# h
// Note also, that with the additional/ z! b$ }9 a( |; ?6 l5 k( O" r
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ S# I% J0 {& D
// randomize the order in which the bugs actually run5 B/ z* l$ r% f3 ~1 ?: ~% L1 Y& {
// their step rule. This has the effect of removing any
2 F/ s& v% [7 C2 R. s // systematic bias in the iteration throught the heatbug
( K, L W% b* i+ H' A // list from timestep to timestep! L3 A* X$ V1 k: f. g0 o
" E( E# g$ U! \2 P( F
// By default, all `createActionForEach' modelActions have
+ U# k3 e$ k; {/ V // a default order of `Sequential', which means that the
$ u1 s! B9 _' u5 q4 H4 L, V; Z // order of iteration through the `heatbugList' will be
0 L% e* Y, E3 r. h2 N // identical (assuming the list order is not changed
2 ^( }' Y) p* P$ u' [/ Z // indirectly by some other process).5 [& Q( F0 f7 g. e' X3 V
" o. k- _% N" P2 t5 n3 I# B
modelActions = new ActionGroupImpl (getZone ());% V4 [3 a( g* c2 }% @2 N
" C# h8 q6 ]7 q, s4 o
try {
4 {& q G/ E5 j modelActions.createActionTo$message! t& @% K/ y4 ?9 F; P0 |! H( s; A
(heat, new Selector (heat.getClass (), "stepRule", false));
* T" i4 [. U5 h* P2 X4 m$ Z } catch (Exception e) {8 L' o9 e9 ~" O5 v/ x, B6 M6 @# F
System.err.println ("Exception stepRule: " + e.getMessage ());
% O& Y2 h x" h' B6 C X; T }
; \* N j7 p) M: v4 h: `4 V& }& h r
try {" ~4 d. F( o( l; v$ A% m1 g
Heatbug proto = (Heatbug) heatbugList.get (0);
: E, |8 E) i/ _ Selector sel = 4 b3 X6 E$ A; |' ~ s% ^3 A* X
new Selector (proto.getClass (), "heatbugStep", false);
' o- p5 U2 D y+ ^& k7 T actionForEach =
; G" L* ^" u: E' E: C6 E) `3 E modelActions.createFActionForEachHomogeneous$call; _1 B2 w$ c( w M
(heatbugList,
- n! A2 F- f/ U0 |5 K2 B new FCallImpl (this, proto, sel, u7 N) _5 e* [# N1 m% B
new FArgumentsImpl (this, sel)));' |% ]- u( ^" l
} catch (Exception e) {
) n+ n5 C3 _5 x+ \2 P e.printStackTrace (System.err);
" |$ q: `; t+ D- h2 | X) Y+ y9 k }3 k" d* E1 w* o" D
9 k" r O$ Y0 B( i5 u1 F
syncUpdateOrder ();
) f; W( V! Q0 K7 F( T8 h5 D+ A2 ~/ S8 i* `7 y' m& y
try {- f# `3 T9 m9 e/ k; n
modelActions.createActionTo$message
( r' t$ d% ?! L. j2 Y (heat, new Selector (heat.getClass (), "updateLattice", false));
$ `2 L9 M' o! B6 |3 c2 A } catch (Exception e) {6 r9 i% e% y$ v: v' ?2 t7 I
System.err.println("Exception updateLattice: " + e.getMessage ());- ? G5 R6 \' l
}
4 w. f6 h" M3 S, D0 C5 j % i$ g7 _& s. M% n
// Then we create a schedule that executes the+ _5 D9 o" w! P7 m
// modelActions. modelActions is an ActionGroup, by itself it
+ X' b) d! h6 B: f // has no notion of time. In order to have it executed in
7 a: e* Y+ m: u5 R; j4 v2 c, Y& | // time, we create a Schedule that says to use the! [ _1 i8 r: G1 ]7 ]! o" A/ [, d
// modelActions ActionGroup at particular times. This
; l7 m3 b- X! Y, \# `/ e( K5 Z // schedule has a repeat interval of 1, it will loop every
. Y3 P0 t4 ]2 L3 |8 q# B) U: k // time step. The action is executed at time 0 relative to e! y2 ? f3 T* K$ `8 l7 w5 ?
// the beginning of the loop.' f" z; q5 x7 |" `
- \7 }+ M3 v5 n9 A7 T3 j* m$ o // This is a simple schedule, with only one action that is+ k, v( m( D7 }$ P/ y- j
// just repeated every time. See jmousetrap for more7 u I* W( P, w
// complicated schedules.1 r" T( |4 k& J$ r2 Z/ O( x
$ `$ y) u) z! m! ?) R modelSchedule = new ScheduleImpl (getZone (), 1);/ e: W/ h" w$ Q. t \ T
modelSchedule.at$createAction (0, modelActions);" C# |( s( {9 d
/ r% }! [0 x# A! o" d! ? return this;
_' m' a0 U. l9 I$ ~( T. ~3 E- a } |