HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 c8 H# \5 Z" d% E- V- b6 ]
% g. z; L9 X' k! c
public Object buildActions () {# w( @2 c, R- H, u; o/ @ m
super.buildActions();
) @' W) i# y. D4 _$ \8 v8 `/ U4 {
$ o" d( a4 k3 k* A& ` |* z // Create the list of simulation actions. We put these in
9 A4 D& H5 f: x$ G // an action group, because we want these actions to be# s) J4 X% F# S4 K" J; v
// executed in a specific order, but these steps should) Z) D# k2 Q% L2 _' _! j4 f- y( ^ N. A
// take no (simulated) time. The M(foo) means "The message
$ X' @1 E$ L: a: X, e // called <foo>". You can send a message To a particular/ J# h9 |: Z y' Y
// object, or ForEach object in a collection.
/ j" `) z! @5 Q' w1 V
2 U1 n; B( o2 ~1 K! `' u, e+ e9 { // Note we update the heatspace in two phases: first run. v& G* i% K! q: P
// diffusion, then run "updateWorld" to actually enact the
: P2 i; j- U* B' B8 |4 l; G // changes the heatbugs have made. The ordering here is
7 y' s4 A g) I* s; p5 Y2 n E // significant!
; T8 w, d$ r$ o; E# y# Y1 e 4 O0 h% }# c9 S; F
// Note also, that with the additional
9 k& S% Y( f4 t) K: p z6 x // `randomizeHeatbugUpdateOrder' Boolean flag we can' J8 P( }( `; Z& K) o: y( B! H* H# v
// randomize the order in which the bugs actually run
& S c# G1 s1 G. R, J2 a& q // their step rule. This has the effect of removing any: q! M; D+ D, e9 E
// systematic bias in the iteration throught the heatbug
, @1 E9 @( y" z0 @0 g // list from timestep to timestep
: I2 G8 u5 [$ `# m5 A
7 p- X7 U$ G$ ]7 `/ F2 I // By default, all `createActionForEach' modelActions have
! z$ M- \- U# x$ U# k# f // a default order of `Sequential', which means that the! Z" k3 T3 s; a5 S C9 Y+ D! y
// order of iteration through the `heatbugList' will be8 Y# o& I4 U- }
// identical (assuming the list order is not changed
' W( \, T2 O! e9 H // indirectly by some other process).1 F8 I8 J& O; i" f, ~
4 Z- a: E& A* J# j( D modelActions = new ActionGroupImpl (getZone ());# f5 v5 [+ ?7 [2 M8 j
; P u& s0 F& Q3 Y try {7 W5 S* i$ v, s4 U9 D
modelActions.createActionTo$message
4 C% C7 m4 `3 N) ~$ t( G- _9 g (heat, new Selector (heat.getClass (), "stepRule", false));1 E7 w$ o, u+ ~% {
} catch (Exception e) { `( `9 b9 R c! f: l& g& ~
System.err.println ("Exception stepRule: " + e.getMessage ());
$ U& @ c: O8 U# { }
" z' D1 I; c" z. K$ W5 r) j3 U
4 y$ R: x1 p/ H& E) M3 _. X try {, f7 X2 ~$ ]$ N% x1 Y/ J. r
Heatbug proto = (Heatbug) heatbugList.get (0);
% } O& i6 b& q, R5 C Selector sel =
) F' [5 b% o1 g: m a9 ?2 ? new Selector (proto.getClass (), "heatbugStep", false);
8 y! {" ?, J; c. N3 h1 v1 L1 Z actionForEach =
- }7 ^' k! t! a& Q# l; G" Q( J+ O modelActions.createFActionForEachHomogeneous$call6 ^4 m" {* ?6 U M# C
(heatbugList,
: N: o5 B4 [- F" w; A( G new FCallImpl (this, proto, sel,# m* m d& e# Y! v& j; G7 G) |/ u
new FArgumentsImpl (this, sel)));
9 |, m0 k" P3 V3 T } catch (Exception e) {2 j, A( z6 f0 d0 H
e.printStackTrace (System.err);: w* j! z! u0 m* e G
}) @0 V. ?! x" A& i
8 O+ K1 H8 z: V" p: g
syncUpdateOrder ();
3 ?4 X. E/ \$ Q* v4 Z& j3 B" z
. A1 y# ^* M$ D' U8 U try {+ u' O( _5 M4 E6 D0 b
modelActions.createActionTo$message $ {0 Q0 D2 h+ z8 Y& ]
(heat, new Selector (heat.getClass (), "updateLattice", false));3 v6 r, s! g1 F3 ~; ~
} catch (Exception e) {
# V- V+ N& `& ]8 S3 R0 F$ |0 r. {' j System.err.println("Exception updateLattice: " + e.getMessage ());
1 \% H9 h1 y% m( z0 n. l" R }, O' H2 \ w% g- O+ s& w
4 L" \9 c, [" G; ?( V& B // Then we create a schedule that executes the( w/ G/ _3 A/ }* F
// modelActions. modelActions is an ActionGroup, by itself it
" W7 Z2 N! `1 D; r: R: ^ // has no notion of time. In order to have it executed in
$ Z9 F7 o7 V9 R- p5 y // time, we create a Schedule that says to use the& Z0 x' t- c; M0 b# x
// modelActions ActionGroup at particular times. This1 I' F/ ~# d$ o
// schedule has a repeat interval of 1, it will loop every/ I2 A( v- u4 p2 R# Z
// time step. The action is executed at time 0 relative to
: \0 w( |# v7 C // the beginning of the loop. K7 x# L' R7 B" s* f8 N6 P4 k
9 R f3 C K, }9 x; N
// This is a simple schedule, with only one action that is
3 p) l+ q* \4 c" ?1 M: U0 ~ // just repeated every time. See jmousetrap for more) C0 Z9 i) i$ B* o
// complicated schedules.& ?1 N* M, f( V, ^% U; j
4 w+ `$ w% J# ^4 z7 v modelSchedule = new ScheduleImpl (getZone (), 1);
7 D x7 q1 \; ~- ~ modelSchedule.at$createAction (0, modelActions);& ?0 j' I0 Q U/ b. a
: t; h) i7 L- |$ f7 |# y
return this;4 ^$ s1 |7 w6 H
} |