HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* [+ p# G4 @( `1 e' N: ~
; ~( ?: m5 A1 V* P public Object buildActions () {
2 j M* G% y; T1 T: a4 _$ j super.buildActions();1 T: E/ V R# b. a/ [; [+ p
# i' C4 ^( P: b/ P
// Create the list of simulation actions. We put these in' g$ b0 I% v5 x5 G6 x
// an action group, because we want these actions to be
5 ^8 M e4 j3 v6 c$ q$ l2 L // executed in a specific order, but these steps should
) l( v; ?: l( ] // take no (simulated) time. The M(foo) means "The message5 E$ }& M& X9 @; h# p* a
// called <foo>". You can send a message To a particular
; X( T) d# {( c7 u // object, or ForEach object in a collection., j- _6 P% U7 O7 \, F# o
1 W& N. E4 b6 i& A% c9 x
// Note we update the heatspace in two phases: first run
! g1 g$ H7 L7 |! i4 \ // diffusion, then run "updateWorld" to actually enact the" ]( ?/ }; A' u
// changes the heatbugs have made. The ordering here is
0 j# f* [+ F" }9 B; B // significant!
- n: M8 m2 o l$ T8 H5 i" } 4 x$ `+ ?0 g4 b9 X# @+ f
// Note also, that with the additional
$ Z2 m: D+ Y- \0 ~8 a- e // `randomizeHeatbugUpdateOrder' Boolean flag we can5 w# \2 Z* {- v* o9 f+ i
// randomize the order in which the bugs actually run
9 T1 j3 G$ s! X/ h- H // their step rule. This has the effect of removing any/ m( V, x2 u" E% B. X8 H/ E
// systematic bias in the iteration throught the heatbug( U [" p9 M: |* `
// list from timestep to timestep( [) G9 B5 _3 n; O$ i8 j
6 }3 T E; ~* y // By default, all `createActionForEach' modelActions have
# v, j# B8 c C9 R/ s8 x$ ]8 X // a default order of `Sequential', which means that the
! D6 U! z- E3 @5 k6 s& ]/ W% [ // order of iteration through the `heatbugList' will be
1 h& A+ {# ?8 X' D. I$ ]6 n# E // identical (assuming the list order is not changed( R D; v* n8 f$ `
// indirectly by some other process).
) G( C$ V+ }9 r2 [5 o6 [7 U" [+ _ " M: }! K: I# y0 s. _' X6 T
modelActions = new ActionGroupImpl (getZone ());
+ O8 \. G. B0 u. F* B' L+ h7 H X
) f- H$ A: w; l5 ~, V: H) ]( Q try {, x- Y4 p* ^4 L/ R) f% _* v
modelActions.createActionTo$message
" U# w" U# @# K1 {' [ (heat, new Selector (heat.getClass (), "stepRule", false));5 a& C; N# ]; j7 e
} catch (Exception e) {
) F, L3 R( |3 e+ h R9 W: u System.err.println ("Exception stepRule: " + e.getMessage ());: _ C; f1 y! Y+ U+ `% T
}2 G. E" X; i" k3 w5 o
$ Z9 u4 s! V* Z# m' x M7 |% b# L
try {: t2 ~7 c/ I+ i7 o
Heatbug proto = (Heatbug) heatbugList.get (0);' m3 S% J _) b6 Z) L+ k
Selector sel =
2 {( Y/ Q$ Y/ s6 v% Y new Selector (proto.getClass (), "heatbugStep", false);6 D1 |8 ~" E' N( N$ ]; [
actionForEach =; n5 A2 d+ V0 o3 P/ a; W* g
modelActions.createFActionForEachHomogeneous$call$ V5 a- J* x' O p
(heatbugList,
3 H p3 w6 ^8 f5 z# q4 e' q9 H7 E* h new FCallImpl (this, proto, sel,
) a. e/ ?! h V new FArgumentsImpl (this, sel)));
4 U, r; f7 B; I1 d8 ^3 c } catch (Exception e) {
$ e D* e x k8 J( `9 d! U9 a( g e.printStackTrace (System.err);4 A0 c5 t2 ^ z( b2 {) D' m
}; n. f5 [; r: s- ]4 {$ q
2 B; d: o, t$ G
syncUpdateOrder ();$ a+ e9 N: o# f9 }) b& [
2 a, I' H0 j w# n: ]* I A
try {
3 s, l- R# \& S1 { y+ |7 E; g/ w modelActions.createActionTo$message
- u: k0 Y+ S$ v" n% e (heat, new Selector (heat.getClass (), "updateLattice", false));
. Z2 Z9 \% o0 d, G# t6 ` } catch (Exception e) {
1 u2 H6 |$ B7 B- u! Y' J3 d System.err.println("Exception updateLattice: " + e.getMessage ());
$ ^3 ~# B& h( z1 u& g }) c e# Y' {9 c: }3 s9 R
3 p$ |6 S+ | ? b# j' [ // Then we create a schedule that executes the5 x2 c; t" V, O3 k' q; Z( q v: l
// modelActions. modelActions is an ActionGroup, by itself it
8 ~% U% ?) y0 j" R- _& n // has no notion of time. In order to have it executed in& q q3 w1 Z% t
// time, we create a Schedule that says to use the- i h% U7 \% d* q$ F
// modelActions ActionGroup at particular times. This4 s l4 {6 A- `3 G. P2 [
// schedule has a repeat interval of 1, it will loop every
( l. j% b/ d( x/ U% D8 w // time step. The action is executed at time 0 relative to! d5 r2 N5 r. K0 K
// the beginning of the loop.- a8 n) B! R7 w: q6 ~- [
. H; R* Z4 z' r" t4 d( v6 n6 U // This is a simple schedule, with only one action that is
; ?) Q+ [5 n0 E; L // just repeated every time. See jmousetrap for more
/ ?* n! w& r9 u! @6 O4 { // complicated schedules.
) p: O( V; ^8 K& D% Y* H% g, | + Z" F# `% ^4 R) A
modelSchedule = new ScheduleImpl (getZone (), 1);
1 x( r! L- w9 @- v modelSchedule.at$createAction (0, modelActions);
H# f" { L9 m0 P+ Q7 { 2 c& I! I* J+ R6 p
return this;3 }: U' Y1 U5 ~) X" N
} |