HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:6 e& ?! r7 Z, b0 _; b
* R) @. y; x& i$ y5 w% A public Object buildActions () {- Y4 k2 J. I$ ~4 u& O
super.buildActions();
' O$ {6 p# q: m" `2 S
( h6 J3 g, \( k! S1 E // Create the list of simulation actions. We put these in
4 m7 ~4 |3 ?: d% L5 w3 N# T, N8 \ // an action group, because we want these actions to be% S* f y7 Y d$ B( K
// executed in a specific order, but these steps should
7 G* f4 T# d6 O) A% } // take no (simulated) time. The M(foo) means "The message) I) K6 q$ j6 i/ y0 H% A8 Q
// called <foo>". You can send a message To a particular
0 j$ I) e, L2 q) R) \& u' J# t // object, or ForEach object in a collection./ I* V! s' j: ^( W* Y
9 g, I7 E9 Y; x# O z$ \ h // Note we update the heatspace in two phases: first run9 | n9 H; J0 `+ w1 c _
// diffusion, then run "updateWorld" to actually enact the
# A ?" c& v/ T2 m // changes the heatbugs have made. The ordering here is. A, [4 t5 l" j# }/ O( h
// significant!6 h' T; i# a+ {0 [
- D: h0 x/ F! f3 O( ]# v# `$ }4 ?
// Note also, that with the additional
8 B' V4 K+ d V3 O7 T' q // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 }8 I) m# ~4 A2 D/ g" q1 h' o // randomize the order in which the bugs actually run
& J. w5 j& \! a3 X- ^! y: o // their step rule. This has the effect of removing any5 t. k. s* a& _7 u2 z* b N
// systematic bias in the iteration throught the heatbug( c+ Z* O& ?' E- W0 ^. f
// list from timestep to timestep9 C m" ?! j( {! c) L, L7 S
) |( I4 K+ L" E6 h; |
// By default, all `createActionForEach' modelActions have! Q# K6 j5 l6 y6 f$ A
// a default order of `Sequential', which means that the
! H2 C9 L; M6 `- F' l2 b // order of iteration through the `heatbugList' will be
" v, \. U* `. d& P. j // identical (assuming the list order is not changed; C2 ~: `2 D1 L4 \$ m2 \6 J* l
// indirectly by some other process).6 k- {' n, k' ]# T7 g
- I9 H- `" T$ [6 d% Y$ r
modelActions = new ActionGroupImpl (getZone ());
! b& J7 d( [+ U4 n5 t5 S- `* r' w2 D( D7 f0 g+ p
try {
3 L7 _+ |8 k0 m modelActions.createActionTo$message8 g# b; f2 m. z2 s2 U
(heat, new Selector (heat.getClass (), "stepRule", false));
' @/ R7 w& U9 k) }1 v& ~4 L } catch (Exception e) {' r' ]1 G' U5 ]" h) K
System.err.println ("Exception stepRule: " + e.getMessage ());
p W- j5 U7 c7 U) m }& k+ b- D8 q3 t
. U! D& e, l; V2 L1 |
try {2 `, L3 s9 ?: ? j% M
Heatbug proto = (Heatbug) heatbugList.get (0);
+ Z3 i* D8 h; N& z- I; \ Selector sel = ( ?7 j4 M3 U' e% H/ _4 K0 T
new Selector (proto.getClass (), "heatbugStep", false);/ Y8 Y# E; H9 z! h6 f B: `; A
actionForEach =
+ d5 Q! K: H& L; X6 U4 X modelActions.createFActionForEachHomogeneous$call: O, w: e/ g3 x. ~# K0 Q
(heatbugList,+ ?3 ?1 S/ C2 {1 D' b; P
new FCallImpl (this, proto, sel,. n |% X) P8 U2 F$ R! t( @
new FArgumentsImpl (this, sel)));
6 N" g2 {7 V% Z } catch (Exception e) { p) H3 P; O/ s7 |( U/ ?4 u& V
e.printStackTrace (System.err);
: ^' n* w; {; |* p/ y1 e }8 z Y" [7 B9 b$ v! h5 O+ k. o
# b% c/ A" S% V4 }" d' S! b( N' i
syncUpdateOrder ();
6 W8 e4 x/ f, E# K' @
' b2 W6 Z0 S: |2 {# ^+ \ try {- ]2 [3 h* W5 R$ z
modelActions.createActionTo$message + C* T7 F9 g1 o3 V, S
(heat, new Selector (heat.getClass (), "updateLattice", false));7 a- J1 K) l5 H9 O
} catch (Exception e) { L+ `7 _5 |6 _
System.err.println("Exception updateLattice: " + e.getMessage ());$ f" z7 v* R6 f1 i
}
( V' b* y1 B/ T( p 6 y* b+ i+ \& H' L/ V/ o" `. R. l2 Z
// Then we create a schedule that executes the
/ Q( Y# p1 g& V4 x. l& G // modelActions. modelActions is an ActionGroup, by itself it/ X4 v: `5 Z7 \! T
// has no notion of time. In order to have it executed in- s! }3 V r3 N; ]
// time, we create a Schedule that says to use the/ q w5 }: `8 l' j) F7 C) m
// modelActions ActionGroup at particular times. This
1 e8 L* c) ]( U- ~- z. ]. W; O# Z // schedule has a repeat interval of 1, it will loop every$ _( Y% I! @9 T9 f+ D
// time step. The action is executed at time 0 relative to7 Z1 M8 F- |- e
// the beginning of the loop.# _! T0 j @% K! N: i4 [2 b( s7 T+ |
) t# L7 F+ @0 \+ Q1 J
// This is a simple schedule, with only one action that is" X# B" J( x+ S5 P& c \
// just repeated every time. See jmousetrap for more
8 D: B+ @+ H3 D, M! {3 A; T* {9 g // complicated schedules.
+ z9 x3 d6 ~# L9 x/ p; O, ^ 2 D5 J& r$ Z0 Y- Q
modelSchedule = new ScheduleImpl (getZone (), 1);, N e. K% J* W( x. E5 j$ K
modelSchedule.at$createAction (0, modelActions);9 A0 a$ h7 Q1 a
& S# Q% V) }% c9 d9 Q2 S
return this;
4 d3 E: M# p. z5 k# O6 l } |