HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) L, G, G+ V V+ [( }
/ a7 x3 X2 d+ ^3 F a# q public Object buildActions () {: G; W ?& H \, ~, @
super.buildActions();
3 Z6 u: k/ {$ G8 X# F/ z* I; }3 N( A 0 B" K4 ~5 j2 h2 ?
// Create the list of simulation actions. We put these in, n+ t( L' p' c0 ^
// an action group, because we want these actions to be
0 y) `8 m& ]4 Y6 V // executed in a specific order, but these steps should$ [& l/ R: f; V% b
// take no (simulated) time. The M(foo) means "The message+ u5 G5 R7 B+ ~( S8 T
// called <foo>". You can send a message To a particular
- R, W3 P8 @# x3 j7 q o // object, or ForEach object in a collection.1 D% Q% X: c# B/ a- O( G
0 a! N* x9 W9 n9 L: B, |' {% `% m // Note we update the heatspace in two phases: first run6 W! r# |. N5 V6 a0 H9 P2 f
// diffusion, then run "updateWorld" to actually enact the m! \$ W1 e. y" [( R! p
// changes the heatbugs have made. The ordering here is4 f4 l) O4 c) S: K& k; V2 S, x
// significant!# B) b8 k; J, o+ F5 L5 G
: ^1 E' r* g7 v // Note also, that with the additional
0 G( Y) L" ]* F( R" p" P // `randomizeHeatbugUpdateOrder' Boolean flag we can6 V( M$ `: P, H0 C% i
// randomize the order in which the bugs actually run. @1 k, Y! Z& Q7 n
// their step rule. This has the effect of removing any
+ U& M! s3 N% w! a/ h8 ] u+ e // systematic bias in the iteration throught the heatbug
1 d( ^) k8 M; W$ ]+ Y // list from timestep to timestep K% y& d1 [3 s' ~
$ l& h5 a4 Y0 S# {
// By default, all `createActionForEach' modelActions have# ^1 Q: n) Q8 M, Q7 y+ Z$ z0 E
// a default order of `Sequential', which means that the
5 T# x3 T' M! w2 ? l; x7 Y: E // order of iteration through the `heatbugList' will be' X) J3 G; x6 l1 Q+ N0 p0 P; O
// identical (assuming the list order is not changed- P' R- f' w; B. t* n0 o) c* Z
// indirectly by some other process).
O$ H1 U* Z t 3 h- x+ a* K, R5 }5 q2 k
modelActions = new ActionGroupImpl (getZone ());6 L! S$ [" ~' l- t5 [) R) V8 r
" V% s; o" Z: X( n& T- Q
try {# q, D4 \5 d# n
modelActions.createActionTo$message" u. U% J6 K/ ^) h) m
(heat, new Selector (heat.getClass (), "stepRule", false));( n- M+ n* y) L) C5 [
} catch (Exception e) {# O7 n* g, l) Z3 E
System.err.println ("Exception stepRule: " + e.getMessage ());
, j6 b2 X5 a B: S" W, g5 u9 ~ }
, s- s3 C1 `4 u8 D; V9 l! p/ C: i) g3 O0 z/ F9 e; m
try {( ^7 D7 ]- z( W0 v; \* y. l
Heatbug proto = (Heatbug) heatbugList.get (0);/ a1 o; c/ @! L) H& h/ J
Selector sel =
" a/ S7 v/ u0 m7 [2 t! b l new Selector (proto.getClass (), "heatbugStep", false);: B, j, ~2 d W1 Q: a
actionForEach =1 r' b9 g+ T! }; d5 U, o: x4 Q9 L3 L
modelActions.createFActionForEachHomogeneous$call, k' X, p# a3 O. h. ~
(heatbugList,( G/ a1 m* ]$ n) {2 `8 a# j$ q
new FCallImpl (this, proto, sel,
. P' x, i3 P% K) v6 w5 s& C T. | new FArgumentsImpl (this, sel)));; Y+ q/ n' n5 |* p( G
} catch (Exception e) {
$ { n( B5 K* r. w! \' v e.printStackTrace (System.err);
3 ^) e& u9 @6 ]5 K* p; M }
5 G$ R F/ J$ U
3 A' A' q0 h2 h; `" E- v4 z syncUpdateOrder ();
3 t5 s" g3 H/ G r( a5 _, f' W/ v( F, H2 H
try {: H, h* w! I$ D2 n2 I0 s
modelActions.createActionTo$message
! w9 d$ o9 G& S1 f6 ]% j (heat, new Selector (heat.getClass (), "updateLattice", false));
; n8 y \* B6 ?/ g7 n } catch (Exception e) {' _" Z/ ^4 Z0 z% j# @8 b
System.err.println("Exception updateLattice: " + e.getMessage ());
8 }5 e' E0 t' d" I' m }
. d9 O8 }! R* t8 i, m9 d {' y
) j$ {* G# R; \' o: d# G& o% g // Then we create a schedule that executes the k) Z" ~# i" K: F6 ~ c$ g
// modelActions. modelActions is an ActionGroup, by itself it& k2 @' m* O' [ F
// has no notion of time. In order to have it executed in+ ?2 K) G& k; F6 _) e6 V% t
// time, we create a Schedule that says to use the2 h1 |# }8 t( E
// modelActions ActionGroup at particular times. This
6 z% f* B4 A' X, C, j6 w* ] // schedule has a repeat interval of 1, it will loop every- u" G8 i& d5 ?. X1 f9 P: W5 \9 q4 K
// time step. The action is executed at time 0 relative to7 A2 U3 ?9 T, [4 L
// the beginning of the loop.
" O1 J& Q! g2 U4 n
) H$ A! ~3 Z2 W/ U4 x0 t // This is a simple schedule, with only one action that is6 j0 `' N# z r' s
// just repeated every time. See jmousetrap for more- k& H% D- D3 j' q7 m3 ^: ?& R1 V/ E
// complicated schedules., S3 i$ m8 e4 O+ \% c6 ]
" {8 c8 y9 U9 m7 s% g3 D$ X, O modelSchedule = new ScheduleImpl (getZone (), 1);
' Y( t4 a2 D' t H modelSchedule.at$createAction (0, modelActions);
4 d2 E7 ~" u5 }6 R. ^
9 ^; h4 B: [4 P8 w/ s return this; W1 J5 U# h+ D8 {0 z g
} |