HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' V. D! q7 O7 K _% @' y" r5 v) o5 b
, F7 c7 k( V, T( u1 J- \# O! |
public Object buildActions () {
+ l1 u" ^6 r+ V super.buildActions(); v7 p+ n: Z8 H {+ P: f0 g
( ?% z2 D& C _5 O; H& b // Create the list of simulation actions. We put these in
9 p9 ^- p/ H) t( O // an action group, because we want these actions to be
' w9 _' }! t4 l5 Z( I# h4 N // executed in a specific order, but these steps should
7 L; e/ ~7 x7 K // take no (simulated) time. The M(foo) means "The message
- }" E1 p: ]0 U // called <foo>". You can send a message To a particular
$ X% w) N, A4 G3 r // object, or ForEach object in a collection.. h3 D' o9 v. S
* Z% E5 d! V1 Y1 F6 @' m/ p0 h( t // Note we update the heatspace in two phases: first run
# R' M6 O' u% f$ q+ \/ I0 l // diffusion, then run "updateWorld" to actually enact the
3 y3 ~/ X: B G# c7 s- K2 g# V // changes the heatbugs have made. The ordering here is
8 b5 i8 d$ G# Y0 M+ u' y \3 [ // significant!
7 S3 I6 D, Z u- X( \& a: v) \4 I ; z/ }0 L( D5 a! j/ b5 Y
// Note also, that with the additional
6 d1 D" c8 _& _" S; x' ~: q$ @4 | // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 I; m! R' _* {3 @2 \7 M) k# { // randomize the order in which the bugs actually run
2 f5 B0 P% q& S# A9 i9 H // their step rule. This has the effect of removing any
1 w3 g/ t* Q' f+ Y0 ? // systematic bias in the iteration throught the heatbug
+ [: v* m+ D/ x, P. U8 @, o7 n // list from timestep to timestep X" g7 C6 o, ~( |6 E) z
) U) J& {0 q i9 M# H
// By default, all `createActionForEach' modelActions have
3 |: [; H$ k6 D: n( Y- s // a default order of `Sequential', which means that the# l: Z# K; u5 L/ ~- l- u6 Q! C, j
// order of iteration through the `heatbugList' will be* r* E$ Y6 {: ~
// identical (assuming the list order is not changed) B0 f8 Q/ Q9 M8 T* a, G
// indirectly by some other process).+ n; S; t1 W- V, E
# g) M' g8 o; L. J: }% W* U
modelActions = new ActionGroupImpl (getZone ());8 b } Z& d3 T
( \0 ]9 ^8 k; F8 A. [) S
try {7 b( ~ Z3 X5 C2 R1 R
modelActions.createActionTo$message& Z+ c5 S4 M+ o2 D
(heat, new Selector (heat.getClass (), "stepRule", false));: e, }; p2 U0 `0 N
} catch (Exception e) {
8 S! y7 w! z3 E I/ D% x System.err.println ("Exception stepRule: " + e.getMessage ());+ J: N* l. f: C
}
0 X% P: N7 B& r, D! r8 V
% C$ }5 L3 g* P& Q2 x try {$ _% _5 t9 p8 L6 O( s
Heatbug proto = (Heatbug) heatbugList.get (0);
) h" ]3 W& n0 p/ G Selector sel = 4 a' a# {1 k7 x4 V1 }, g4 p: l# Y
new Selector (proto.getClass (), "heatbugStep", false);
1 [; H# d* X9 y- I actionForEach =
5 M' j# }0 l$ J modelActions.createFActionForEachHomogeneous$call) c4 a' J$ ^8 J9 U+ C9 [ R
(heatbugList,
& W3 P" k0 _+ _. ` new FCallImpl (this, proto, sel,/ s/ V. D) J" w% f' e2 U& y8 }
new FArgumentsImpl (this, sel)));1 Y9 L2 ]! S1 ?" V& u
} catch (Exception e) {
" b! J( M3 i4 h3 q# {; w) j+ D6 I e.printStackTrace (System.err);; N. ?) M- N* d8 j7 a- Y5 ^
}, O* [( k$ T- @, y' D1 G# H
: d: g; j6 z# D syncUpdateOrder ();9 d6 L' ?8 d9 n! l
3 K9 a# [' l' W( q7 B6 s q
try {
( [- R& T {+ p modelActions.createActionTo$message
3 j2 S& j6 l7 w# w (heat, new Selector (heat.getClass (), "updateLattice", false));
) ^ z1 d, U' C8 `8 b' c: N } catch (Exception e) {% d9 g* O+ H+ t: ]8 H$ r( h
System.err.println("Exception updateLattice: " + e.getMessage ());1 \3 a$ D1 z @1 V
}/ M1 R6 ^" @3 K: D: A+ i% x
S* n4 w/ _) J4 H! Y# \/ w // Then we create a schedule that executes the- \# [; C) o% P3 d4 N u
// modelActions. modelActions is an ActionGroup, by itself it; {% R! [4 `) O! x9 k( R
// has no notion of time. In order to have it executed in
) F4 @; V: K" e, ]) _ // time, we create a Schedule that says to use the3 f& I1 H" l$ n# E% V( G( Q1 n
// modelActions ActionGroup at particular times. This4 T4 j- g& b' K! B- Z
// schedule has a repeat interval of 1, it will loop every
' k- p/ n- H% F1 R // time step. The action is executed at time 0 relative to+ G. D1 ?8 w1 i7 l! p5 U
// the beginning of the loop.3 G4 p. l4 ?( G* j" r
+ J2 Y v3 I Q4 ]6 W // This is a simple schedule, with only one action that is
) k9 ^' e. M0 i- E, S- ?4 ` // just repeated every time. See jmousetrap for more
4 K( I) y: k* w) B3 a" S // complicated schedules.
- X7 R# }- g( M
1 A3 [, x, s$ Q- ?# p modelSchedule = new ScheduleImpl (getZone (), 1);
/ k9 _/ _" z; Z2 T modelSchedule.at$createAction (0, modelActions);) O' p0 r _& N9 \: I' w4 ?2 y
- t; v( o" k. x( B
return this;
1 R; z6 s9 f# c. M/ A } |