HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ F( ?- k3 z) b* r7 a
' C: z' J; Q+ [0 a7 ^! I4 y" t public Object buildActions () {
6 s& m8 ~0 _& y( o+ ^+ C4 |- H super.buildActions();0 f4 h- {5 p# P* c8 I
5 b& P( t- W5 [* _5 a( A
// Create the list of simulation actions. We put these in
8 p7 q% A5 f R, q7 ? // an action group, because we want these actions to be
9 i8 y9 f+ y7 | // executed in a specific order, but these steps should$ n+ J* a! W' F: R" l6 j* |
// take no (simulated) time. The M(foo) means "The message
6 X) z' w3 f" H! Q% g$ c/ f) c // called <foo>". You can send a message To a particular3 R* ]4 [# P( e/ w' t
// object, or ForEach object in a collection.
1 v, ~( b5 ~( t4 J' u% | H
7 x2 g" v4 B# R // Note we update the heatspace in two phases: first run- Q9 H' W; B, y O; y" o; E' A( M* @
// diffusion, then run "updateWorld" to actually enact the
( V: r5 @5 B6 t // changes the heatbugs have made. The ordering here is
. b1 m# Z, b j9 v) O7 |( |1 B // significant!
( S: j" _) c7 D
7 P! m( l; z0 f( c! } // Note also, that with the additional
4 X3 S p X8 f+ H! v. T, M // `randomizeHeatbugUpdateOrder' Boolean flag we can
& e3 J7 X7 L: f& ?! L$ Q: o6 i // randomize the order in which the bugs actually run' _( r; I# v/ ?4 b0 d$ b9 |
// their step rule. This has the effect of removing any
6 [ `3 K( k4 L% y // systematic bias in the iteration throught the heatbug: k; Y: c2 T* ]6 K! P) |0 y
// list from timestep to timestep
3 O! v4 j8 K/ Y6 c O, q! o
' C. z2 f; u& u- ]& ` // By default, all `createActionForEach' modelActions have% X6 v- J1 _; r' O) D; {& ?# r3 H
// a default order of `Sequential', which means that the( h! t. k& M- n1 a' V
// order of iteration through the `heatbugList' will be
% z1 S6 t9 l3 K& Y/ _8 G" I3 Z // identical (assuming the list order is not changed$ L j6 Q4 k R+ E
// indirectly by some other process).
( `4 k& a6 b& w! r3 Y$ y3 U5 M8 s) v% ~
$ |9 r2 z8 S' @' \5 a modelActions = new ActionGroupImpl (getZone ());
4 Z# a/ i- m1 y, C1 ^/ {% ^. F1 S- `, w. x0 y. B. R
try {& h# @! A' j+ |: ?7 r8 \3 \+ g a
modelActions.createActionTo$message B: V- G* B2 A3 A) z% ?) y
(heat, new Selector (heat.getClass (), "stepRule", false));+ ?- \$ }0 ^- P/ F7 C
} catch (Exception e) {- s- L# u S4 ^8 o5 q8 x
System.err.println ("Exception stepRule: " + e.getMessage ());
* N( }1 x2 v. | r* e# x7 ~7 h }$ Z; e% Z; \$ p8 \% T
5 [: e! r7 g% b) q( a" }3 L7 o
try {9 u7 @2 R. J$ j
Heatbug proto = (Heatbug) heatbugList.get (0);
3 Y: L1 h, ~7 z- |' @ Selector sel =
/ c& S; c1 y: b new Selector (proto.getClass (), "heatbugStep", false);
, F; j9 c: h$ e. `$ E# u: ^ actionForEach =
/ @( f6 s/ P& p. f/ V modelActions.createFActionForEachHomogeneous$call, f& Q0 t: c" }, \+ S1 [
(heatbugList,
3 i: w3 |; ~1 m. c3 u* ^9 _ new FCallImpl (this, proto, sel,
2 M# f; @3 ?' n* A& P4 k new FArgumentsImpl (this, sel)));( E/ ~$ H0 O6 L# M
} catch (Exception e) {
) D$ e9 h7 {3 G' _5 @ e.printStackTrace (System.err);5 q ^% T- z( H7 C; P0 b* K2 [
}
+ N0 z+ v; U8 t& o8 v% E- `0 R 7 z' f2 r k: H
syncUpdateOrder ();
/ w' Z; _) f! Y8 y2 G
7 `+ a. I; Q+ A try {0 H; y& Y$ W- L' J4 y
modelActions.createActionTo$message
5 P: h- H% o; \ (heat, new Selector (heat.getClass (), "updateLattice", false));3 s( ]3 O7 @# B6 ]" J; X
} catch (Exception e) {4 J$ h0 ^$ p1 m- T8 d7 c' `
System.err.println("Exception updateLattice: " + e.getMessage ());- k9 Z k/ X4 j0 c6 t/ e2 A
}
, X, d0 C& n1 l
( K( b a, n: I // Then we create a schedule that executes the9 a5 V; A# j+ Y$ J/ g4 E# f
// modelActions. modelActions is an ActionGroup, by itself it" u3 _1 h k; [! x& n9 ?
// has no notion of time. In order to have it executed in" |* L& o q4 D7 L
// time, we create a Schedule that says to use the' Q0 C# N- r+ i' v, O: I+ m
// modelActions ActionGroup at particular times. This
' m: g+ J8 g8 E1 t) r ^; W7 E // schedule has a repeat interval of 1, it will loop every
; N; _6 l/ u$ ?+ T3 t // time step. The action is executed at time 0 relative to9 i4 c3 u3 }% f; V* `
// the beginning of the loop.+ E0 y1 m ~6 @' B$ ]6 M
2 ~4 [: Q) G5 l" s // This is a simple schedule, with only one action that is& G9 m1 }* c0 ^. R) T
// just repeated every time. See jmousetrap for more: f9 e% K2 A$ E3 q& Z" P4 i2 b- ?, b
// complicated schedules.
2 i- Y- G' V+ D' E( E
, J4 ?5 \1 D& G9 z modelSchedule = new ScheduleImpl (getZone (), 1);3 n' r& G0 ?9 m( |. @: N( p: b
modelSchedule.at$createAction (0, modelActions);
, m2 h, T6 O4 e8 p. U
$ M( m' j. n& I2 g return this;
; ?3 r9 a% P; w: X% u3 A! `' J3 m } |