HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- { H" z. Q" A9 i# ?5 j% E( I) Q6 Z" \. o0 r
public Object buildActions () {- S* @0 s H Q% n; h8 D
super.buildActions();0 ~. p3 [ A" w Z: D- L
% Q- z9 M0 v0 a+ `; n
// Create the list of simulation actions. We put these in
4 N. C7 @. p0 c) S5 m // an action group, because we want these actions to be
7 {1 }# G& }- H1 O1 f // executed in a specific order, but these steps should
# \( c- ~! x$ r! F* \ // take no (simulated) time. The M(foo) means "The message
) r0 ^% u& E5 l$ ?) U/ @ // called <foo>". You can send a message To a particular
6 F( |' V) h. w/ f# Z% t) { // object, or ForEach object in a collection.. _& G' R, [# e- x' Q+ N
" v+ a! ~& L; P1 v$ J! |
// Note we update the heatspace in two phases: first run
0 @9 S* W: e; S( O/ _ // diffusion, then run "updateWorld" to actually enact the' w5 b+ j% r# q" h6 P0 Q# N0 X( z: F( |
// changes the heatbugs have made. The ordering here is
- t L% X$ Y+ q& k2 U9 Y; @ }! _6 ? // significant!; E: f( y( F2 A# m
9 R. W- D0 ?9 H* o0 L // Note also, that with the additional$ `! y2 Q9 d# m# K4 Q/ F
// `randomizeHeatbugUpdateOrder' Boolean flag we can" X' Y: Q# k( g& i) X! y
// randomize the order in which the bugs actually run
2 I/ F5 j4 O& ?- u( ~ // their step rule. This has the effect of removing any7 n) b! I+ R8 e/ ~
// systematic bias in the iteration throught the heatbug
, _0 @3 ^/ T# @; ^8 F+ G& ` // list from timestep to timestep @ w3 E- \% d$ M% ^
2 \" }4 ^* l# H // By default, all `createActionForEach' modelActions have
1 l3 D" s w9 `3 A; C // a default order of `Sequential', which means that the
$ Y# t4 h& X* D& b // order of iteration through the `heatbugList' will be
+ t( ^' |: v+ g; h' e9 w7 g" k // identical (assuming the list order is not changed
4 c+ U. f; X# O$ n# w // indirectly by some other process).
! |4 `$ g4 p! a h3 r, N . r, A/ h4 [7 G- U/ w( v
modelActions = new ActionGroupImpl (getZone ());% n7 m1 t; L! X: m
: p. b6 T) w! }3 E! g) [( q8 \% j! L try {' m, O9 N: `& t( v* v3 w0 m) h4 `
modelActions.createActionTo$message
/ d! ~$ n: H9 ?: `1 u+ ]- s; ?# f (heat, new Selector (heat.getClass (), "stepRule", false));* q$ ]2 J" L# u5 [& O6 D
} catch (Exception e) {( M$ I4 u* T- \# I9 U
System.err.println ("Exception stepRule: " + e.getMessage ());
5 ~3 ^, y7 x5 }& s }
7 E: k9 K# m2 F, F1 l( S' A, K+ l* W# f
try {
4 S9 P7 B5 ]2 {/ w6 U Heatbug proto = (Heatbug) heatbugList.get (0);6 Y5 P0 Z# p9 B9 N! P- Q; W
Selector sel = , Y8 L: e4 F. C) J3 s
new Selector (proto.getClass (), "heatbugStep", false);
) p. c0 Q& U. B/ h! H4 N actionForEach =
5 @; t' F/ @ g& `. ] modelActions.createFActionForEachHomogeneous$call
. ]1 J9 C1 X6 W ~/ [ (heatbugList,
5 f( Z' S2 M! m new FCallImpl (this, proto, sel,5 [' i; n' S6 @+ V" V5 x- {/ J
new FArgumentsImpl (this, sel)));4 w8 ?" ?8 i) w( } D/ `0 u
} catch (Exception e) {
8 r$ `7 }3 N& y, r$ J e.printStackTrace (System.err);
% G9 x6 L9 ]7 F, [- t R8 b# A }# k y' [$ [+ E+ h
. [$ a, j- K7 \& C4 g7 o" }1 s/ f syncUpdateOrder ();
3 G; V3 [6 E& r
9 T# U* v' I8 p2 G! l7 y; U try {' e$ t5 w$ F q; ?4 A6 A
modelActions.createActionTo$message * f2 F4 X& J$ C) m
(heat, new Selector (heat.getClass (), "updateLattice", false));1 H9 d/ g( S# }% v
} catch (Exception e) {( j2 q* `! m4 m: A
System.err.println("Exception updateLattice: " + e.getMessage ());
2 @: r) H- V N( A }
: B( I) E1 O+ I; G
u9 S% R) o" r1 k; E // Then we create a schedule that executes the$ r2 v7 @9 k$ b& L# `
// modelActions. modelActions is an ActionGroup, by itself it
/ M; n: N' u! R, l9 e // has no notion of time. In order to have it executed in" s3 f2 D* k) |- x$ P- ^2 Q* ^3 ?
// time, we create a Schedule that says to use the. W0 o% ]& }6 N% Q5 N# d9 p
// modelActions ActionGroup at particular times. This9 I4 b3 Q8 Z7 e3 K
// schedule has a repeat interval of 1, it will loop every
! }" r1 X7 Z6 e1 m // time step. The action is executed at time 0 relative to5 S# X$ I* p1 e* ?) N6 i: h
// the beginning of the loop." Q0 w2 b7 ~/ L4 o" F" P1 I$ U, l
) y1 j/ J; O2 ? // This is a simple schedule, with only one action that is
6 E/ K& I s& L/ U6 r& U // just repeated every time. See jmousetrap for more9 G" T8 c5 \& l: ~" {
// complicated schedules.
% Q$ R% f7 {8 i: U6 l, A
, L9 w/ A/ f5 h/ L modelSchedule = new ScheduleImpl (getZone (), 1);
0 n1 F( K& d% k. A# P- d$ l7 y6 F; r' _ Q modelSchedule.at$createAction (0, modelActions);
& P% ^3 ^+ r- Z/ s 3 _1 a8 E5 G. r) r& v' |
return this;
! f9 Z U& n; `9 H8 T7 } O; v# O } |