HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 g- Q, E3 D n5 G- a' g' Y; l9 {; u: J3 r: E
public Object buildActions () {
9 d6 C5 X" O: j' Y& r" ^ super.buildActions();
% Q B4 K! [. |- D9 x9 _
2 j' x% b* ?' ?8 ^0 ]. M // Create the list of simulation actions. We put these in. u3 ?. u# n& k. N
// an action group, because we want these actions to be
, y* G. o# K3 @: _; G+ H // executed in a specific order, but these steps should
$ K( i& z) G- O& T% V2 O // take no (simulated) time. The M(foo) means "The message# E8 S/ b5 A1 z8 u4 R( a' @
// called <foo>". You can send a message To a particular# H' r' q! T9 d8 o' ~1 f
// object, or ForEach object in a collection.
3 v9 H$ n2 H4 h. K, R! I ( T* i- F* x2 ^4 B9 B
// Note we update the heatspace in two phases: first run
6 F0 W. G+ `' s6 n7 t // diffusion, then run "updateWorld" to actually enact the" i+ w/ x. k6 H! h' e$ p& P
// changes the heatbugs have made. The ordering here is
) l) n0 g2 O& X& |4 S B // significant!$ D: I8 ^+ J' _, P# N
. i0 s. ~, a D N // Note also, that with the additional* w; _3 y! m6 K
// `randomizeHeatbugUpdateOrder' Boolean flag we can
+ [1 j! a9 z* P9 e( g // randomize the order in which the bugs actually run
' F6 y. E" n/ ]0 N // their step rule. This has the effect of removing any
" t0 M r! J" X/ e // systematic bias in the iteration throught the heatbug
' Q- e! m3 A( d) N% J- I // list from timestep to timestep- I, @3 m+ @5 D9 _3 R. _
; S& Q& k/ D1 E& v3 U7 v% O
// By default, all `createActionForEach' modelActions have
! J- m& C% z; Q; |! X // a default order of `Sequential', which means that the
7 s5 k6 O2 h$ d6 ?/ m% B: N; |6 q // order of iteration through the `heatbugList' will be
& f! q; G# `# k // identical (assuming the list order is not changed
7 p8 t- O+ m \& Y7 C // indirectly by some other process).' {# N' y# C; V+ v7 B
0 b' Q( J$ f' M9 ?9 z- ^6 P1 L modelActions = new ActionGroupImpl (getZone ());- C- b5 r! p- @* {' Q
! `% U4 Z( ^, K; v; ` try {
- |" ^7 P, L" y1 o( ^$ U modelActions.createActionTo$message: _8 c1 C+ ^) u4 k
(heat, new Selector (heat.getClass (), "stepRule", false));7 ]# ?! q" s4 r5 J3 r6 n
} catch (Exception e) {
3 Z- r/ B! Z, Y System.err.println ("Exception stepRule: " + e.getMessage ());" `- `/ E, Q' d& m
}0 ~2 t, r% X, e8 q* z) Y6 _0 f
( q* L, N x; V( e6 \ try {, c t3 c0 A) d) m' N9 m. l) H
Heatbug proto = (Heatbug) heatbugList.get (0);
5 i. @, i* d( V/ T' l3 T3 |1 s Selector sel = / y+ H3 N) `7 y2 L% m; R
new Selector (proto.getClass (), "heatbugStep", false);
1 g3 U- Q" h0 A3 I4 B: i( M9 @ actionForEach =" F3 u1 }- q. c0 K, C" I% y/ k# |# O
modelActions.createFActionForEachHomogeneous$call! D! H. ~. `! C. \. m) j
(heatbugList, U0 t3 a* _0 A5 r& @
new FCallImpl (this, proto, sel,
, Q7 e( H, }0 z( ~1 z& X) n new FArgumentsImpl (this, sel)));
0 p1 G% o; p4 T) G } catch (Exception e) {
: ?! L) j& E( W/ c! Q$ ` e.printStackTrace (System.err);
- G8 U: o( V* O+ X/ j/ L2 G }% Y% {4 q# `5 b4 a9 E& R8 c1 r- [
" X3 ?/ R( v9 m. |' [2 h3 p+ P+ t syncUpdateOrder ();" M) o- Q/ f: d( H9 _
; t' R( n! _7 d0 U5 m6 s5 } try {& ~4 h6 U W3 T( v: r8 B5 U
modelActions.createActionTo$message " b$ M# ]+ X1 z% q m
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 f+ Z3 @ p) Q" f. C3 b } catch (Exception e) {
% R9 G7 n a9 d System.err.println("Exception updateLattice: " + e.getMessage ());5 ]% v7 u$ j- p) G; Y6 ]
}" A. ]- Q( V) m" \6 _. k) \
; F+ W7 g" C8 B# `5 e j // Then we create a schedule that executes the
( \& r4 [$ k0 A. M // modelActions. modelActions is an ActionGroup, by itself it; Z/ x5 ~& C- \! T. j. A3 F$ [/ S
// has no notion of time. In order to have it executed in6 ~( L+ D* |' ~" ^) u# p A
// time, we create a Schedule that says to use the
" b0 g3 G# C5 h* `" R6 {% y$ X5 P // modelActions ActionGroup at particular times. This
. q I+ u7 U! z# Z // schedule has a repeat interval of 1, it will loop every8 T% p/ N* h+ F, z6 t3 q
// time step. The action is executed at time 0 relative to
6 D: h7 h) Z0 I# r // the beginning of the loop.6 X% H/ h. l& n9 s
# t( K; N1 o6 U8 ] // This is a simple schedule, with only one action that is( r0 X3 ?& U! d. I/ f; i( b
// just repeated every time. See jmousetrap for more& }& P# J2 Q* q9 S, j3 s
// complicated schedules.
9 T% v+ o1 _7 p: D, v* [1 ^
' U4 F" Z2 N) R+ O modelSchedule = new ScheduleImpl (getZone (), 1);
& e6 u- L" H) P W4 D' ?9 A) r modelSchedule.at$createAction (0, modelActions);
8 d# y7 q4 i/ H6 P ' r z$ N) D# E& Q! K) I
return this;
0 M/ t/ Z5 {1 A+ C } |