HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:7 F! ]' n9 R& J9 o# d9 n) m0 N4 ]
8 x* ^* j, }5 E3 X6 j: p' \7 e+ @
public Object buildActions () {
7 L C/ D$ o4 r6 K8 x3 N super.buildActions();
# B( p$ D2 K$ m; a& Q" H
) K. C9 G0 V5 N2 q // Create the list of simulation actions. We put these in
1 q# I. X: C) G- g, a // an action group, because we want these actions to be: \9 n' Y3 ]& ^) v0 l- o
// executed in a specific order, but these steps should
9 u- q& K& y# K: Z- R, v. i" j // take no (simulated) time. The M(foo) means "The message# b5 `, M8 O& p+ [+ ~+ J
// called <foo>". You can send a message To a particular# H' _& X8 `9 M! F$ z
// object, or ForEach object in a collection.
- B# f4 \: i6 I4 i. J
/ C1 x: n0 K3 y( \4 c0 m) M // Note we update the heatspace in two phases: first run
3 ~& b9 {! k$ {8 Q6 c // diffusion, then run "updateWorld" to actually enact the
+ L4 A- X9 @: {: o$ G/ `, |) ?* `9 j // changes the heatbugs have made. The ordering here is
+ e+ F- R# v( x // significant!
" j1 f4 v% q9 ~* G7 @ % i }/ I5 Q6 c" |
// Note also, that with the additional
! S) ^. E/ |4 m# L- d // `randomizeHeatbugUpdateOrder' Boolean flag we can/ u6 ]: S0 d' O- E q& S/ o
// randomize the order in which the bugs actually run+ T' z8 O1 \, w$ x: V( p
// their step rule. This has the effect of removing any
! I; T9 y% u5 B0 R7 C" G! w // systematic bias in the iteration throught the heatbug; L" V) B! P% g) \* e5 L- F
// list from timestep to timestep& t5 I J# x: c$ ]9 q" q
9 `6 ~% ?; U# t5 I( N$ I/ r
// By default, all `createActionForEach' modelActions have) a7 P t- Z$ e# n1 Z2 S, s
// a default order of `Sequential', which means that the4 k- E+ H. E$ Y5 H9 o
// order of iteration through the `heatbugList' will be0 f% R7 R2 B9 P5 c) F( O
// identical (assuming the list order is not changed
7 a- O) y# |: X7 l; l! U# d // indirectly by some other process).
1 H& _7 x% a3 M$ J9 h9 v5 t+ X I
Z4 v3 C/ p; Y* b4 N: H0 r modelActions = new ActionGroupImpl (getZone ());8 N/ _3 y0 K7 I! l& y& r5 F! O" @
% X* A8 } S1 I* o$ V) g& w' x
try {
% A$ w% u9 S' s% _ modelActions.createActionTo$message$ E% z p9 e3 I5 b& i4 Y7 U' H4 X
(heat, new Selector (heat.getClass (), "stepRule", false));* i C9 I& L" Y |* r
} catch (Exception e) {
0 _2 q! X1 S$ b4 f" K System.err.println ("Exception stepRule: " + e.getMessage ());
" O* x' X7 Y% U1 E2 ^ }1 O6 v3 C5 t6 @1 ]
! Q. j. o0 W* L1 @
try {
: g9 }. D% v3 X( H5 o Heatbug proto = (Heatbug) heatbugList.get (0);
2 |3 C i, O$ H( }. [ Selector sel =
5 \6 Q# k( R# u' P. V new Selector (proto.getClass (), "heatbugStep", false);
5 |. D2 H3 q" V actionForEach =
- z5 F) _ @, {, Q% e' G: P0 t modelActions.createFActionForEachHomogeneous$call& c% m6 L7 d7 X# m' D
(heatbugList,
& o: N, W! y" ]( y# g" Y5 D new FCallImpl (this, proto, sel,% n/ y* G( \0 E
new FArgumentsImpl (this, sel)));
7 \) V. K& W: [ } catch (Exception e) {3 e+ x, m% t W s& ?
e.printStackTrace (System.err);
4 ^5 J- B# R; x/ F1 ~% \5 C7 H }
+ z4 t* f9 e6 ~) H% N% X & w B, h; {% s8 Z+ ~8 D
syncUpdateOrder ();
- }7 ]+ v% ?8 k" N
- S9 l7 i9 S1 t2 J7 `7 s/ K try {/ @- h# u. u$ v, e$ R# s, V! e
modelActions.createActionTo$message 9 _. r* V7 p" Y9 }% x
(heat, new Selector (heat.getClass (), "updateLattice", false));, ~% C. B! a! J- X! L
} catch (Exception e) {
' y* o6 N& b. n, k System.err.println("Exception updateLattice: " + e.getMessage ());% \5 X& h& C, x x6 M+ `
}' b1 a1 w: S, H" c6 Q
9 c; l, o2 ^; O+ A6 b* B9 T* ^, H5 O // Then we create a schedule that executes the
0 u6 u+ V3 x& T3 [& v6 {8 A' [4 X // modelActions. modelActions is an ActionGroup, by itself it
4 T6 G; p) S% T) x // has no notion of time. In order to have it executed in5 l; S5 z b9 J! K7 f
// time, we create a Schedule that says to use the5 Q; [$ @, V9 | U
// modelActions ActionGroup at particular times. This q5 x4 W) P' `: T
// schedule has a repeat interval of 1, it will loop every- k- X5 \. n2 C1 v2 W
// time step. The action is executed at time 0 relative to
5 j* w$ W; m1 T- p, q // the beginning of the loop., b- ^9 O8 I. M# r3 ?9 G) q
$ K! W& V4 u) `- G/ T; t // This is a simple schedule, with only one action that is
& W/ [5 h% w" X/ q // just repeated every time. See jmousetrap for more
6 m5 V' B$ ?& ~9 r u // complicated schedules.: v+ }' H' L7 _% }
^5 @( q! h: k" h' g$ w* ~ modelSchedule = new ScheduleImpl (getZone (), 1);
- T+ Y K/ q3 U5 z+ d modelSchedule.at$createAction (0, modelActions);
: j, j8 D/ D2 C7 i
: o1 p! ~& [: W1 O return this;
! \% F' N R6 `$ e0 O9 E } |