HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' l8 d/ r+ \6 k r9 S) }' q
9 H. d$ ?( F6 V public Object buildActions () {9 x. y& w1 W8 u/ A
super.buildActions();
, D/ R9 Q. L$ S1 }! T" b
# S4 ?# V# M1 I( z, D // Create the list of simulation actions. We put these in& W/ y/ t1 D2 e0 J# \
// an action group, because we want these actions to be+ d3 k3 {3 c+ ^0 |
// executed in a specific order, but these steps should
& ?3 z" o1 g1 q% F) z! r // take no (simulated) time. The M(foo) means "The message
8 s* _6 c# T, W( [! ^7 M) y8 o // called <foo>". You can send a message To a particular
. S$ i% h; [+ o' C1 s/ D // object, or ForEach object in a collection.
7 [$ s8 V8 R1 i 3 r2 ~4 W& b' y" J. `
// Note we update the heatspace in two phases: first run9 j9 A* K" Y1 R6 x3 b2 u
// diffusion, then run "updateWorld" to actually enact the
* L9 Z5 h0 T* p$ m4 A" ~ // changes the heatbugs have made. The ordering here is( ~8 R9 u+ G: B/ z8 A* |+ z
// significant!
- M+ [. b. f" C7 t E1 v& j# l5 O & @. p7 Q+ T- I3 D
// Note also, that with the additional3 V5 i z* y* k8 y2 ?- H5 Q% I
// `randomizeHeatbugUpdateOrder' Boolean flag we can
* _! n0 d1 h& Y" X$ Q" Z5 P // randomize the order in which the bugs actually run" C3 [/ _8 J# N n# V0 k
// their step rule. This has the effect of removing any/ b& \5 N9 I8 N% y) g2 q2 l0 F
// systematic bias in the iteration throught the heatbug
% z- f I, q6 E, p% C% k // list from timestep to timestep
" k, w/ k8 ^; {2 s% L; Q! o* \! R 7 V8 Q. a* x9 i/ B( u
// By default, all `createActionForEach' modelActions have$ g& b6 U2 Z7 l/ J& h9 R
// a default order of `Sequential', which means that the
% k: k5 T' K6 b* q q: a9 [3 E5 D // order of iteration through the `heatbugList' will be9 T# b v) `' U% W5 u# w" U$ y
// identical (assuming the list order is not changed
" b, K$ B, m% Z& Y // indirectly by some other process).
; D9 p+ B+ }: |/ |* X- e4 R) K ' U2 v: b! |; z, g
modelActions = new ActionGroupImpl (getZone ());
0 l- X. u F6 ^/ f
- v9 T8 _# ~$ z6 ] try {& r6 F# I% S; T" M S
modelActions.createActionTo$message
' E7 r# ^ K; \ (heat, new Selector (heat.getClass (), "stepRule", false));, h2 q! y; O5 \' Q; h7 h1 H
} catch (Exception e) {
! B7 N) Z" o- q% a4 {$ ^0 A System.err.println ("Exception stepRule: " + e.getMessage ());: ]: {# l, l( z
}
: H# S1 E# ?$ v# y& \4 t0 b2 b; ^4 V- E% w
try { V" Q0 P' L5 O0 G
Heatbug proto = (Heatbug) heatbugList.get (0);
" N. {- L( q3 ?) D Selector sel = * U6 h' U+ {; _
new Selector (proto.getClass (), "heatbugStep", false);! @& e$ h6 [& Q( j/ {# S
actionForEach =$ S$ v9 a. Z. P/ C* \+ M
modelActions.createFActionForEachHomogeneous$call
- i6 \ H: {/ T! y* s6 C) H) b (heatbugList,5 l* N1 s, ?4 F/ _" l* b
new FCallImpl (this, proto, sel,
2 K& n$ k+ b- M! g: K: B2 s new FArgumentsImpl (this, sel)));
1 h( Q- u% n* p1 b M* r* N } catch (Exception e) {
( h% p& v+ y& i1 ?8 z6 h e.printStackTrace (System.err);$ d' m* t$ A# }# C
}5 {: a' V6 `5 W! J: x6 c
( @4 Y0 T- n7 |; A3 m, V( P& {
syncUpdateOrder ();! E9 g7 j3 D" F6 m; j4 ?
, b$ \2 s6 x7 W. C: A
try {& R* ?- p; S% c* m5 k0 t
modelActions.createActionTo$message " {) ^3 g, p. h5 ?: o
(heat, new Selector (heat.getClass (), "updateLattice", false));
3 t8 a0 K) n9 D4 _. K F: W/ h$ c } catch (Exception e) {# j3 @) \) [2 y1 ]
System.err.println("Exception updateLattice: " + e.getMessage ());
+ ^" A$ I0 x; s: k6 k, \; Q }
2 @* y5 p7 o6 p- L3 A0 b, M
0 T2 y1 d e1 g- H& R; D // Then we create a schedule that executes the
1 |- s& g" l& u" b4 e1 E" U$ D // modelActions. modelActions is an ActionGroup, by itself it: [$ u$ L# d5 O4 h3 |
// has no notion of time. In order to have it executed in
; j( X# f1 H; {2 H% Q; t // time, we create a Schedule that says to use the
7 w! g; ^" t# L6 Q/ n // modelActions ActionGroup at particular times. This0 z0 q* i2 `! [2 s! f; W
// schedule has a repeat interval of 1, it will loop every
/ k& U' u7 }3 V- n8 V // time step. The action is executed at time 0 relative to) P! d1 k; A5 s4 l' T$ X
// the beginning of the loop.4 o% O1 W d3 n# Y: `; b% k
' Y, v( T2 w2 I: `" l8 b+ r# M! J // This is a simple schedule, with only one action that is4 O" s: _/ P: `, {6 u* n) q4 V
// just repeated every time. See jmousetrap for more
, R4 U! k9 r6 @/ N1 B0 w7 O9 | // complicated schedules.
# t; y, a4 M- X: t
' K9 Y: K, G6 v1 A, v& j9 K modelSchedule = new ScheduleImpl (getZone (), 1);. o |2 m* S" ?0 j5 {5 @8 ?/ |
modelSchedule.at$createAction (0, modelActions);5 N" w2 b, M+ H+ t
: z+ ?/ T K6 }+ } h, V3 ?! s return this;4 A3 p0 M1 Y4 y) u& `
} |