HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 y3 s/ q4 K" A$ c1 T5 Z9 B% m
1 k5 }0 _( T! r! h; Y* b u
public Object buildActions () {
( {& |' E4 _& x8 e/ T9 A- L super.buildActions();- ?$ _! n; x, h1 S7 C6 p
. j; a" Y' k/ J7 _# \/ S' N // Create the list of simulation actions. We put these in
: ?1 J" N* r0 R& C/ G" A // an action group, because we want these actions to be
- \# g5 N# q% L* c5 F' } // executed in a specific order, but these steps should
9 g" {' b. M# N7 J/ k/ d# | // take no (simulated) time. The M(foo) means "The message
/ r3 a; h/ L' O3 D) Y // called <foo>". You can send a message To a particular! X& B+ _7 t3 }- |' ?8 {
// object, or ForEach object in a collection.
+ M& j8 Y5 `* L) s Y
% {+ M% `3 T3 V$ Q# G; K. g // Note we update the heatspace in two phases: first run
1 I9 z5 ?0 \+ j a // diffusion, then run "updateWorld" to actually enact the
4 y3 Q7 r. h \ B/ Q# [ // changes the heatbugs have made. The ordering here is
2 C3 C/ Q' z( ^. v, c) Q+ x' E, Y // significant!
% v% }6 n; [2 F' Q2 j( x. Z : h+ m0 I, L# ^
// Note also, that with the additional
3 E% ?/ }# l& j1 S. Y5 B0 t // `randomizeHeatbugUpdateOrder' Boolean flag we can& l- {. A9 e1 y1 f! Z8 y
// randomize the order in which the bugs actually run
4 x# U$ `3 E' ~" l // their step rule. This has the effect of removing any
2 y" d# x0 g: e$ u# x/ j8 A // systematic bias in the iteration throught the heatbug
$ U3 I' x" v6 Q6 U- R // list from timestep to timestep9 |8 u* _3 H5 R! X% U
* G( T# E/ ]. k S1 i; \ // By default, all `createActionForEach' modelActions have/ B) v( G7 k8 ?% ^3 X+ k
// a default order of `Sequential', which means that the
5 I5 [ X4 I4 q) w9 |' m // order of iteration through the `heatbugList' will be( `4 m1 B; d5 F9 V8 j
// identical (assuming the list order is not changed
+ @/ v+ Q: M# K0 K+ ` // indirectly by some other process)." c/ M3 e1 W* m1 {0 V- w
% J3 W- k/ Z; Q2 C+ J
modelActions = new ActionGroupImpl (getZone ());) o% W& s' p& O
/ d& _1 H3 P" S5 D! I$ m try { g6 o9 [- J$ |1 ]! `5 A, o! {
modelActions.createActionTo$message) Z& ?1 [9 S8 ]' A7 z9 Z
(heat, new Selector (heat.getClass (), "stepRule", false));, m. r0 l/ d! Q
} catch (Exception e) {/ s. z1 G# o, z1 F) T* y6 K3 T/ R
System.err.println ("Exception stepRule: " + e.getMessage ());
- F4 i* ^ P9 v; T! d' f; A/ { }
4 r2 A" j/ h/ M% ?) [5 V; B3 I/ |, P! B
try {
) v# ?! M# d7 i; _8 E1 [ Heatbug proto = (Heatbug) heatbugList.get (0);
% h3 [ p7 z8 P Selector sel = $ A2 | M4 `/ v) F3 g5 X) _; Y
new Selector (proto.getClass (), "heatbugStep", false);: x: x3 |1 [+ j& o* \
actionForEach =
7 V w. j: \' z6 {) y: Q- H5 J; _7 H modelActions.createFActionForEachHomogeneous$call8 v$ W9 H, Q$ h) {
(heatbugList,+ i$ B; X7 Q) ~% {$ t L
new FCallImpl (this, proto, sel,
; g: [- ~; b+ z' `6 J: Y& T; N new FArgumentsImpl (this, sel)));) f: |' L1 N4 T k
} catch (Exception e) {
2 s j$ w* s( c: ~( V5 K( d" X e.printStackTrace (System.err);' [0 M& c$ q. E" [, l+ g. P
}
& G: W: o0 E! j; K + D8 U) I. e3 Q" H. c& M! c
syncUpdateOrder ();
2 s" S; U+ ^0 c. ]: a9 N1 B! S+ u5 M' t; j4 S/ z8 |) d/ |
try {) H7 `% d; V5 y' {* i3 x
modelActions.createActionTo$message 3 ~! I! y0 L ]
(heat, new Selector (heat.getClass (), "updateLattice", false));( z% o5 R7 L$ y
} catch (Exception e) {/ O$ n& _& u9 \; m4 j
System.err.println("Exception updateLattice: " + e.getMessage ());
' H6 p4 T* N3 g }/ T6 H0 ]/ J3 u9 J0 K7 P
4 v! i8 X* a8 d: W7 Q( I
// Then we create a schedule that executes the' h0 e/ K3 `1 t8 |! [+ m- M) t8 [
// modelActions. modelActions is an ActionGroup, by itself it2 J. N; l3 c3 g$ T
// has no notion of time. In order to have it executed in: H) [5 g3 ]8 U' T
// time, we create a Schedule that says to use the
$ g- H! @7 E$ s2 Y) h$ n# _ // modelActions ActionGroup at particular times. This; G8 \ z1 P# v
// schedule has a repeat interval of 1, it will loop every b4 }5 \8 _( i. q& ~
// time step. The action is executed at time 0 relative to
/ \. z5 j5 p( @4 C, T // the beginning of the loop.
6 t- ?$ J! g8 ^- ~# {5 w% p6 s8 l& _: E w1 h# q( T1 Y
// This is a simple schedule, with only one action that is6 N0 z2 q7 G1 O, i; I2 y
// just repeated every time. See jmousetrap for more d4 w2 q7 X8 w6 r6 z. s2 v4 P
// complicated schedules., Z ?$ s' \) P4 [! e8 M/ w
( r+ E1 Y; Z5 J0 m6 l8 K
modelSchedule = new ScheduleImpl (getZone (), 1);
4 E2 t' ?6 w) o' g modelSchedule.at$createAction (0, modelActions);
, K! x4 V3 r0 E3 ?7 [' ~7 `) ` 5 f5 i" ]; w4 e1 V2 P
return this;
* Y/ B" X3 m0 ?; n7 e. h0 | } |