HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ ?/ Z9 ^) c+ j' l1 W3 M( p; f; b$ u) x; K, I
public Object buildActions () {2 z. W8 V% J+ D) s* ^
super.buildActions();' U6 S* f" e1 k* L6 O* \$ ~ L
. }' p7 j9 `% I6 [6 P
// Create the list of simulation actions. We put these in
: q! t( k' v- U& x" o; ?- ` // an action group, because we want these actions to be
: ^. |0 r- Y1 x" `# L1 P1 t }) m% n0 f // executed in a specific order, but these steps should* H6 z! V, c4 V" h9 G* I
// take no (simulated) time. The M(foo) means "The message- @ ?2 h- Z2 f% |1 S$ `% J) ?
// called <foo>". You can send a message To a particular# G' r7 S- M4 c8 `/ Y+ }
// object, or ForEach object in a collection.' P: c6 D) Z7 I2 A
$ a9 r8 a5 L+ R$ ^ // Note we update the heatspace in two phases: first run
8 d6 e3 i/ q7 F0 g: U // diffusion, then run "updateWorld" to actually enact the
; v/ d" Z, e7 E( E5 h: G // changes the heatbugs have made. The ordering here is. x* F, O4 |1 l+ z
// significant!" p' C! A# f6 m! ^! O
4 o9 V. U4 P0 O& f# O
// Note also, that with the additional
0 d- k7 C3 q" Y i \ // `randomizeHeatbugUpdateOrder' Boolean flag we can8 z5 I2 A6 O, P+ Y; D
// randomize the order in which the bugs actually run
# O; N! P' t2 V8 ^ // their step rule. This has the effect of removing any
* b1 `" K8 O t A3 m& Z // systematic bias in the iteration throught the heatbug/ f$ N4 m$ b% f
// list from timestep to timestep
, T. d) j) L4 ~; t
g k1 K, ?+ z! K9 Q. Y0 j4 U // By default, all `createActionForEach' modelActions have
( Y6 u9 p/ W. L% }& g9 a- d8 f3 ? // a default order of `Sequential', which means that the; U' }- \: \7 f. r, K+ G
// order of iteration through the `heatbugList' will be( V- q' L' P; v9 ^
// identical (assuming the list order is not changed) @9 _& H) |! {4 ^& ~6 k6 X, k
// indirectly by some other process).
# P. ?% ]8 s' N( z& H# w2 Z. x
. }- g' W" T- B$ t modelActions = new ActionGroupImpl (getZone ());' s/ [" n1 S0 N
; J$ f" K: _ T+ T1 n try {2 k9 A7 T# q* a9 \- K; a' t
modelActions.createActionTo$message
) N7 o- |0 r7 v* z (heat, new Selector (heat.getClass (), "stepRule", false));
1 N) U2 s" {) A1 ? } catch (Exception e) {
: k+ U0 G0 @7 q( f4 X" \6 p System.err.println ("Exception stepRule: " + e.getMessage ());: n& i d, \# w% Y" q1 s& [/ E
}
9 y* u1 c( L5 C9 P% F. T0 f. \. C6 l9 g# d, |' d" ~
try {
/ W! s# u+ Q: w Heatbug proto = (Heatbug) heatbugList.get (0);+ \- C5 X: n) q9 d5 M$ y5 F# U
Selector sel = 2 { v# n( p# x
new Selector (proto.getClass (), "heatbugStep", false);
, N. G! A! j; z5 u- b# f$ I actionForEach =
( W9 {* V( v! _/ I% p/ L+ r$ [4 a/ l3 G modelActions.createFActionForEachHomogeneous$call
0 ~: p0 r) \: ^4 R6 M) s, h (heatbugList,% j/ M# E$ H% G$ w: ^! ~( U
new FCallImpl (this, proto, sel,
7 n4 R9 _! J# Q' Q+ y new FArgumentsImpl (this, sel)));6 I" V' m, \' I2 [7 H8 m S- }0 g% a
} catch (Exception e) {1 ~5 G3 B, q K5 |8 L
e.printStackTrace (System.err);# k8 Q( V, x& R! T5 l7 U# E
}& K0 I' p$ h" ~6 d9 P6 y Z
# _: x( Q4 n9 _; S1 D+ S syncUpdateOrder ();
) j e8 f! E/ D- m4 Z$ p; J g3 W% O# {2 ~. Y
try {
& t/ b. T) H: r modelActions.createActionTo$message + R1 H* G$ ?, V2 p. z' J
(heat, new Selector (heat.getClass (), "updateLattice", false));
) _5 |' V+ z" E; K4 p } catch (Exception e) {7 A) t! s$ H" p
System.err.println("Exception updateLattice: " + e.getMessage ());1 W" C3 S! T0 l# B/ U. u# Q
}+ [" k7 X4 ^5 R2 K( m$ |
/ }* \3 @+ q3 j0 h2 e, q# V. r
// Then we create a schedule that executes the
3 R* h) u8 Q& W! x9 D- j% E- x // modelActions. modelActions is an ActionGroup, by itself it
+ h+ B8 Z! n2 |5 p* ]" V // has no notion of time. In order to have it executed in
. d0 ]0 d" L9 T // time, we create a Schedule that says to use the
4 P: `4 s( [: l1 {& | // modelActions ActionGroup at particular times. This6 I9 n& s5 f5 B
// schedule has a repeat interval of 1, it will loop every& v! O' z0 C! w
// time step. The action is executed at time 0 relative to9 ^% s9 v0 x g+ z, u
// the beginning of the loop.
5 K7 }& q9 ]- d5 H0 }% }$ U& Z y1 |+ R4 s1 b
// This is a simple schedule, with only one action that is
" m$ m/ L- _6 N! V. \( U3 t* _ // just repeated every time. See jmousetrap for more
! X) \9 a2 x- v7 m1 d$ o // complicated schedules.% w9 |) l4 b K6 t8 J, ^- w
$ _0 @8 _$ c! g6 u3 x+ B& t
modelSchedule = new ScheduleImpl (getZone (), 1);
; L- y5 B; _8 U6 B modelSchedule.at$createAction (0, modelActions);2 D9 D: P+ T9 I$ t
_5 D2 F8 W& Y) N! K return this;# s1 Z) h; q1 ?5 \' e5 ^, B
} |