HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 N0 y# I, B5 X. ?9 {
6 M: Y: N& ~; }' [7 Z
public Object buildActions () {
5 E* b2 d& ]9 c8 M2 n9 w super.buildActions();+ B6 R" j$ n7 M' w8 `0 _
8 T& c9 t j4 S; ~
// Create the list of simulation actions. We put these in: t- G8 u8 B8 n" W% g$ E* n
// an action group, because we want these actions to be/ p# l" l/ a. E7 g7 `! f. d
// executed in a specific order, but these steps should- v: J; R2 j7 k+ _4 i v
// take no (simulated) time. The M(foo) means "The message
5 e8 t1 b" M" C3 y5 I // called <foo>". You can send a message To a particular+ y+ E' a0 }! |; K, P% s
// object, or ForEach object in a collection.
* c; l/ i) [# X: U) @7 |) s& W ' Q L' F( w* l) A( I3 O
// Note we update the heatspace in two phases: first run3 f8 t$ w8 [" z) m
// diffusion, then run "updateWorld" to actually enact the
4 I! ]* r7 Q& R' m7 }. n // changes the heatbugs have made. The ordering here is* c% D2 O3 _, ?. w
// significant!
5 V# D8 }# f4 m0 T
`% B) O7 n8 I8 I# A% g // Note also, that with the additional! T- |! ~$ C& t4 h
// `randomizeHeatbugUpdateOrder' Boolean flag we can: n7 o2 g Z+ e
// randomize the order in which the bugs actually run0 j5 j' k0 ?( t; g
// their step rule. This has the effect of removing any
4 l" D0 F5 U- K0 @* `2 ? // systematic bias in the iteration throught the heatbug
4 D; G. j; N% U# o // list from timestep to timestep
4 y/ x. U4 M9 L# f" B : b4 j* ]+ c u, B
// By default, all `createActionForEach' modelActions have. R* l% e# E# v: X
// a default order of `Sequential', which means that the5 c9 k$ Q- |5 D) j+ r8 c) `
// order of iteration through the `heatbugList' will be
; n+ ?9 e# L4 r! {' ? // identical (assuming the list order is not changed+ y' f$ R( ]: L2 w% {
// indirectly by some other process).2 k) z+ r1 V5 K, w; E. U1 T ?
8 F, j9 v* b- [) {# W
modelActions = new ActionGroupImpl (getZone ());* v% M U1 J# t) F- C6 s; z
* f+ K1 W! _5 G7 o2 h( e2 l- Y try {
4 ^0 a& Y8 }& C. Z modelActions.createActionTo$message2 U' p4 L& X( k0 f& N( ^% T& a
(heat, new Selector (heat.getClass (), "stepRule", false));+ ^3 H- l p! m$ n0 U
} catch (Exception e) {
+ G4 H# d" n G- A `3 j System.err.println ("Exception stepRule: " + e.getMessage ());/ ~/ D+ O$ x2 S6 v4 B! h
}: d4 @) i% a0 o) t8 S
0 W( H+ K9 \7 K+ C1 v
try {
. a2 o7 G: c4 R' i; ~# y Heatbug proto = (Heatbug) heatbugList.get (0);
9 e L* g2 U- W" j Selector sel = " l1 t; \) z2 |. ^
new Selector (proto.getClass (), "heatbugStep", false);
7 h, O1 V y% D8 w+ S8 y actionForEach =
' F+ O! u* m* g: L& L modelActions.createFActionForEachHomogeneous$call
- q* m0 ]/ K* @ V5 \# @( D (heatbugList,
* E/ j2 {7 y; @, f4 R' O new FCallImpl (this, proto, sel,& g2 p: I" }7 l* ]
new FArgumentsImpl (this, sel)));
" E# u* I6 ?2 [ } catch (Exception e) {, M5 @0 t2 [5 X5 n) @
e.printStackTrace (System.err);) A( z6 j* U3 j
}
i+ }: _; l1 A) B
! K1 H7 i( |7 t0 f" z$ t1 \! X syncUpdateOrder ();
) [$ \. N- y. }, J8 Z u0 X. C5 k5 l: h. z# W3 B& _
try {
) ~1 R5 y$ m. n6 J" S/ b modelActions.createActionTo$message
0 f+ ?& \+ V8 j3 W, }5 Y i! k (heat, new Selector (heat.getClass (), "updateLattice", false));
! M+ a5 G3 G1 u2 _ } catch (Exception e) {
* ~1 I" o3 ^" p' f& s9 h System.err.println("Exception updateLattice: " + e.getMessage ());
6 E. i6 Q0 m& L3 S& @( s }# B4 }6 h/ d3 I2 M, Y
* p: [. ?% O7 v) B2 h // Then we create a schedule that executes the
3 d5 ]& W! a3 o+ \: K# q& e+ N // modelActions. modelActions is an ActionGroup, by itself it
4 g, N2 O- l- c* ^3 { // has no notion of time. In order to have it executed in
, ~1 j% Z/ f' o/ V. ^" q // time, we create a Schedule that says to use the
. `7 j- l) [ Q // modelActions ActionGroup at particular times. This b# L6 D/ D' x7 |# y3 L" b4 s+ f0 R
// schedule has a repeat interval of 1, it will loop every6 ]% H5 F" h& `) o. e: K$ u7 F
// time step. The action is executed at time 0 relative to
( X& _+ Q& a7 P! c* S0 B // the beginning of the loop.$ e- h" A& }" A' P# N# u- C: k9 L
! g! {4 {" C; q: [) d
// This is a simple schedule, with only one action that is
; k0 P1 @ F) z1 o' m // just repeated every time. See jmousetrap for more
t( t2 `7 ~5 {/ e/ y // complicated schedules.
6 r7 d( [% i. i) l : ], ?0 N$ Y# \ ^! n* D
modelSchedule = new ScheduleImpl (getZone (), 1);
! Y, c1 b: K. G; i9 S1 u k modelSchedule.at$createAction (0, modelActions);& U5 M" y+ Y( Z
; F% T% `# K }7 W/ R8 B return this;9 Z' L+ d! ^8 k- v X
} |