HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 [2 Z- E% B' a
5 w) v: R9 L9 A# H2 w8 x public Object buildActions () {; w7 P9 J5 q7 {: B
super.buildActions();
% w+ J5 k# ~# V* L, E2 _, u& i
( J e9 n6 i+ @5 S1 C9 M7 u // Create the list of simulation actions. We put these in
, b, @$ ]4 F Q0 w+ W' z4 @) O // an action group, because we want these actions to be
8 P9 E( c+ P* `6 `( e6 a8 { // executed in a specific order, but these steps should, A5 W0 i) O& }8 N/ [# m
// take no (simulated) time. The M(foo) means "The message
6 _8 r4 k: E7 G. z' j b // called <foo>". You can send a message To a particular0 M, i8 z4 _& _. m2 o
// object, or ForEach object in a collection.7 f1 z7 b/ H2 F4 v3 X R
( T0 K. F* c+ h. H" I // Note we update the heatspace in two phases: first run
5 D% |& W y/ U& U' a, I // diffusion, then run "updateWorld" to actually enact the/ p) _- r L s6 w3 o9 }( w
// changes the heatbugs have made. The ordering here is8 ^+ {4 J! A2 d \" M, E
// significant!# u& ?+ O! V) D0 M# I. r
" j T$ ~; T l; P% z // Note also, that with the additional
9 T, `, ~% H1 V& V! F+ Y // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 b2 c7 b1 K; I X // randomize the order in which the bugs actually run
& e6 m! V* T1 ^8 n% W // their step rule. This has the effect of removing any l6 P! o8 F* ?. c9 n
// systematic bias in the iteration throught the heatbug5 N- \8 n0 Z0 g7 e& J' x" \& s
// list from timestep to timestep3 o& c) Q5 z; P% ^8 R, _+ }
! x5 G% M% g e
// By default, all `createActionForEach' modelActions have6 N5 \8 |" f& R. _. R6 r
// a default order of `Sequential', which means that the
- w2 ` y. @: {* V0 B // order of iteration through the `heatbugList' will be
. z! Y5 g$ a9 G$ u K& [& X // identical (assuming the list order is not changed
1 v1 ^* X" h0 K+ ^5 Q // indirectly by some other process).
% X8 L E& J4 M 8 Q, _$ ]% O, \" ?0 K& j
modelActions = new ActionGroupImpl (getZone ());
0 p7 k! a# i+ k# O: b. Y$ G' h2 Y8 x" Y4 `
try {9 `8 K8 I' {: {3 F. _& r
modelActions.createActionTo$message2 Q8 y" s' p4 ]. m) W
(heat, new Selector (heat.getClass (), "stepRule", false));
v& Z4 w2 i1 I } catch (Exception e) {
+ m0 p, y6 R) d% ? System.err.println ("Exception stepRule: " + e.getMessage ());
! R7 _# I8 r _9 R( t }' z f1 Q- F3 H. Y! a- p/ ]
$ w' V+ Z s) x+ S
try {
6 b( [. |) Z7 A7 r2 w& g Heatbug proto = (Heatbug) heatbugList.get (0);3 I2 ^' Y- R3 x
Selector sel = ) e7 x: Y& a6 n" _& M
new Selector (proto.getClass (), "heatbugStep", false);
$ c1 K# N# A+ K3 X# J; K I6 S# Y actionForEach =
8 M- h$ \1 [- @1 X modelActions.createFActionForEachHomogeneous$call
6 l! _5 L9 e, Z" Q/ [ (heatbugList,9 H7 Z u% U* ?0 V3 H0 _) Q
new FCallImpl (this, proto, sel,
; u& [- ]' l F8 U5 U# Z4 r8 g new FArgumentsImpl (this, sel)));
6 Q* s, U- \9 g7 D4 t. T: C } catch (Exception e) {' Q( b5 s: {- K$ Q/ i
e.printStackTrace (System.err);5 E2 W" i( r$ S
} u* Q, }- A' z" [4 G
6 K- f2 a6 F& y7 v
syncUpdateOrder ();& G R$ G7 i) I/ A' s
8 ?7 s7 B- ]1 E1 h1 i# ^4 l G
try {
; N- J { B+ f modelActions.createActionTo$message ' u" L; x) `3 V! q! V
(heat, new Selector (heat.getClass (), "updateLattice", false));
& k9 e3 E0 |% Y3 E! |9 Q, S } catch (Exception e) {
7 C0 [) _/ G+ F, P System.err.println("Exception updateLattice: " + e.getMessage ());( V; e; G7 @0 X
}
8 R0 p* ~5 N& p' ~( V 7 y$ Y( n6 A: G1 ]" G; w% F4 G
// Then we create a schedule that executes the# v3 y3 j3 w( v5 v
// modelActions. modelActions is an ActionGroup, by itself it
, R( {# H7 g0 W1 X6 Y // has no notion of time. In order to have it executed in
$ T( K, \4 x1 i5 M2 j // time, we create a Schedule that says to use the
6 j! [- f! m/ [/ m1 E7 v$ V: D // modelActions ActionGroup at particular times. This9 S9 T7 ]9 T7 B; W
// schedule has a repeat interval of 1, it will loop every
# A! z' {- y- a2 [$ c: X1 y) N // time step. The action is executed at time 0 relative to
% n+ @" q: c& u5 t9 ] // the beginning of the loop.5 j7 J2 i* k/ ^; o) o4 ?
. k& e/ q" P2 V) R* ?5 _5 X' C
// This is a simple schedule, with only one action that is
" o# b* A; y: ?0 y; P. {" L: z/ ~ // just repeated every time. See jmousetrap for more
; Y& O$ h# L. j2 P) `( ?9 i* |! \ // complicated schedules.
+ u2 d" ]% P! {; {! w' R* h$ h 3 i( X# K6 u: r! Y% d& S
modelSchedule = new ScheduleImpl (getZone (), 1);1 g0 e l7 ~9 {# P) J
modelSchedule.at$createAction (0, modelActions);
: V; x% H s) x/ M: J
! t& f# X, y/ R& g) u8 ] return this;
) \3 y: c+ _, R5 ]9 i } |