HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 N5 ?: L: {9 y8 v5 s- s4 h& |
5 z7 |8 G; F0 u0 {0 J, k, g3 t6 e public Object buildActions () {
) y0 W7 D. w7 j5 |$ B4 N2 [' X super.buildActions();8 O# R0 j" X+ r
0 S- T, o0 @6 f+ k // Create the list of simulation actions. We put these in
( Z# Q5 M! h$ ?' Z$ p! g) ?6 R% e // an action group, because we want these actions to be* Y. ]" _+ B# X
// executed in a specific order, but these steps should
" V- e% k4 n2 Q4 ? // take no (simulated) time. The M(foo) means "The message9 ?6 P, x9 K( q3 H8 A( ]! F" O$ A
// called <foo>". You can send a message To a particular
/ a, O8 |% N, O3 }% Y& \$ g // object, or ForEach object in a collection.
y3 a: N8 Y0 \7 V 5 a, i3 b- z" Z! D1 h
// Note we update the heatspace in two phases: first run
7 V7 m* j2 {1 e& G/ i+ w! E // diffusion, then run "updateWorld" to actually enact the( q6 [8 N b0 w. g# d
// changes the heatbugs have made. The ordering here is
% b% V- k$ }: s p5 F2 | // significant!, `; x7 H$ @2 Q3 Q& u. ~
& I1 \2 @* Y# U; v0 m* I5 _ // Note also, that with the additional$ T: j* d; Y9 x
// `randomizeHeatbugUpdateOrder' Boolean flag we can
x) m% ~$ e/ _" F+ h4 Y4 E // randomize the order in which the bugs actually run
& [ X6 H, L, o& |( E$ B // their step rule. This has the effect of removing any
. M. h% F( q) U // systematic bias in the iteration throught the heatbug! v9 p' s' y* P
// list from timestep to timestep6 l+ h; X. X. _% P1 B9 A. X: ]
/ q- Y# l- I$ B! H% X; _ // By default, all `createActionForEach' modelActions have9 Z I0 A/ p4 k2 Y
// a default order of `Sequential', which means that the
2 I- D6 l/ V* d$ F L" `" ^, ] // order of iteration through the `heatbugList' will be% `* U: d0 |( n; J- t+ q
// identical (assuming the list order is not changed
4 j8 l4 I* X6 [) W( a // indirectly by some other process).4 U: r) \4 u5 P: K. U! r. r
9 o$ l$ V& G) O6 `, F' e; K
modelActions = new ActionGroupImpl (getZone ());2 E' Q2 n+ t/ W. @4 L
, w6 q6 d6 [ X4 U) I
try {
. o( P' `/ m7 e G modelActions.createActionTo$message
2 y: K9 f" L8 T (heat, new Selector (heat.getClass (), "stepRule", false));
5 R {1 h2 p& f1 D/ @- P* m. S } catch (Exception e) {
& {, F+ t; f. R4 W1 f, a# Q System.err.println ("Exception stepRule: " + e.getMessage ());0 p; n) ?2 B4 R% b
}- ]. N6 f) Y3 `% m! z4 J% ^
- C' w) ]1 P1 }; e( o) V
try {! {) G* d4 g6 p
Heatbug proto = (Heatbug) heatbugList.get (0);4 Z; }$ ]7 u9 f! ]& T
Selector sel = & c5 a6 n9 b$ U8 T% Z' k
new Selector (proto.getClass (), "heatbugStep", false);9 h+ R: O) ]4 w7 g: z
actionForEach =
" A# V& U8 _. f! r0 d modelActions.createFActionForEachHomogeneous$call
0 u0 Q: r% `) p (heatbugList,8 N7 W' T# Y+ t) J5 \
new FCallImpl (this, proto, sel,& ]# q3 {4 U( R3 S, Q" e; N
new FArgumentsImpl (this, sel)));
; n" ~' S! v4 g% d. A1 g } catch (Exception e) {/ s1 [! w3 A+ x$ R9 d
e.printStackTrace (System.err);
9 u% W: _- C; ]$ M: [ }" t- C4 z7 K$ `# i/ y
* ~# h# ?( \' C syncUpdateOrder ();
: A3 c. h3 W' n' f7 d# [
! }$ g/ S( E+ J" m& e! L% X try {
: x$ z8 P0 e0 r# m, Y5 P modelActions.createActionTo$message
- j( t) s9 r% M' y' z( ` (heat, new Selector (heat.getClass (), "updateLattice", false));2 ], e- r3 G0 ~ w! f9 T
} catch (Exception e) {
- d% |- g; I/ X3 ^/ @! H& a- B System.err.println("Exception updateLattice: " + e.getMessage ());7 j! h, {# @. l1 q. i4 z+ z
}
) v J% j) M8 R$ q4 \: M; Y8 \ 8 V5 l$ ~& _1 A% m& L* Y
// Then we create a schedule that executes the0 N @1 @; m6 T, J3 e' z
// modelActions. modelActions is an ActionGroup, by itself it( |. Y/ T0 @& T$ |9 Y
// has no notion of time. In order to have it executed in) ^1 W1 _7 b7 J) l7 d( o! w
// time, we create a Schedule that says to use the
$ O2 U( }! c+ Q: e // modelActions ActionGroup at particular times. This
; g& y. i& {' o( }* s9 k9 D // schedule has a repeat interval of 1, it will loop every
. {5 u3 K1 u* B u1 O1 A) I( p // time step. The action is executed at time 0 relative to
" [5 U3 p. H9 M5 [$ B V // the beginning of the loop.3 T8 y& N; A' a6 e$ e: a4 u
7 ?5 v8 t6 M* F7 l; x // This is a simple schedule, with only one action that is4 v- S& c8 E7 {+ K
// just repeated every time. See jmousetrap for more
% ^' v0 d/ \# ^7 U* t# T! V // complicated schedules.2 h) H, J j' l: ]) \
7 D: p+ v& D% v' x5 i& U' A modelSchedule = new ScheduleImpl (getZone (), 1);2 _+ j3 Z. @, X! H1 i! s
modelSchedule.at$createAction (0, modelActions);
4 K; L3 y u: w, L, [' `( L. w : v2 s/ m0 W; q, F0 ~4 U$ C e
return this;
% a6 A5 N y3 O- e, b6 T } |