HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 a7 j; G% D% o2 G& K! c- @
) G" X1 B8 H8 y' H+ N! d% \1 P public Object buildActions () {
4 V$ t* ]5 o r: k super.buildActions();1 N2 I. I Z- B R
6 M9 ^# L5 e) T+ i8 z! f* a6 a, I
// Create the list of simulation actions. We put these in7 b3 S. B8 l9 v. ?( q {
// an action group, because we want these actions to be
; [* h& U$ ?; }/ }6 J& U // executed in a specific order, but these steps should& N5 g5 @" ?& v* P
// take no (simulated) time. The M(foo) means "The message6 L( `; n, ]& z' E3 S5 T' j0 S
// called <foo>". You can send a message To a particular( c! l+ m0 D8 T6 s
// object, or ForEach object in a collection.- N% L1 V j- I! c" i
) q2 F' Q3 K4 k" q e // Note we update the heatspace in two phases: first run
' L6 N9 Z0 h. D+ ^ // diffusion, then run "updateWorld" to actually enact the) Y$ |3 @ F, J5 M& @
// changes the heatbugs have made. The ordering here is
# e. t% ]5 `" F5 Z# j" t) ]* y // significant!
2 l; u; m5 j4 @1 Q, x6 c' u
* ~4 H* _! y/ c/ B // Note also, that with the additional
4 `# [0 X8 T. a3 h' F+ L$ F // `randomizeHeatbugUpdateOrder' Boolean flag we can
, e1 n- d9 y4 ^0 `0 x2 ~, B; A // randomize the order in which the bugs actually run
9 v- n" B L0 g! I2 V) Q // their step rule. This has the effect of removing any
$ i; f7 n: x; C' d // systematic bias in the iteration throught the heatbug
4 w0 o/ X, b& ^. F; y // list from timestep to timestep0 k+ o2 t7 ~. V( j( I
. K3 @/ V8 ]; F9 h, @/ z
// By default, all `createActionForEach' modelActions have* B5 E c4 o. l, q6 J5 q
// a default order of `Sequential', which means that the3 q+ v# X3 e( Y. w# N2 K
// order of iteration through the `heatbugList' will be4 j5 |' x+ b. u
// identical (assuming the list order is not changed0 O3 l9 p0 {: r1 H G. w& U( ~
// indirectly by some other process).. U5 ]7 Y: [/ t Z+ ^
Y: y0 w9 x: o+ `8 y
modelActions = new ActionGroupImpl (getZone ());
& e; w& N9 @* l" K! O/ `+ {
0 o, V4 z( m; p7 ^* B$ J try {
2 U8 E+ }$ ] q: K8 }! L/ h modelActions.createActionTo$message
8 f& Z5 w3 i! S, t9 B6 j% V (heat, new Selector (heat.getClass (), "stepRule", false));
& h* Q* m q Y9 o } catch (Exception e) {
# _. @: H3 N/ A! l; ~& W System.err.println ("Exception stepRule: " + e.getMessage ());
9 @6 d, j' N4 [ h: I }
" J2 h0 L9 l w" R/ |1 W6 m: L( \
4 V8 B9 e: c+ ~$ d try {6 k [ o* N0 W. x+ B
Heatbug proto = (Heatbug) heatbugList.get (0);6 }7 q+ m3 W d, r8 ^$ s2 I7 z) L
Selector sel = ) ?- g' M- n) z/ K" n8 F% c
new Selector (proto.getClass (), "heatbugStep", false);
9 Y' B. s! ^- K actionForEach =
" O* X( w: @* ?, ]4 e modelActions.createFActionForEachHomogeneous$call5 w: H6 D6 D2 x
(heatbugList,) f" }2 y# g# Y) k
new FCallImpl (this, proto, sel,3 y; O) j0 m, s0 k- v
new FArgumentsImpl (this, sel)));8 w8 k- C2 `+ p# n
} catch (Exception e) {, w( V$ C$ c4 v4 `/ B% p8 A
e.printStackTrace (System.err);
/ V$ a# F0 a1 t* N }) ?- D2 d5 c4 g% |( P y8 ?
. Z& i* y: b& h2 k Y
syncUpdateOrder ();
+ p- Q4 f. j# H F4 k1 Y( C( ^- t: N% m# |8 `, t$ I$ {
try {
- `( G. E" I R# j1 R, Q modelActions.createActionTo$message & o- i K: k1 T
(heat, new Selector (heat.getClass (), "updateLattice", false));! b; Z- g3 Y. L* w/ \) U0 Y
} catch (Exception e) {
* m4 N4 k4 P3 r( V" F+ i+ z System.err.println("Exception updateLattice: " + e.getMessage ());
- y/ S# ~+ R) h+ P }/ ?0 A ?9 n6 ^8 Y6 H! k( G
; Q2 B( H) n: O; v8 O1 h" a% |/ N // Then we create a schedule that executes the# u; X( u, Y: _ \
// modelActions. modelActions is an ActionGroup, by itself it% j2 D0 @' e1 A, @+ I( S
// has no notion of time. In order to have it executed in
: M: V4 {" @3 K, x, I; N3 Q // time, we create a Schedule that says to use the9 v# f9 r# D! B, y! K
// modelActions ActionGroup at particular times. This, K" p7 ]0 F/ g$ c
// schedule has a repeat interval of 1, it will loop every3 B: w J7 R: b' H9 `4 g) Y
// time step. The action is executed at time 0 relative to" T. G' f& j( Q' d/ ?
// the beginning of the loop.2 R7 w6 {5 q/ z, K$ Q5 M9 b2 T) y1 |# C- A
5 {" b. B6 B3 H0 t* o6 [# L
// This is a simple schedule, with only one action that is& {" g! ~7 `; r! C/ A% j H4 H
// just repeated every time. See jmousetrap for more8 ~9 M: A/ T/ U, z( h
// complicated schedules.; a4 q4 f7 B$ Q
+ D; V; z) g3 e& O modelSchedule = new ScheduleImpl (getZone (), 1);
* m; E3 T$ } t1 `( A8 Z1 z% T6 a modelSchedule.at$createAction (0, modelActions);
& }$ s; w4 }) ~: `' f/ c: u ; f: B# ?) ^% p; k
return this;/ y) D7 \0 l) p$ e5 [9 f% h; O- b2 o
} |