HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 z* |; G/ o P7 s9 f
, S$ j/ q2 V8 f4 s" V# t% M( w
public Object buildActions () {
1 s$ O5 ~. Z8 g3 H6 Y super.buildActions();9 _. t+ F. v% O. {
& ]! f) H: R: I // Create the list of simulation actions. We put these in
; S$ \4 \0 z+ R+ U& {% r // an action group, because we want these actions to be3 p& {$ I3 w2 h4 i1 M; i
// executed in a specific order, but these steps should
; o' w" C- u# \0 H. x0 v4 _, Y' Q // take no (simulated) time. The M(foo) means "The message
. J# a& C. h: E* M0 Q7 G& P5 A3 ^ // called <foo>". You can send a message To a particular
5 T& e6 _* n d, i a // object, or ForEach object in a collection., ~( ?" G: ]. r) b) t
* X- S9 e% P' [1 D2 y( _ M // Note we update the heatspace in two phases: first run- A9 X" E3 \' K3 `# l- L* ?" d
// diffusion, then run "updateWorld" to actually enact the& N& ]; J& |1 J$ E6 a
// changes the heatbugs have made. The ordering here is
1 t# [9 O# Y+ l2 E0 x0 W D' R k // significant!
V; X3 H( \9 H, x- W. v 4 [6 f! ~! Q5 V* |+ v: [' |% U
// Note also, that with the additional3 ^5 _ D; I% s. d- y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# V7 A; O, U5 U# N& {% d // randomize the order in which the bugs actually run0 L5 c% l, H1 m
// their step rule. This has the effect of removing any T! _ d T7 f
// systematic bias in the iteration throught the heatbug
/ I, w3 a2 K5 S8 Z m5 h/ p1 A7 z // list from timestep to timestep
) c! G' {/ Q% X7 s1 P* o8 e
* l, M) g6 g9 |. M+ C: r! _! f2 D // By default, all `createActionForEach' modelActions have
; [ |2 @0 S0 L, E // a default order of `Sequential', which means that the
1 v- Z( D* X# f8 P // order of iteration through the `heatbugList' will be
. b! z6 e8 b2 T6 G# b' I) [ // identical (assuming the list order is not changed
4 R. A' b1 D9 _) L5 e$ ~ // indirectly by some other process).
6 l* ~* l, M; A / Q" p) X3 X5 K' l, s q# }7 t
modelActions = new ActionGroupImpl (getZone ());# x- U% @9 H3 |7 d6 m( ?8 D
3 e ~* _; f0 X; _+ ]
try {. Z# S3 U; F8 b: M+ y
modelActions.createActionTo$message' R/ U, B1 D& X6 \
(heat, new Selector (heat.getClass (), "stepRule", false));
: B3 F! H* I% B+ t } catch (Exception e) {
& M7 W3 A8 _2 a System.err.println ("Exception stepRule: " + e.getMessage ());- D' `- u1 H4 H2 C h3 @
}, Q- e8 u% _( V0 v/ y
" L1 H" s. X R) b! K
try {
" ]" G# X ?: s' |: B" F: B/ h Heatbug proto = (Heatbug) heatbugList.get (0);! }; g& i) j0 q6 T1 m$ E; H( b
Selector sel =
$ q2 a) A7 R/ { \. V new Selector (proto.getClass (), "heatbugStep", false);
! ^# q$ [; }1 h5 [ actionForEach = |+ U: n& U3 X: R4 A0 p
modelActions.createFActionForEachHomogeneous$call
0 t* n/ N' ^ i8 i; K6 h (heatbugList,, v# B- z0 a- U* g x! `
new FCallImpl (this, proto, sel,
% f; M2 R* p% c) P6 X new FArgumentsImpl (this, sel)));% S. u) R" K* t6 d' F3 b
} catch (Exception e) {3 a5 V X; d L' p5 Q7 L" A* e/ d
e.printStackTrace (System.err);. c( \, E, V8 j3 x5 z
}/ a5 Z3 k) y d/ C$ Y7 ?- j; M
: }3 [7 R7 \. m0 \9 `5 E
syncUpdateOrder ();
* j( N! ]5 t9 Z' ?8 h7 G
7 L3 r, G3 y/ D% D7 |+ D6 o try {' e7 j1 d+ x1 T* Y. f' s$ |
modelActions.createActionTo$message
X1 A" P7 y) j+ D9 ] (heat, new Selector (heat.getClass (), "updateLattice", false));
* X2 X- J; v" M! r @1 q } catch (Exception e) {
+ S8 h$ w8 [/ r! D! e5 ^2 g* D System.err.println("Exception updateLattice: " + e.getMessage ());( l5 B, }. t: B' }9 _! g
}5 F1 a! U& P' N, G* o
u4 F1 \4 @6 }9 {5 V! J& u // Then we create a schedule that executes the
5 v8 c, A9 s5 q2 h$ l // modelActions. modelActions is an ActionGroup, by itself it
Z, _7 L+ ]7 z // has no notion of time. In order to have it executed in
4 C$ |$ k* J6 R/ l" t1 S# g b3 G // time, we create a Schedule that says to use the n, k, c- B8 X- W# K: Z4 z
// modelActions ActionGroup at particular times. This
$ i9 n: K: N; C // schedule has a repeat interval of 1, it will loop every7 J7 H% Z$ G6 u8 J8 i
// time step. The action is executed at time 0 relative to- K# ^0 Y2 H. E* I: }
// the beginning of the loop.- U1 E A. z/ ], G2 v l) h+ \5 a3 B% S
& }) F3 x, h* _9 Y1 |! W
// This is a simple schedule, with only one action that is! c7 o, v; p) q( V2 q
// just repeated every time. See jmousetrap for more
/ E( i0 Z; s3 I$ i9 A // complicated schedules.; A( R' u0 v; i; Q" Z
3 u" |; U1 `4 Y) T
modelSchedule = new ScheduleImpl (getZone (), 1);, C) [' K. @: l% p9 {4 |5 M
modelSchedule.at$createAction (0, modelActions);6 v1 d; K6 h$ i2 _1 N8 J; Z F3 D
0 @6 ^& }: R/ I6 O4 A. P, ]! g return this;
& p w5 N2 m% s6 ~5 d/ P1 ^5 L y } |