HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ ?9 U: \3 h: D5 Z
& ?" f+ q6 v$ T! g public Object buildActions () {
# \. t$ H9 M- G S- f- | super.buildActions();5 X" F8 I( S; A9 c- y8 p
/ \0 h! l. ~4 Y3 y4 i# Z( e // Create the list of simulation actions. We put these in0 ~/ k& I1 ]4 N8 q! T& g; }+ r$ ?
// an action group, because we want these actions to be. @3 d+ s, N9 P- L4 z1 s; Y# g
// executed in a specific order, but these steps should3 e1 `) c) K* s) b
// take no (simulated) time. The M(foo) means "The message
, e# @9 E' y, t& }# n // called <foo>". You can send a message To a particular# q d$ j2 |( Q& ]: B, q( {
// object, or ForEach object in a collection.
, z/ h4 z% E4 G2 Q4 @/ P R: m
1 c/ A5 |: S4 |+ q: t5 I // Note we update the heatspace in two phases: first run# p# a' D g1 v$ y% M2 u, V: v
// diffusion, then run "updateWorld" to actually enact the. e& s* \- X( {: p! W' L
// changes the heatbugs have made. The ordering here is
' H0 L1 F8 w4 N- N // significant!
7 `5 N3 Z& t& \; `! I, [# X
, @) z/ [' \1 k' t2 B2 u# \1 {$ K // Note also, that with the additional
! ^9 |2 m& `- s4 O# f& R, s: k4 f // `randomizeHeatbugUpdateOrder' Boolean flag we can5 @# x6 T- u6 |, r
// randomize the order in which the bugs actually run
$ G! A3 z! ^9 R // their step rule. This has the effect of removing any$ {- F8 `4 C4 `! e
// systematic bias in the iteration throught the heatbug
8 q" e0 X+ v2 [6 O ]5 A // list from timestep to timestep
0 l) p) {4 G* v
, O! q- V# d- k9 |2 S5 ` // By default, all `createActionForEach' modelActions have
$ n& {% z0 G5 t i; I // a default order of `Sequential', which means that the( {. g: G _2 O1 |( K! ?
// order of iteration through the `heatbugList' will be
8 r7 K% K6 {2 H" I$ [# A! F // identical (assuming the list order is not changed y$ s( r$ N0 l
// indirectly by some other process).# I2 B/ D% X) m. Q4 c
3 ?; K5 ?) w+ r modelActions = new ActionGroupImpl (getZone ());
9 N2 }/ q* A5 f* } v/ W2 _: B0 U C8 \# ~, f
try {! J* f" E. G' r+ q- j, f( u
modelActions.createActionTo$message$ q1 u* B6 G+ j1 ^8 }; {! n
(heat, new Selector (heat.getClass (), "stepRule", false));
8 W5 s( ?5 p3 P3 i* H& A } catch (Exception e) {; x* u% T/ f2 y0 `2 \
System.err.println ("Exception stepRule: " + e.getMessage ());
- U+ C1 ~, |, c0 ?, i/ Z }
+ `( f' ^) \# _1 z6 m/ p2 t+ ?
try {9 f3 o) Q: r7 [5 }! Y( a7 D
Heatbug proto = (Heatbug) heatbugList.get (0);0 T5 E; X! b* S+ s+ i2 Z' w- C
Selector sel = ?$ V H: ~6 Z& p6 @" W9 D- o
new Selector (proto.getClass (), "heatbugStep", false);
0 @6 A4 E! B4 Z0 a3 l6 A D actionForEach =: J r! u. j* N. Y! C
modelActions.createFActionForEachHomogeneous$call
# B! w/ o- `0 y) | (heatbugList,$ h/ E, h. e2 G# t
new FCallImpl (this, proto, sel,6 ~) H0 d# m9 N% i8 n
new FArgumentsImpl (this, sel)));0 H* Y @. I% y$ {
} catch (Exception e) {# C1 [4 J2 U+ o) [$ E
e.printStackTrace (System.err);+ q4 h, }8 O& [) V" U7 C( R
}' P# J; E5 A) h' {9 g6 p0 r3 L5 X
' |. }( I* I( v2 E; G+ o4 \
syncUpdateOrder ();
. t6 y3 C) E3 `5 J P* \9 ~' ?. r8 l0 m. N" Z8 n
try {% d( m) m" a, J3 ~9 r! i. y6 t, w1 @# d
modelActions.createActionTo$message . O S4 U; }2 b$ l8 k
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 `1 c6 N A: Q7 u- m$ j% V; i5 q, u: h0 T } catch (Exception e) {
" i/ h( ~( X* h @) ? System.err.println("Exception updateLattice: " + e.getMessage ());1 O# G4 J$ j7 S9 H4 g, d$ N
}1 M& p4 i9 H. ?9 Z- U) e( \
) i% @) [0 m$ U5 t; @ // Then we create a schedule that executes the
' Z7 N% b% _7 v5 z7 Y // modelActions. modelActions is an ActionGroup, by itself it
7 d$ v# u5 _( z6 ]; G3 R8 }4 A // has no notion of time. In order to have it executed in
2 O C$ Y- U C+ w2 p/ W1 I8 m // time, we create a Schedule that says to use the6 Z F: N4 S! i- J
// modelActions ActionGroup at particular times. This, V$ I7 _/ V4 T' ~
// schedule has a repeat interval of 1, it will loop every
( C( H- t+ L) I7 X: \9 m // time step. The action is executed at time 0 relative to" k+ n! V' ?/ a) E ~0 [
// the beginning of the loop.
: q. \# w. s( z5 {/ I" j+ [) K/ ^$ g* d+ @8 M
// This is a simple schedule, with only one action that is. N [4 r9 ~1 j- v
// just repeated every time. See jmousetrap for more
6 W2 t: _9 V2 ^5 D: k- O* h // complicated schedules.! Z; q( p* Q3 h$ `& H
4 z2 t c. J! u. [: S" ~; ~ modelSchedule = new ScheduleImpl (getZone (), 1);
* a6 Z/ i' [; u- D modelSchedule.at$createAction (0, modelActions);
6 z+ ?8 Z1 S4 _! r) X
+ A- ^3 p2 A% n# J8 r+ ]1 x return this;( B2 w8 K: G+ i/ y
} |