HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% s& `2 j7 Z; b" ~6 @( o
, `) \( s. D! T3 Y! X6 x# A
public Object buildActions () {1 O3 ?! d3 _: G1 |6 w5 E
super.buildActions();
: d6 F& k. `9 S" y
! n3 k0 \% M' q! }- V2 W // Create the list of simulation actions. We put these in
5 j0 B# [6 v0 A+ L0 u0 ]) D // an action group, because we want these actions to be/ N* n" W' _( F& Q4 g- M
// executed in a specific order, but these steps should
M; P. L+ Q- G x9 ? // take no (simulated) time. The M(foo) means "The message$ S4 g6 v8 S+ m8 c O7 h0 j
// called <foo>". You can send a message To a particular
4 ?% }2 x* Z P/ F // object, or ForEach object in a collection. A; n9 }' c2 g* z
6 K+ d9 t$ J% K' F; w
// Note we update the heatspace in two phases: first run
$ D# i* l7 O+ s, @* `. e4 |) T // diffusion, then run "updateWorld" to actually enact the0 N( U# u: [ u! G" u& ~
// changes the heatbugs have made. The ordering here is
, i% W: _, g9 w+ p n3 _ // significant!1 n* m) y, F, P/ N0 G: h; B9 R8 [
9 ?, g/ m; n! u/ M1 Z3 A
// Note also, that with the additional( u2 P0 e" b0 `6 D' R% d2 l7 ~" q
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 p6 @4 b* _- \3 O' F$ Q7 R& Y
// randomize the order in which the bugs actually run
* r8 ?& e3 X& E6 r0 d+ k // their step rule. This has the effect of removing any
?0 |+ u& j$ O0 b$ L: ^ // systematic bias in the iteration throught the heatbug+ |% t8 t y |. ?; u
// list from timestep to timestep
4 w4 s9 s6 h5 H, ^+ ~" O2 s & t" V _9 b! v, s2 @ D0 e# b
// By default, all `createActionForEach' modelActions have# f, }6 s6 {3 n/ }7 W5 n% S
// a default order of `Sequential', which means that the' I- m: ]' s( t
// order of iteration through the `heatbugList' will be
4 l' U6 ~. `- }3 J" P* L1 Y // identical (assuming the list order is not changed
& d5 c) c/ ]" x- I9 ]6 \" ` // indirectly by some other process).! R& ?/ M7 a! b3 `7 f
, t1 _$ L2 Z. d" c7 s
modelActions = new ActionGroupImpl (getZone ());
& D# O4 V5 U- q
7 g) s8 b( V z, K# R+ D }1 A C try {: L, a: U+ l: W6 D- i5 p
modelActions.createActionTo$message
4 A k0 Z7 [" i7 U" U. Z2 B (heat, new Selector (heat.getClass (), "stepRule", false));; E7 ?9 {) P1 O
} catch (Exception e) {
+ Z1 Q3 D4 S# C- P: | System.err.println ("Exception stepRule: " + e.getMessage ());, V8 J! j8 Y2 H, ]+ m, v
}% W. n: h7 e% m, n) q
3 B3 C1 G9 _* O. |. |% O# T
try {
9 ]0 F( o4 S0 J4 s2 P3 {. ^6 h Heatbug proto = (Heatbug) heatbugList.get (0);
2 ?' j+ ]; P7 t* T- p) `6 A' J Selector sel =
+ g% r$ Z' k2 t8 U7 P; V+ \! b new Selector (proto.getClass (), "heatbugStep", false);- \$ l# Y, S+ ]+ ?* F0 {
actionForEach =
* I$ B" J& ?: Q' n modelActions.createFActionForEachHomogeneous$call
" k4 R9 X; ]# t# W( P. A (heatbugList,
. d: ?7 }; v4 G( V6 i9 ?3 m; j new FCallImpl (this, proto, sel,
, _$ k* D9 u; K6 M% f" H' E new FArgumentsImpl (this, sel)));! R( \$ G% R( b
} catch (Exception e) {
, b/ E# l B5 |3 c. l9 g Q* P e.printStackTrace (System.err);
8 c( V) h$ k5 r& s; z& s }& l! S i, _$ F4 P5 O
7 U( Q. {; e7 w& @$ G4 }" J4 ~. t syncUpdateOrder ();
! Z/ O- a" K8 Z% ^. U' t; X7 t+ \3 K: w" |' Q7 s3 x, E
try {! h& I) K- W; L f3 H; i2 c: p
modelActions.createActionTo$message
" E/ N/ @7 C' ?) B: E, i; z/ A( D (heat, new Selector (heat.getClass (), "updateLattice", false));
G- Y: i1 f5 u } catch (Exception e) {
! V% {2 {, c6 l7 O System.err.println("Exception updateLattice: " + e.getMessage ());% D% _/ J( b$ C- b6 Z
}
" h4 l+ l( D |; E" F) W' w+ I1 Y# _
# g/ R- |7 {' b // Then we create a schedule that executes the
& Y' o) E+ s ^3 D* ? // modelActions. modelActions is an ActionGroup, by itself it
+ `# J: S+ B* N+ N" s' h // has no notion of time. In order to have it executed in; ?: |4 |3 t1 d0 ?; c! g
// time, we create a Schedule that says to use the" c& C! V3 k& `$ {
// modelActions ActionGroup at particular times. This
1 V) {& U* Y9 k; B- b# N! ~ // schedule has a repeat interval of 1, it will loop every
7 J) X, w8 [: B$ e7 g1 h // time step. The action is executed at time 0 relative to
: P% Z8 s- H; D' Y" W+ f' m // the beginning of the loop.- {% G; G2 h9 e( e8 ?6 ?: V) j
^7 v$ j, T& n, J0 `
// This is a simple schedule, with only one action that is
* e9 ?& Z: y2 e4 ~7 t // just repeated every time. See jmousetrap for more2 I! t y; B8 H* o7 {1 Z
// complicated schedules.
0 B4 c8 z( P, ~' o- V7 U: @# [
/ m. f E& |+ ?0 w2 W1 o7 a6 H modelSchedule = new ScheduleImpl (getZone (), 1);& W- p& _/ n. o% P8 s Q5 z
modelSchedule.at$createAction (0, modelActions);9 X5 M9 P( w8 o6 p6 g/ _( \. m/ Z0 J
5 \7 W9 |) B- i8 f
return this;5 A1 H1 g- E% K) T% N5 v
} |