HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 l. j4 [* L. ]9 t
. B# p9 A% j U* `( T4 [ public Object buildActions () {
( ~+ j" T3 \( X6 Y super.buildActions();% d# |5 m6 H2 \$ }( G) t
) z- x/ i" \- z2 n // Create the list of simulation actions. We put these in
. T8 D; M# @) S- i7 G! n // an action group, because we want these actions to be
8 I7 E8 j0 F1 I8 b# s: Q& d& Z3 m: H // executed in a specific order, but these steps should
6 D( b3 I; `; |; q- ^: g" ? // take no (simulated) time. The M(foo) means "The message( j" m' u! f3 a
// called <foo>". You can send a message To a particular% d0 _% n5 O" x
// object, or ForEach object in a collection.' @% y, p+ Z. U5 J; Y
: W( A1 q0 [# c* H1 f" |" U
// Note we update the heatspace in two phases: first run
7 d" C& I5 U9 L, g& I4 w" D // diffusion, then run "updateWorld" to actually enact the9 V+ l" P; [% n/ _% A
// changes the heatbugs have made. The ordering here is% {" }# @: I* L* l, z' o
// significant!1 Z+ y4 _$ N/ d; v: y6 F
% f4 w6 t' b' S) t
// Note also, that with the additional
8 P8 K9 U; r' }& w J( s // `randomizeHeatbugUpdateOrder' Boolean flag we can
/ \. J8 x0 o$ c# w% w; G4 C // randomize the order in which the bugs actually run5 w. I0 u0 l. E( ?
// their step rule. This has the effect of removing any
) w! n4 c; p/ V- |# N; }. c# @1 a3 y // systematic bias in the iteration throught the heatbug! C* C' N; i/ u
// list from timestep to timestep
5 J6 L' j9 {! V / _' D/ k7 B: G ^
// By default, all `createActionForEach' modelActions have
|' I# h. a# U // a default order of `Sequential', which means that the
" R) d- J1 G$ T' @0 O6 Y# v // order of iteration through the `heatbugList' will be5 a, E7 f: S# J: I4 |
// identical (assuming the list order is not changed8 K6 J4 V: o; p* P& P+ \
// indirectly by some other process).% ~" u. E$ j" e
& X7 n5 N( `+ x" G0 G0 h modelActions = new ActionGroupImpl (getZone ());* |# |3 I( D: ~& Z
m4 W" `; O2 u/ E! s6 H/ R
try {8 R1 w1 G: ?+ ^# D1 L
modelActions.createActionTo$message* k( F) h) U. o( b3 j% E4 k
(heat, new Selector (heat.getClass (), "stepRule", false));, E. R5 N+ u# E) t, c% P3 G8 F; K: Z
} catch (Exception e) {
9 o- s/ d; n3 j2 l/ r System.err.println ("Exception stepRule: " + e.getMessage ());+ c2 w2 Z# R" L& b' h4 I# K
}
3 Y S+ d2 H9 {; g2 H1 |" p+ u
8 ?! Z( X* U' N+ Y4 M. ? try {1 Q6 c1 y- e2 c6 T' R) Q
Heatbug proto = (Heatbug) heatbugList.get (0);2 e. z$ b' i h# O" l* k
Selector sel = * \% R8 j$ z+ _1 ^# c
new Selector (proto.getClass (), "heatbugStep", false);7 k& X @4 U9 C- V
actionForEach =
* Z8 k3 V7 L! V6 M4 t) ] modelActions.createFActionForEachHomogeneous$call6 l, }- z5 _0 I0 ~5 J0 O' V
(heatbugList,, e5 X7 {- F+ i7 u- k* [8 i
new FCallImpl (this, proto, sel," ^7 F! o% W! f& b$ p& d
new FArgumentsImpl (this, sel)));
! i! U+ z# F0 E5 k$ z } catch (Exception e) {
9 ^$ g6 Z6 S# ]( M4 A3 M e.printStackTrace (System.err);$ B( O7 o4 a0 u3 E% e4 k
}
+ Z0 B! f: z* }7 B/ {# `- z2 L% Q ; W& r# [( _% @$ }. c, Y
syncUpdateOrder ();0 ]1 L: [- J% D1 }2 L
' ~7 b! @# J" v; h try {
+ y1 z# J1 P. S; ~3 q% ~ modelActions.createActionTo$message ) `% ~0 ?2 g9 f9 {2 ?4 u
(heat, new Selector (heat.getClass (), "updateLattice", false));$ F6 `# H* a$ E0 y+ ]- d1 H c
} catch (Exception e) {- c- ]; q% Z$ S) \7 a2 o
System.err.println("Exception updateLattice: " + e.getMessage ());0 P! ?2 x# E. D* ?
}8 A" Y6 U+ R" M
! [& P0 A: n3 p' J) Q5 B1 b // Then we create a schedule that executes the! i, _" t! h5 D
// modelActions. modelActions is an ActionGroup, by itself it
# R5 S& v1 e4 I // has no notion of time. In order to have it executed in$ V, g/ [4 z3 V; G4 A
// time, we create a Schedule that says to use the, C1 {' z; d$ n, _
// modelActions ActionGroup at particular times. This
$ K' B9 T8 l( M& ~" r# U // schedule has a repeat interval of 1, it will loop every, J& A. A. x% Q: O
// time step. The action is executed at time 0 relative to
% B& U' F% Y$ \& A // the beginning of the loop.
8 I4 k8 l, [! K9 E8 v3 h$ N9 ^ W! G! I: j' l8 l- a' P
// This is a simple schedule, with only one action that is
5 ~: Q2 b& B* K/ m* ` // just repeated every time. See jmousetrap for more
) H( t% s. O# y& a, M- ?1 R# B // complicated schedules.
1 _/ u9 u6 ~* ?6 y! `2 \1 `% g J5 U ! f6 }' F% m' `3 d
modelSchedule = new ScheduleImpl (getZone (), 1);- v' E3 g3 R- e2 \* a
modelSchedule.at$createAction (0, modelActions);, ?! \3 X, l( A% i. o9 A2 i/ S
5 O' r5 n- W) P6 O+ j. n* N return this;
* ?1 c/ e1 `' E6 a6 c } |