HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ D( w; m6 i$ B" g6 f4 Q0 r, k% A. k/ j5 g- ]# I* v
public Object buildActions () {
! `0 A: w+ `* z2 ~' ^/ k9 x super.buildActions();/ X7 L: u, |' R" a+ l0 T
8 ^3 J* y1 W5 {& z1 d6 d1 | // Create the list of simulation actions. We put these in. g Q" f) S. Y0 h \9 j
// an action group, because we want these actions to be- D' l1 b1 [: F2 J7 I
// executed in a specific order, but these steps should
2 Y- [: V9 \+ j2 }7 v( x // take no (simulated) time. The M(foo) means "The message! z3 e+ u) }8 w1 |1 j( @
// called <foo>". You can send a message To a particular
1 D0 U; O; C d* s* ^ // object, or ForEach object in a collection.
8 f9 V; @4 Y' Y; Y7 [. r7 b , l+ @6 n& R5 @# D9 ]5 j
// Note we update the heatspace in two phases: first run
! m+ F$ C. w5 P7 {/ { // diffusion, then run "updateWorld" to actually enact the1 i A% X' H* v! O
// changes the heatbugs have made. The ordering here is
$ V( A8 ^9 c/ B# u; S // significant!# f- x7 I4 z G7 ? ]. z9 `2 ^
6 A4 d4 R: @2 b% E! k // Note also, that with the additional2 Z; H, D) C" a0 L8 U
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- ~. ]# G$ c* ?% b4 ~ D& ^ // randomize the order in which the bugs actually run: G$ W5 v3 d. p) R) L) ~/ M+ H
// their step rule. This has the effect of removing any* t3 E" n. V( i
// systematic bias in the iteration throught the heatbug& a8 c* j& l" O) x6 i# `
// list from timestep to timestep
\) D; @6 L7 m: E* l% D3 u
5 m3 e8 {* m* B$ m // By default, all `createActionForEach' modelActions have
( j7 X6 j3 [4 {- M$ M // a default order of `Sequential', which means that the
r4 L. `, Z" F8 J' g // order of iteration through the `heatbugList' will be) [4 ^/ v/ c% G. e4 v
// identical (assuming the list order is not changed
' u* e0 l9 p+ x& E // indirectly by some other process).
& g$ ?/ k" }& b$ G" x, { + ? M& _ w# ^
modelActions = new ActionGroupImpl (getZone ());9 L6 u0 Y6 U0 d0 v4 b& q( }, _
5 ?' E/ J( C: A6 N% I |! z try {
. K+ b0 {8 x0 g- O modelActions.createActionTo$message6 L/ C! Q4 [ L" z" y; ~
(heat, new Selector (heat.getClass (), "stepRule", false));
& o0 _3 O* U! Y; @. u0 P } catch (Exception e) {
4 {1 o- X+ n! k4 W7 u System.err.println ("Exception stepRule: " + e.getMessage ());5 [2 x* c. F) ?. h
} `# q% K% I; k; g0 h o6 U. \
$ ^2 |# W6 }4 H/ D9 O
try {
: X0 R& a9 ?! @8 h Heatbug proto = (Heatbug) heatbugList.get (0);
! y7 X$ R D* r0 k* D$ F" e Selector sel =
- I: x5 \0 ^- w& j4 S new Selector (proto.getClass (), "heatbugStep", false);! Q+ y# Y3 _) y" C
actionForEach =
! J& @1 g8 a6 u3 Y/ B modelActions.createFActionForEachHomogeneous$call
% [2 v: C) t2 {! Y (heatbugList,, ^& n0 `. L& t2 C7 g7 v/ n7 [
new FCallImpl (this, proto, sel,
4 c/ }2 A4 a. U* l! k new FArgumentsImpl (this, sel)));# o# Q% W$ S l# e3 }
} catch (Exception e) {) r7 @/ \$ U" `' Q& ?/ b# e+ n
e.printStackTrace (System.err);- ^5 `1 t! O$ @8 C
}; I4 [3 ` S1 j- q! A0 H
/ X- `; V; U: ?, P1 H syncUpdateOrder ();
3 ~& `4 s; o* c
- M( P" w& i9 v; }+ k- _% Q4 U try {
6 [/ x& o! n1 l5 x2 r0 R# k7 E modelActions.createActionTo$message ; Z3 [! X: p$ E; |
(heat, new Selector (heat.getClass (), "updateLattice", false));9 v2 ~2 j8 {2 `8 C4 l
} catch (Exception e) {
4 l q4 k1 h6 z System.err.println("Exception updateLattice: " + e.getMessage ());
9 a5 V) d$ B& P: z- l }
& L# S1 U0 ]# K4 s4 X/ q 8 \+ D2 H7 m/ W- G$ l
// Then we create a schedule that executes the- ~1 v% B; h2 m
// modelActions. modelActions is an ActionGroup, by itself it U8 p0 ^* m8 ?- }+ E( _8 C
// has no notion of time. In order to have it executed in2 d/ z* f8 \+ d+ K
// time, we create a Schedule that says to use the: [( j- k+ ?1 k/ ], f6 g" Q$ i
// modelActions ActionGroup at particular times. This' O# I! o1 b* j x1 @5 e R0 x
// schedule has a repeat interval of 1, it will loop every
^/ x+ ~+ i9 P; |8 x( ]4 E // time step. The action is executed at time 0 relative to
: f7 k; \) Z3 S% l( _ Z" Q2 e // the beginning of the loop.
$ @- t. n! a/ `& o! Y+ [ j" S% ?; g* w) r: M
// This is a simple schedule, with only one action that is% k$ q) ~. \* e* [+ C" q4 S- {
// just repeated every time. See jmousetrap for more
* } w7 U8 H3 i2 A6 z- E! v // complicated schedules.; B& w4 x/ S' x4 }$ A
, C) W! V6 U. A! z# Q! i0 N
modelSchedule = new ScheduleImpl (getZone (), 1);# ]; ]$ N b) C0 X7 k
modelSchedule.at$createAction (0, modelActions);
. ^1 O# L, R0 \) `2 Z
" F: J- H y. j: L2 U3 \ return this;6 ?- l! G: A& D+ s- U0 C- ]
} |