HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 n+ W7 d) U# O6 V! Q a' @1 z
1 q/ T( F' Y( W3 v3 V
public Object buildActions () {
0 _! _0 R: a5 s) D+ G# I4 t+ x super.buildActions();
. ]5 n# L+ X0 }+ p; O ) }" O/ t0 ~' D4 P" ~" f4 G
// Create the list of simulation actions. We put these in$ Y3 x/ o8 D6 I$ Y3 w% k
// an action group, because we want these actions to be' M: @# I0 v. E3 [
// executed in a specific order, but these steps should
- o" ~! Q* T7 u5 e! F* G // take no (simulated) time. The M(foo) means "The message& I& x! f; c2 W3 B) c/ c
// called <foo>". You can send a message To a particular
: _ I. p' v, l! A7 Y( F& F, Z // object, or ForEach object in a collection.3 h% S0 n$ q6 E" V+ i5 A7 p5 N
* o+ ^# _! d+ u // Note we update the heatspace in two phases: first run( e- T( D$ u* U( d: c7 z3 R
// diffusion, then run "updateWorld" to actually enact the
: N- W U, b( {2 b u; n // changes the heatbugs have made. The ordering here is
# \6 z( P k$ @ // significant!: `. s+ X, y" a' b: H; U- ?
/ P" } v2 v+ V // Note also, that with the additional
0 `$ J% B- R% h8 i. _2 l2 m // `randomizeHeatbugUpdateOrder' Boolean flag we can8 q! V, x$ Q3 k" G9 _8 X6 I9 j' `
// randomize the order in which the bugs actually run9 [) k2 e% h% F6 E. p- j, _) { I" Z! J
// their step rule. This has the effect of removing any4 v7 n$ r- ~6 r' F4 H
// systematic bias in the iteration throught the heatbug
7 C% r3 K c: w* U$ t // list from timestep to timestep
! _% h6 p2 H3 B, G + J- Q# g" F+ j7 H2 U$ Z; o: ^4 r& ?
// By default, all `createActionForEach' modelActions have5 [$ q+ e" |" ?& k+ j# l- V3 D; D& r
// a default order of `Sequential', which means that the. y# s& b. C, I" ^5 c5 t3 ~
// order of iteration through the `heatbugList' will be0 n0 \6 X( q# R' \. K
// identical (assuming the list order is not changed) i% Y" q. Q; G
// indirectly by some other process).
, J' A3 ^% `9 y& p3 r* } t
3 D6 ?# @' X$ x modelActions = new ActionGroupImpl (getZone ());, w# e; t0 ?! y( h4 ^
. ] `6 u; j2 J) O: e try {! C2 ?% t+ J; `+ c5 B5 B7 h! G
modelActions.createActionTo$message
2 y+ V4 `/ {& |/ H (heat, new Selector (heat.getClass (), "stepRule", false));
5 R, `9 J; Z7 A } catch (Exception e) {1 k2 m) C) O3 W; B& t) v
System.err.println ("Exception stepRule: " + e.getMessage ());2 l5 b$ U/ o$ s3 Q4 o+ D
}
: r4 q6 Z+ p% y2 ~, {' E: J. ?( p, O1 X) V# l+ |3 w
try {
7 U) v/ w- o& T& k, d Heatbug proto = (Heatbug) heatbugList.get (0);7 r- O& A7 Q2 L5 Q
Selector sel =
3 {' G/ [2 a3 e* f; @; u1 U8 q new Selector (proto.getClass (), "heatbugStep", false);* z9 v9 _1 L4 _4 v, f
actionForEach =# I `! r6 v! j+ r1 {
modelActions.createFActionForEachHomogeneous$call! o% }, ^7 j2 d6 c' B# [
(heatbugList,' ]5 z. \( u8 q1 A9 ~
new FCallImpl (this, proto, sel,
5 i+ d/ A: K; h) N& H r8 {) H+ P new FArgumentsImpl (this, sel)));$ a k3 L1 c v4 }6 G
} catch (Exception e) {3 t& i! Z( o0 L( p
e.printStackTrace (System.err);) D' E3 F/ ?& F
}, U; f. |; p& a3 U& h9 [4 @
# z: g$ \$ u6 j- W, S4 u: [
syncUpdateOrder ();4 P' `. x0 {5 W4 Q) N, m* _
4 @+ G3 S2 y1 @& U
try {
! J* K/ Q' L# \6 g modelActions.createActionTo$message # i3 b8 e1 |: N4 D' f
(heat, new Selector (heat.getClass (), "updateLattice", false));
) U+ m" ^3 k$ \* Z) w9 o" E } catch (Exception e) {
+ [! M2 z& W" |( a System.err.println("Exception updateLattice: " + e.getMessage ());5 A3 i7 L: \5 W% |% x
}. I: M7 r+ Q( i2 u+ G# S1 J( {9 u1 P" x+ n
' u" L( P- E8 t" o // Then we create a schedule that executes the% d, G" d A$ q
// modelActions. modelActions is an ActionGroup, by itself it
n* A7 n, d, J' U7 y2 ? // has no notion of time. In order to have it executed in2 O4 e" I/ G4 N
// time, we create a Schedule that says to use the
[7 f# y6 F O- Y% k# w // modelActions ActionGroup at particular times. This8 {+ b2 h( o" s6 O/ N
// schedule has a repeat interval of 1, it will loop every S r F, p# C1 q
// time step. The action is executed at time 0 relative to. ^/ z$ {. |3 o2 M3 L
// the beginning of the loop.
$ A4 J' m: r+ X' |7 x+ `
! E( Z" Z& Q" L' g3 ]( \+ I) V7 r, o // This is a simple schedule, with only one action that is
* ~3 T/ D/ ^6 i+ L- S: a2 b // just repeated every time. See jmousetrap for more6 W! c" |5 {4 Z* i! A' m6 H
// complicated schedules.) R6 P6 k( W, H* K8 G) ]: g
" k6 Y4 z1 t1 q3 m8 r Z( Y
modelSchedule = new ScheduleImpl (getZone (), 1);
! e. T; Z9 M7 x7 b( C' r modelSchedule.at$createAction (0, modelActions);7 }' T# L% d+ L& {$ X& S6 j* a. J
+ q" E2 G8 U( I5 N% C% F
return this;, L/ c7 X% ]6 O, g" `$ N& ~9 ^
} |