HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 x' v' p u3 ~$ V) J0 N
- g5 D. |# v$ N; u7 {, Q
public Object buildActions () {; } }# d- X& q: O8 z
super.buildActions();* f8 y! c4 o- j* }
: `; t0 J p& M% |* O! }7 a+ F
// Create the list of simulation actions. We put these in1 r" I% W, z4 X! e* k
// an action group, because we want these actions to be
$ S/ C4 Y" S$ ~% k' G; ` // executed in a specific order, but these steps should
$ n2 C+ I/ j7 z% o( } // take no (simulated) time. The M(foo) means "The message
5 I' v" H" w+ C# @+ `0 \0 I // called <foo>". You can send a message To a particular, R9 o$ D6 n; j# T1 k, L
// object, or ForEach object in a collection.5 l, @5 b9 D% O/ Q+ j
" U8 i! Z& ^) n+ @* { // Note we update the heatspace in two phases: first run5 M& p/ {4 Q6 u
// diffusion, then run "updateWorld" to actually enact the
$ g. j# ]8 o- y" P, l // changes the heatbugs have made. The ordering here is0 x6 f* U2 Z L$ I& m* C) b
// significant!
9 G) w; k9 c J5 a+ [$ I
2 E9 H) w; h7 U, k5 l // Note also, that with the additional
% z/ {. y3 P( G; l) ?+ ?% a: h // `randomizeHeatbugUpdateOrder' Boolean flag we can! L% t/ e+ n; g# ^, v' ]( E5 Y5 g
// randomize the order in which the bugs actually run% |; e9 U6 l; O
// their step rule. This has the effect of removing any
% c" Y; o* o% S/ e // systematic bias in the iteration throught the heatbug
/ e: r; |! x |: ` // list from timestep to timestep
8 o( i0 ?) p6 d3 d+ y2 h8 | % B# \6 d4 ~% A2 c- y# }
// By default, all `createActionForEach' modelActions have
# J" e# \( g" e! S8 P3 O6 V // a default order of `Sequential', which means that the
* X! k0 E4 e* a$ y' ~ // order of iteration through the `heatbugList' will be8 b: y t5 m5 V( S
// identical (assuming the list order is not changed1 u# J+ T* ^& Z6 D: N' X B
// indirectly by some other process).
2 _3 I! Z1 F5 r$ x. q! k$ d
1 q! F+ L, y$ ]0 l modelActions = new ActionGroupImpl (getZone ());5 D1 p* r/ @ x& S$ f/ c
( N$ T1 n6 O" x try {" ~ N' Q z% q
modelActions.createActionTo$message( R) n$ t" g/ _3 ?$ D* g$ {
(heat, new Selector (heat.getClass (), "stepRule", false));, [3 e6 r3 L: [& j
} catch (Exception e) {
7 V- H& y3 a: Q7 n( ` G System.err.println ("Exception stepRule: " + e.getMessage ());
& q2 l8 U' U0 _! J( z& O* V, _ }
+ }6 K. C. M& S( h8 F) k1 O1 H: B) _
5 E$ o1 a! i/ e4 m9 ]1 y, t, `* e try {
( \- O% m/ l; _# y) U+ | Heatbug proto = (Heatbug) heatbugList.get (0);
% E: Q3 ]0 V* W# H& @ Selector sel =
# ~1 t1 Y9 c l5 W new Selector (proto.getClass (), "heatbugStep", false);3 ?1 m2 d7 }! a, h! W
actionForEach =6 t, J1 d" z2 B
modelActions.createFActionForEachHomogeneous$call
1 V# W/ p9 f- t% C- W; F% z (heatbugList,! U2 B+ r, D- d
new FCallImpl (this, proto, sel,
7 m. C6 o0 T# E, m& j- | new FArgumentsImpl (this, sel)));
3 ^$ \: n! i* R; I9 b } catch (Exception e) {
# y* {. y5 S: ~2 L" C* D! p: X7 M7 h e.printStackTrace (System.err);
8 b1 F) G- C- r4 L7 g3 E: Y }5 r: o, b5 b$ O+ T/ e" ]' v
; G+ Z. v( R2 `" [
syncUpdateOrder ();$ m4 x0 i2 q4 ?
/ H% t2 M+ g3 @9 s try {' K8 w% R# ]7 S/ l
modelActions.createActionTo$message
. ?% K. n* y) \/ c/ c/ |: f( h (heat, new Selector (heat.getClass (), "updateLattice", false));
# ~! v: ~- [1 A } catch (Exception e) {# _8 ^- J/ R1 W' |
System.err.println("Exception updateLattice: " + e.getMessage ());, W& R, q4 l( H1 }9 D5 K3 U
}& j' ?, R6 }- b+ O1 Y6 ]$ E( \* P4 v
+ g$ B2 w9 `- K# a6 U, _9 g
// Then we create a schedule that executes the2 A, S5 ~% L5 u! m: i
// modelActions. modelActions is an ActionGroup, by itself it; k8 j- Y9 I, S
// has no notion of time. In order to have it executed in/ p: C1 a9 e8 H
// time, we create a Schedule that says to use the
6 Z- K9 m2 k1 p/ J$ p' s // modelActions ActionGroup at particular times. This. C# l# a3 j V: a4 O
// schedule has a repeat interval of 1, it will loop every z S: _" s2 D. u: Z5 z5 s
// time step. The action is executed at time 0 relative to
6 u* i! F$ n6 ? // the beginning of the loop.6 l2 f! Y; \' J2 C; W' w
- j L3 z; }% j; z* ~7 X
// This is a simple schedule, with only one action that is
' t M8 M. b" R0 o4 D4 P // just repeated every time. See jmousetrap for more7 X6 W. \; Z" l0 b2 w' |
// complicated schedules.' h2 S$ p# h% o$ ?. O, ]7 \: @
% g( J# e( }+ N$ r+ x modelSchedule = new ScheduleImpl (getZone (), 1);
; ^0 o5 J: Z$ s) U modelSchedule.at$createAction (0, modelActions);
( g; V$ r3 z6 E. M; W/ u8 f& K6 Y
! q3 d: F+ d! z return this;
/ U3 W/ n+ `' U/ z" |4 T } |