HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: q! k! F1 z/ J
1 s3 z- g+ N! p! |- l: c
public Object buildActions () {
# G: O8 T2 ?5 h; N" j* b super.buildActions();
& Q# E4 j& h* T/ A6 {* H : l* u( l2 `% J- Y( g
// Create the list of simulation actions. We put these in
3 t$ _0 ~* i' G0 Q. S$ o // an action group, because we want these actions to be: C; ^ z# h( A8 a) c
// executed in a specific order, but these steps should
9 n8 f8 i" x2 o& J5 n/ g // take no (simulated) time. The M(foo) means "The message
; c( b- J0 q: `; z // called <foo>". You can send a message To a particular
& K5 A- f6 c( V$ s' ~" X // object, or ForEach object in a collection.& W v4 B. w5 H( o9 Z# G, O
) D% o+ Y) {) l, {/ X# d
// Note we update the heatspace in two phases: first run4 O- _5 X3 Y# W- u: n/ ~+ Z
// diffusion, then run "updateWorld" to actually enact the3 J2 ~; o o y9 t6 i0 W8 t
// changes the heatbugs have made. The ordering here is
' P3 W0 J5 \2 V( W // significant!# f: k8 A. k# x0 `: e/ z
1 ]9 F, R/ k2 J( {( s6 n
// Note also, that with the additional
- ^5 y$ A8 |5 }3 H) Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
" s1 H+ A9 c! r1 p* ~& w6 N // randomize the order in which the bugs actually run8 r) I* Q5 f7 H2 h t( |
// their step rule. This has the effect of removing any
* F0 o* r9 P& d* M' B; I // systematic bias in the iteration throught the heatbug
9 E4 ?8 j" c( S* i // list from timestep to timestep, E. `* Z# X" W! |
( t3 R2 ]3 v1 S3 P% Q // By default, all `createActionForEach' modelActions have9 P i1 T" a# J2 B1 a
// a default order of `Sequential', which means that the
1 R9 T% C& G2 L& N# K; e! | // order of iteration through the `heatbugList' will be
! |% V0 g# d8 k; y' b# _ // identical (assuming the list order is not changed( Q) e1 x& \0 e6 k6 M
// indirectly by some other process).
( u" H* A- h, Q1 P7 S
8 u9 f7 x) h- a+ J6 K7 P modelActions = new ActionGroupImpl (getZone ());* H1 e5 w: v: \( s6 B" b* l
H2 E2 _* t/ Z try {
- H5 p3 Q; E. g s" [( M! T modelActions.createActionTo$message9 G- k- m0 I y' a1 B& {, M! Z# M
(heat, new Selector (heat.getClass (), "stepRule", false));5 t# M6 G4 V3 D) V$ ?
} catch (Exception e) {
' F: Q* a1 y- U# k7 b1 N' g System.err.println ("Exception stepRule: " + e.getMessage ());
7 r; ~9 |' T/ D. J! o2 j% K' N }
$ T) [7 w. \% h* N! m _
9 l4 i2 I- z. Q/ F& G try {
N# }1 w3 M' l, C7 K% |/ M Heatbug proto = (Heatbug) heatbugList.get (0);
$ t8 o" t! e. p' G( n/ o Selector sel =
/ P3 @; t U9 l1 \7 B/ A new Selector (proto.getClass (), "heatbugStep", false);, {: ?3 Y) Z F
actionForEach =
0 V" J8 ^7 @1 z: J2 K1 F; T2 m modelActions.createFActionForEachHomogeneous$call
3 |, Z. r, Y; \7 H9 q, p (heatbugList,
- a8 d9 T% {4 f" g9 i5 M" f new FCallImpl (this, proto, sel,
! \4 L5 b6 H7 I f; F new FArgumentsImpl (this, sel)));
( \ i& H/ z" n+ F8 c3 L: }, n } catch (Exception e) {8 ?# D- d0 R* }' E6 q2 |
e.printStackTrace (System.err);
" e4 j9 t$ H' @, T }
4 Q3 { Y2 z; t3 H0 {! p1 S# O# ~+ N 6 X0 T* l( I# |
syncUpdateOrder ();
: R( R" o3 ]5 o7 G. w
- ]* N0 w% Y1 |1 J try {& \% M4 `& d' c; D2 l2 K) @
modelActions.createActionTo$message ' \- u3 g8 W( {+ ?& z/ o
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 Q( P8 l" \) @, ~ } catch (Exception e) {
/ M" Q1 L& V9 u% z$ _$ ` System.err.println("Exception updateLattice: " + e.getMessage ());
6 l3 ^6 A, o, D4 E# A7 o: h) \3 A }* ~; _6 x; O9 q0 e1 T
4 N* A! b) x; u7 `
// Then we create a schedule that executes the
% J2 v- H- _; \& L; G/ ~7 z, ? // modelActions. modelActions is an ActionGroup, by itself it+ V v h1 m% v+ ^; M% u2 b
// has no notion of time. In order to have it executed in
" G' }# y0 u2 M& x // time, we create a Schedule that says to use the; g. f' H3 D$ A" x
// modelActions ActionGroup at particular times. This
1 a8 }! y7 i% H& M; A7 A! V# I# w // schedule has a repeat interval of 1, it will loop every( ?( L7 [& V: I6 }) v) f; ]
// time step. The action is executed at time 0 relative to2 ?7 n+ p5 j4 g3 b( A% Z
// the beginning of the loop.
' |+ ] {- l! D1 W
( T. u8 s, {0 G* Z // This is a simple schedule, with only one action that is+ O, \0 W& V$ z9 s: s; m/ B2 ~ U
// just repeated every time. See jmousetrap for more
! K, @ j* v; C* _, @2 z // complicated schedules., i' N) x3 V2 u$ c4 d% [
6 L! q8 K2 `( y+ a* b `
modelSchedule = new ScheduleImpl (getZone (), 1);
, _; o' D- Y' ] modelSchedule.at$createAction (0, modelActions);& f7 t0 U3 i9 t
8 j9 |1 ] E7 G# m6 x3 r' G- l% w return this;
* M0 `+ F! j8 k" B9 Y! V1 O- D } |