HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, v6 N/ R& t* |: T5 e9 S6 b
9 a/ W/ P' \& T public Object buildActions () {8 z F* |0 b1 W; m- b
super.buildActions();: q- c9 Q9 y4 U
4 K* @4 n; t- T: _- @9 }( J
// Create the list of simulation actions. We put these in# I, ~* E$ o6 f* r5 \) @. g
// an action group, because we want these actions to be
5 g! n% h2 @% i. c3 F4 |2 w6 i$ L // executed in a specific order, but these steps should
% p5 H: y- z+ C q // take no (simulated) time. The M(foo) means "The message0 k. v, o. k$ v/ r7 ^- Y
// called <foo>". You can send a message To a particular7 b/ |3 {2 e2 E
// object, or ForEach object in a collection.. O* o" `, m! v Z
7 k, X+ D1 v/ S // Note we update the heatspace in two phases: first run
6 P8 r# U, @% o // diffusion, then run "updateWorld" to actually enact the
5 u W$ a/ X& G. j // changes the heatbugs have made. The ordering here is
7 d' k c7 G v9 o7 P) [+ ^ // significant!
# f8 e% T) Q+ Z1 E, Z : x4 F$ \* G, ]# q( k/ [9 a N
// Note also, that with the additional
) q3 j6 i a( @+ f Z" O1 ?3 F$ [7 I // `randomizeHeatbugUpdateOrder' Boolean flag we can
2 R- Q- w& Q0 b" b K# f // randomize the order in which the bugs actually run
( ?5 n: T# {- k8 U$ [! O" I* e( r // their step rule. This has the effect of removing any
# D7 ]9 z4 P- u' E // systematic bias in the iteration throught the heatbug
. E* I) }/ s$ J+ w& _' D. Z+ w# i7 } // list from timestep to timestep1 x0 W. p( z" X) U# c% N: k& W4 b
& J# ^! W4 V% f( K
// By default, all `createActionForEach' modelActions have! e2 ~' i$ u r8 u4 f
// a default order of `Sequential', which means that the J! {9 u. r% p" R" ^) @
// order of iteration through the `heatbugList' will be
3 c6 P& p2 Y* {- D0 j) B& L$ K // identical (assuming the list order is not changed
8 {' w3 e$ {1 [" l/ x- x0 B. p // indirectly by some other process).
4 K6 A. a1 ]2 R! h0 J( p9 f . x8 m% o9 Q5 o$ h! x
modelActions = new ActionGroupImpl (getZone ());
: n% d: i M- W! a1 x" h# q7 h0 }7 ]9 {
try {+ k4 ?6 X8 }# b$ `
modelActions.createActionTo$message
$ @* ?$ c# E, R- l9 U; i* R! h (heat, new Selector (heat.getClass (), "stepRule", false));* j6 r \. m8 Q; I4 W& K. Y
} catch (Exception e) {
8 i: `8 b F% A System.err.println ("Exception stepRule: " + e.getMessage ());6 j" X1 d p/ ^: ~
}
* ^0 L1 [$ K* b% C' V+ c$ P
$ J" J; H0 i4 f, ]$ Y# S& f try {
6 J' t% o% @" w5 N- j1 y, ~3 i% J Heatbug proto = (Heatbug) heatbugList.get (0);. {- @6 `' _, \8 W8 b* s
Selector sel = . X N- G- K: ~9 a4 G
new Selector (proto.getClass (), "heatbugStep", false);: Q9 R: Q$ ]# ~5 S. U- s
actionForEach =
9 w, L9 p: b" n; z8 ?; W) y modelActions.createFActionForEachHomogeneous$call% ^: c: Q5 y$ P+ u8 M
(heatbugList,
3 r* ]% n5 \% f$ C8 W- G new FCallImpl (this, proto, sel,' p! B, o. T. S( c" O
new FArgumentsImpl (this, sel)));
2 n! Q5 H/ T; E } catch (Exception e) {
+ n2 X, Q7 p6 l8 V+ _, z& e e.printStackTrace (System.err);+ D9 m% R! K4 l4 V6 _& X4 i! ~
}! C9 r7 h7 J7 L
# h5 ` }$ a2 {; L$ R syncUpdateOrder ();$ g9 _' R7 j* e) P( W- c
: V7 G( [/ m+ ^
try {
7 ?" x3 |( n4 B( K modelActions.createActionTo$message
' S7 D: q( l8 @+ D (heat, new Selector (heat.getClass (), "updateLattice", false));
( B, m9 E0 ^0 c6 X' R( y } catch (Exception e) {. U/ j& [9 \% k3 E* G! ^2 x
System.err.println("Exception updateLattice: " + e.getMessage ());
( d% N4 S( L3 Y9 b2 |3 ` }
1 W7 E" [ |: U& n* C
0 a. [, n/ a$ e/ i0 a: W' ~ // Then we create a schedule that executes the
* }% U: p# ]# P0 Q( \9 L // modelActions. modelActions is an ActionGroup, by itself it
, [3 s. R" O- W. M; N$ k // has no notion of time. In order to have it executed in
5 x& e, @) [/ C5 K% y( e# O // time, we create a Schedule that says to use the/ N V7 c# r: t3 K0 G
// modelActions ActionGroup at particular times. This
y6 R8 w+ n- a j8 a( ] // schedule has a repeat interval of 1, it will loop every. j5 o7 B v( A. G
// time step. The action is executed at time 0 relative to
. L6 u9 G, [: R: I$ r // the beginning of the loop.
. X( B: S" b0 q) l
R3 R8 ~; b) F$ o5 g5 L5 B! f& {; } // This is a simple schedule, with only one action that is7 g- t2 m$ i1 ^0 p# S
// just repeated every time. See jmousetrap for more1 @' \5 r$ i# H3 d8 D3 W9 v- M* w
// complicated schedules." E3 Q" d: N; i- q$ a
; E# k1 Q7 L) ]/ K2 z
modelSchedule = new ScheduleImpl (getZone (), 1);
2 s0 E# i+ j% t0 u4 W$ z( X modelSchedule.at$createAction (0, modelActions);- v; ~) k8 Q! C, q
7 x. d* j$ f. _ y. a1 b. U5 l X% K" f
return this;% @1 [8 j; Y/ o- E5 p$ \$ ]5 X- J
} |