HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
$ f% `% q- c" S+ G) w
7 m2 z# l2 |' z+ U- u2 u public Object buildActions () {
- ^' k! m1 e$ G5 [5 A3 \ super.buildActions();; {) Y# _0 L6 \. r: n# E
% K, l. g7 X2 B- q% Z4 V% q, t // Create the list of simulation actions. We put these in
7 _. H5 n" H/ t // an action group, because we want these actions to be
. b8 _! N W% W% g2 J // executed in a specific order, but these steps should/ l) i( F5 {, f, _
// take no (simulated) time. The M(foo) means "The message8 v. B( o- {# }
// called <foo>". You can send a message To a particular/ ?, j. l9 S1 j' H0 w
// object, or ForEach object in a collection.
" S: U( z; x' B! n' k8 y / M/ g6 B* }$ ]3 ]) s! [
// Note we update the heatspace in two phases: first run
3 L; y, G4 F* x% d' E& B // diffusion, then run "updateWorld" to actually enact the: ?6 }' }: X' L$ s
// changes the heatbugs have made. The ordering here is7 N( p! f. r0 N, ?, J
// significant!
; ~0 M/ j/ G+ O& o3 S( O
: a: \% _ w; a; L& O; R5 H // Note also, that with the additional
" V" C% S8 s; v0 B X% u( ^) a: g0 P // `randomizeHeatbugUpdateOrder' Boolean flag we can
! m% J, x y2 i# l // randomize the order in which the bugs actually run2 ?( C# F/ [( m+ G
// their step rule. This has the effect of removing any) M4 b- r' j0 Z" R( o7 X) |
// systematic bias in the iteration throught the heatbug
0 T( s! n) q, H/ s2 T2 i+ } // list from timestep to timestep
+ b3 U& J* k# p7 J& o $ K5 _; |4 x# ]$ j7 E
// By default, all `createActionForEach' modelActions have3 l$ }; f# u1 Z7 J
// a default order of `Sequential', which means that the
# x' Z$ W4 Z: z // order of iteration through the `heatbugList' will be+ E+ m1 H6 y, K) U& w
// identical (assuming the list order is not changed- I8 W0 e: d% n3 M2 x9 S- i
// indirectly by some other process).
9 t$ t* r3 T2 f/ G: y8 I ] : L% x1 ~8 k- ]
modelActions = new ActionGroupImpl (getZone ());% h" m3 }8 w) ^& [% |" x; y
( ?! p! }( ~( O# F try {. e, X8 ~8 w% p: \- c8 |
modelActions.createActionTo$message- o/ ~; R. h4 ^& s8 ]* z# l# J' v
(heat, new Selector (heat.getClass (), "stepRule", false));! J7 R$ i0 {! o4 E
} catch (Exception e) {0 D& t. L: d `3 {# Z4 i3 u
System.err.println ("Exception stepRule: " + e.getMessage ());
1 J Y5 I; n) h1 x2 _ }
! c% H5 f, _1 h
8 e. T9 F* k2 {8 h2 I- X* T/ H try {
( v* Z# x2 b1 | Heatbug proto = (Heatbug) heatbugList.get (0);
8 o# y* x2 y4 f* \8 z" n) D$ h Selector sel =
! J* y# ^) a7 R: E new Selector (proto.getClass (), "heatbugStep", false);
7 \( w9 x$ a* l* f+ T$ n actionForEach =
( @9 E4 n5 J9 K- }% F5 o modelActions.createFActionForEachHomogeneous$call8 P0 i) R& ?$ y, ^7 p2 j
(heatbugList,8 U1 } W$ J* o
new FCallImpl (this, proto, sel,
- y! `& R! _; ` x8 ^5 W5 J9 S6 Y new FArgumentsImpl (this, sel)));
( i* a0 P4 ^- x7 ~! Q } catch (Exception e) {) ~9 k* F& W2 x( Q" R& r
e.printStackTrace (System.err);
8 v$ u% U% j# `( \ }0 z; R9 r# |- g2 s. c% L
# v' L5 q+ e [ syncUpdateOrder ();0 l2 h, }% X% C( I* R+ g. a- k
% k* O" s8 }# C! Y
try {* u; p! u2 m8 K& S0 a( c. D0 a
modelActions.createActionTo$message
# W. n0 c2 k' A1 K0 A$ _ (heat, new Selector (heat.getClass (), "updateLattice", false));
% c: B T) A6 `2 G0 D } catch (Exception e) {
/ `9 _. t |! O4 K( p System.err.println("Exception updateLattice: " + e.getMessage ());
! p0 c1 ~/ h. V4 T$ y( H }& H- Y# [$ F' W9 H4 P4 m6 n& ^
# z3 s# G6 ?. ~4 ?7 y; o9 ]* [# U
// Then we create a schedule that executes the
" H: A8 R; x; |% b4 g! _ // modelActions. modelActions is an ActionGroup, by itself it% v S0 d/ G" C. }, G
// has no notion of time. In order to have it executed in0 i3 \0 ]: b! V& i; S B# D
// time, we create a Schedule that says to use the) b0 j* B) l, F) |1 @/ T; _
// modelActions ActionGroup at particular times. This
+ t. X( A# I- |7 Q // schedule has a repeat interval of 1, it will loop every
j9 `9 y( }4 D+ @+ X // time step. The action is executed at time 0 relative to4 i2 Y, B& K2 D2 Q; [
// the beginning of the loop.
6 W0 m4 s* y7 h: j" G: g; ]2 g
* @& J9 J& Y9 M0 G5 E* g // This is a simple schedule, with only one action that is
9 I0 O5 ]: E: f7 v, ?' m) ?3 d // just repeated every time. See jmousetrap for more! f8 _" X+ p% P* K- r+ B. d
// complicated schedules. E, d1 }) y/ D2 m7 d
4 R; ~& h+ Y1 ?" a modelSchedule = new ScheduleImpl (getZone (), 1);7 J: b2 T6 X% t V8 q
modelSchedule.at$createAction (0, modelActions);6 \& R& r& Y: b& P' R3 W5 B0 W
6 T0 V, p6 s- N. ^& |! _ return this;
6 e5 \7 Y3 J6 T G! a } |