HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& a; r+ S$ x* ~, h( V$ H2 q$ p
' V( L% P m7 t0 ]3 a7 U public Object buildActions () {
8 ]- U, M0 R7 m$ f u$ V super.buildActions();
0 {0 B$ X6 b, X% z' ^ 9 `/ `( v9 \4 Y1 m! I* r* G# i* o3 ?
// Create the list of simulation actions. We put these in
4 G# G3 Z" I, r; I9 T // an action group, because we want these actions to be
! k/ U3 E# s+ }1 c // executed in a specific order, but these steps should8 A7 m5 h# A/ {/ j& ^) h5 _9 _4 L
// take no (simulated) time. The M(foo) means "The message' F$ m' W- D" X
// called <foo>". You can send a message To a particular# M% \& ~; A2 c
// object, or ForEach object in a collection.
. b4 J# R5 y% {7 y( B2 S I6 C
5 K" t3 m; K9 x4 y0 i // Note we update the heatspace in two phases: first run
9 Z5 T8 q6 y- a8 p5 y% N2 T // diffusion, then run "updateWorld" to actually enact the
7 D2 ?" u+ G+ Q7 J // changes the heatbugs have made. The ordering here is
( g1 U* n* t b6 L5 n) f // significant!* G8 B# y3 b6 m* [( @! b! E
5 D2 _# |/ F. K
// Note also, that with the additional0 D0 B6 ?9 F6 u/ ^
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 U. P2 g8 n Z0 C
// randomize the order in which the bugs actually run( r4 f9 x+ R' K) J: {( G+ A
// their step rule. This has the effect of removing any7 v3 x+ \/ m0 q% [) ]/ L
// systematic bias in the iteration throught the heatbug' `5 Z( w- a8 m+ Y+ L5 x
// list from timestep to timestep; e! J' E5 {, a3 n2 ], [1 t/ N/ K
+ Q4 J! ?" t8 u: K2 v& i
// By default, all `createActionForEach' modelActions have+ y! o* K- x2 Y% q9 R. j
// a default order of `Sequential', which means that the
8 e2 s# j* E7 d0 s // order of iteration through the `heatbugList' will be3 g- K1 o; ~, H U8 o5 s: @2 C
// identical (assuming the list order is not changed* V; d# T5 B' k* b& ^; ~: R
// indirectly by some other process).
# Q8 Y2 }; s3 m3 z& `
: d3 A6 s; j, T* x( h H4 S0 f) E modelActions = new ActionGroupImpl (getZone ());9 N6 O. D+ j" J7 }0 Z! D
! |. `6 | f( t* K e' v4 N try {( B* c8 i- i- ]- s9 ~) r2 V
modelActions.createActionTo$message
& Z0 v# M* D9 B, a$ D: O" P- l7 d% k (heat, new Selector (heat.getClass (), "stepRule", false));$ A4 R* |8 u9 B6 H y; x% `! E1 e
} catch (Exception e) {
3 O) k2 x+ C( _" ?9 i System.err.println ("Exception stepRule: " + e.getMessage ());2 e" _; a' o8 {
}
8 ~' @& Z2 `: T, e6 B; x
/ W4 Q4 [- }4 O" Q' c5 b6 r. w! `: C try {
) j- M% V0 r8 W) L Heatbug proto = (Heatbug) heatbugList.get (0);
( e& s& _) F% d! `' u) B Selector sel = 1 l1 v8 h$ d+ I9 s; D
new Selector (proto.getClass (), "heatbugStep", false);6 E. P) }$ @' z: r7 C. F( g- ?
actionForEach =0 ^9 l q' A! K& f( ?& i, n
modelActions.createFActionForEachHomogeneous$call
" i. U1 J# |( E6 T3 `+ E0 r( }+ Y5 g5 z (heatbugList,
1 i9 I5 a9 c7 `& O new FCallImpl (this, proto, sel,' Q0 Z) K2 S+ J; F9 K( O2 q. W
new FArgumentsImpl (this, sel)));
- k& x2 p4 g+ u7 C: v* N } catch (Exception e) {
9 O7 e2 H' N; R( ?/ k& { e.printStackTrace (System.err); a9 f" [4 z; B/ l
}
; V/ }; R* z; a! P8 B4 m" d : ?. W1 \& } |" P# j p7 Z3 Q
syncUpdateOrder ();
% z! ?( T. E- i% d4 L) h; P5 k
# l: }! r! P7 a/ M( N try {
, N2 F+ [6 w2 g, U5 n modelActions.createActionTo$message 8 p! S7 R: k% i4 k& u5 u
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 r" i4 c( {- q( I: R" ^ } catch (Exception e) {
: U2 H* ]# Y1 W" l5 j7 i1 [ System.err.println("Exception updateLattice: " + e.getMessage ());
8 R2 n4 b4 g% ], J& V }" [8 |3 k4 Z/ b% a5 z; l" {
( T% U A1 Q4 g: f // Then we create a schedule that executes the" |( @9 `8 Z9 O9 g% v0 o* W6 n* G( E
// modelActions. modelActions is an ActionGroup, by itself it
) h1 j/ q5 w" ?4 L" {* U // has no notion of time. In order to have it executed in
- F r6 r5 c/ y9 w7 |' d# h8 x // time, we create a Schedule that says to use the2 Y4 _& q, C r7 }' A
// modelActions ActionGroup at particular times. This$ L! C- U+ r5 t3 L0 t( y' D# s& J
// schedule has a repeat interval of 1, it will loop every7 |1 s- P2 E! Y+ X% L% A8 ~2 u
// time step. The action is executed at time 0 relative to) C% {/ ?+ o( w+ f3 s5 g* l
// the beginning of the loop." q# H2 o6 f4 g6 E# Z
' E, L/ M9 Y4 g# T: O // This is a simple schedule, with only one action that is
. c, [4 Y# v: m$ Z1 r0 H/ P // just repeated every time. See jmousetrap for more
2 u- ^* r4 e d9 f // complicated schedules.
) W9 g3 z# @& U8 k) X
# k) w8 |! ~8 i9 B+ a3 z. u, D) K modelSchedule = new ScheduleImpl (getZone (), 1);6 }! ?7 z+ l8 H0 `1 k
modelSchedule.at$createAction (0, modelActions);9 l% y& j8 ~8 |- L. H5 ^* E! m* h
) N4 S1 R l0 ^+ G3 O
return this;) R+ D* f* R' w" m; z
} |