HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 ]! C+ c D1 @
: m& k: u9 E0 Z9 ~+ i public Object buildActions () {
9 ~9 G9 g5 W1 e) i$ h- p super.buildActions();
/ a1 M1 n |# }5 w1 r ! V k) h% t7 k/ F3 m' B
// Create the list of simulation actions. We put these in
3 }+ M% L' I9 @ // an action group, because we want these actions to be- ^5 d) J3 }, J. ` ~3 U+ m* i
// executed in a specific order, but these steps should
% n7 k U5 }- r; I // take no (simulated) time. The M(foo) means "The message
* k8 w2 m% Q( n5 F, H2 B // called <foo>". You can send a message To a particular
1 ~3 \7 @3 s7 U. p) j X // object, or ForEach object in a collection.& Q" [$ J9 ?$ t
- B: g; A$ U( @# U: n // Note we update the heatspace in two phases: first run
) T, A! M- r/ t2 o // diffusion, then run "updateWorld" to actually enact the
- @0 [9 [* }# ^( b) h' y K // changes the heatbugs have made. The ordering here is: K3 a. C; A \2 D/ r
// significant!6 O* B, @ T+ Y4 P
+ C% D) ?. ~2 D. S7 l! d( X, [: j" N // Note also, that with the additional# p$ A9 ]$ a9 J2 }0 g/ C
// `randomizeHeatbugUpdateOrder' Boolean flag we can7 C0 q6 j9 Q& e0 B0 Y' v
// randomize the order in which the bugs actually run
# a% x/ K! t7 s/ |9 t: l, G // their step rule. This has the effect of removing any
0 f9 p& T" t6 y! Q, Q // systematic bias in the iteration throught the heatbug/ W# w# @7 z; t X) V+ Z: b
// list from timestep to timestep
8 Q A* p; S) K8 |2 C/ l
% I9 C& I% q4 g( T+ |* S // By default, all `createActionForEach' modelActions have
$ B$ d8 O9 F6 {; [: N' {& F // a default order of `Sequential', which means that the
+ ^+ O( g# X) m) v // order of iteration through the `heatbugList' will be" M2 j& i, G+ C: U; S5 g1 ]9 \
// identical (assuming the list order is not changed% \1 b+ f6 o6 |$ T. }" k9 [
// indirectly by some other process).# \8 h/ J" D9 V2 y. g. U6 [
: W) e& w0 M: K7 {( a8 e0 f, N
modelActions = new ActionGroupImpl (getZone ());/ ?4 _4 L0 |' F! ?/ S- I" ]. S
" K+ X: O6 D- K5 a: s/ d try {# `% u' H! W- z* E) J: |
modelActions.createActionTo$message
6 j+ g8 \. |' K- ~ Z (heat, new Selector (heat.getClass (), "stepRule", false));
* R- q9 c# b( |; c" n8 n( T } catch (Exception e) {
; M7 b. W7 [! ]* U System.err.println ("Exception stepRule: " + e.getMessage ());# v! j9 @( A Q/ t6 h! k- g
}- A+ H* E. w- T1 C% [1 }
: v7 H R# f4 R8 S0 H& V$ z+ l
try {, k/ _; ]4 c e/ q, n5 H' F
Heatbug proto = (Heatbug) heatbugList.get (0);
- Q3 }1 k0 I8 v" t8 `9 I# A Selector sel =
' N- X+ m R f' l; r f new Selector (proto.getClass (), "heatbugStep", false);8 q' e5 s/ H2 M8 u7 H
actionForEach =; l3 U. ^( i! H7 m
modelActions.createFActionForEachHomogeneous$call" Z4 l, Y7 X9 `1 W& ]
(heatbugList,$ p+ j* Y4 O7 P! Y7 m& k
new FCallImpl (this, proto, sel,
# @2 f# J" d6 M9 e5 a new FArgumentsImpl (this, sel)));( y+ V( n5 v a$ r
} catch (Exception e) {
" w, W7 v/ F, O* s: g/ p0 w; V6 G x e.printStackTrace (System.err);9 z! O! x* i( v6 Q/ p) Y
}
# S' ^( }4 \: \' `6 B5 ]7 X( l5 D 9 |* y4 Q' o4 f
syncUpdateOrder ();' Q- c. W' R% O5 H6 E% ?6 m- U
7 r ?6 w7 g+ \1 n4 D0 Y2 } try {
: t1 J* I- s! F* r1 r; o' } modelActions.createActionTo$message
/ x* v2 H- P4 S! @; Y5 @ (heat, new Selector (heat.getClass (), "updateLattice", false));' z+ y8 s+ q. \( I$ B
} catch (Exception e) {, @" J [8 J1 |. B: V) S
System.err.println("Exception updateLattice: " + e.getMessage ());. ?& v( h( a1 ^3 E; |+ M7 I
}
- { z& }* f3 L7 Z w* E
- n: y z5 j- o+ Z2 U: `& i4 } // Then we create a schedule that executes the( I' k6 l6 o' D+ E% t0 g# r" y
// modelActions. modelActions is an ActionGroup, by itself it/ f8 J x' Y F5 G% }
// has no notion of time. In order to have it executed in2 N* J2 N4 @9 T& ~
// time, we create a Schedule that says to use the
4 z% d/ ^# r0 Y$ Y; T7 i // modelActions ActionGroup at particular times. This
! B0 g; }$ g0 f( j7 o. }. ~( Y // schedule has a repeat interval of 1, it will loop every9 B9 y% K. F% X1 v- Q( ~
// time step. The action is executed at time 0 relative to
' F7 \+ W* `* ^* ?6 [. h // the beginning of the loop.
: o: S. W/ b/ k# c! |" U/ @3 J! E
// This is a simple schedule, with only one action that is
$ r# _& s) a) j // just repeated every time. See jmousetrap for more
, i) g( d* |" b; l) K" k# U( ? // complicated schedules.
) D+ C2 ^6 C% u- Y% e1 M
( G7 j4 I! L% q$ S5 k8 M4 D! N modelSchedule = new ScheduleImpl (getZone (), 1);+ J1 |# I2 p& b
modelSchedule.at$createAction (0, modelActions);
; _5 S' @; p4 I3 Q' z0 W, f
* R: A+ t& z3 b2 I* {) A return this;. e/ c2 B X( P: X9 i
} |