HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, E& r H% c. d' D% J! I3 P$ D3 R5 K( U' L9 z% x, O$ A
public Object buildActions () {
: W! r! M1 T& G$ b! A; `$ N3 F, O super.buildActions();
+ N8 H6 u8 m8 x2 G& c ( E/ n7 k9 o. l: g7 ^0 j) d9 q& I
// Create the list of simulation actions. We put these in+ V; x% M8 M! c' L3 H) I0 w
// an action group, because we want these actions to be0 |0 z$ p" h. t7 l5 }! _
// executed in a specific order, but these steps should
( z1 t& t# W9 G, l4 }+ O+ U9 L% C // take no (simulated) time. The M(foo) means "The message
- p. m; y3 @0 t. K7 w J, Q // called <foo>". You can send a message To a particular8 U3 D1 }8 Z: |, U2 a! M* Q# b" Q
// object, or ForEach object in a collection.
$ o t* z) j" K
! y4 A/ q) ?2 R# g+ b, w* z // Note we update the heatspace in two phases: first run% H: @- F' A/ @+ Z3 _
// diffusion, then run "updateWorld" to actually enact the
6 m/ _& H4 e0 } // changes the heatbugs have made. The ordering here is
: |" p( | j+ ^. _ W1 K // significant!0 Q. e* R3 Z& T w( T
" T3 i3 a9 B, k% z5 t- r2 t // Note also, that with the additional, r) s- g3 ?& `6 \3 L
// `randomizeHeatbugUpdateOrder' Boolean flag we can5 W) S, s$ L, ~$ O9 H
// randomize the order in which the bugs actually run
& Q5 l5 [7 P2 \0 m* r. B8 K // their step rule. This has the effect of removing any- g# I( Z& v# \/ J8 }6 J
// systematic bias in the iteration throught the heatbug7 x5 Y D& r" w" T/ S
// list from timestep to timestep
) Q( @' H8 G; b& ? : u: D& \8 ?# r3 f" g P
// By default, all `createActionForEach' modelActions have
( `9 W! Y" _& `1 R! ]; Z+ ?8 _! R // a default order of `Sequential', which means that the# _& s2 M; K- D' S
// order of iteration through the `heatbugList' will be
$ K0 K+ n# i, W // identical (assuming the list order is not changed
$ I2 G: F& U% s. m! W1 q- P+ U // indirectly by some other process).
, f% g: }* N! E+ C0 r) p6 |
7 f8 R/ n, U, z4 F7 H. b modelActions = new ActionGroupImpl (getZone ()); T7 ?, q9 G2 `3 V
4 b6 o: y9 V" j* {& K4 a try {( w; h& {6 S( Z* c1 }
modelActions.createActionTo$message
% S* ^- t1 ]7 m( P# d (heat, new Selector (heat.getClass (), "stepRule", false));
5 O5 p2 n1 J, L } catch (Exception e) {
9 E: a4 h% p! C Q/ a/ `% q3 Y System.err.println ("Exception stepRule: " + e.getMessage ());
& O$ R2 q# E( n% J8 u }- L3 q6 V2 L9 r. `
, v# W+ s4 k6 Q; H try {; u6 F4 v+ y( s1 `) Y
Heatbug proto = (Heatbug) heatbugList.get (0);$ N$ E( }: ?$ n# V0 W' n
Selector sel = 9 p# ?: o' T1 m: d6 ?
new Selector (proto.getClass (), "heatbugStep", false);
2 @9 N' U' I: z& {6 v- S actionForEach =2 b9 @# e- c9 i; S H+ r. R6 `
modelActions.createFActionForEachHomogeneous$call# V; g) @; u/ ?4 W, u. j2 r3 q
(heatbugList,
2 @6 O( [" X/ w4 I* c# D+ e new FCallImpl (this, proto, sel,
& [( t8 j: w5 o( ^/ h new FArgumentsImpl (this, sel)));
8 d- Q. M' |9 }6 K } catch (Exception e) {
( j6 W) \. r6 h. p" ^ e.printStackTrace (System.err);
3 h1 Q0 f& i: o4 U2 ]' H3 c- ]5 N }
9 K* w5 @2 P; }4 u. ~3 ^ : G! h5 q; w" a% p' P
syncUpdateOrder ();
6 ^( q8 N6 J- Z3 Y* E
" j% d# o& J4 X try {9 Z6 m1 g# W3 ~. @: |4 g
modelActions.createActionTo$message , b9 g2 k$ Y' d* w; Q- O; i
(heat, new Selector (heat.getClass (), "updateLattice", false));
s) S& U- L/ F7 i' `' T0 \ } catch (Exception e) {$ @0 ?$ i/ J1 b( e+ `- s
System.err.println("Exception updateLattice: " + e.getMessage ());
3 w9 H `8 [) ^ }, H/ o4 D/ J$ \8 G8 C# s
7 _- `; U1 ^% }: K- i" g) t$ A // Then we create a schedule that executes the, i, Z; O* M) n* @
// modelActions. modelActions is an ActionGroup, by itself it+ V) `6 W% {, Q3 ?1 b' s
// has no notion of time. In order to have it executed in" J* Z" e- a# O1 U
// time, we create a Schedule that says to use the1 O: C/ o$ Y: v6 q3 ]1 l' M
// modelActions ActionGroup at particular times. This7 m8 P/ }/ y! u1 S! r' A
// schedule has a repeat interval of 1, it will loop every+ K6 h) K, a3 Y- ]3 s, f
// time step. The action is executed at time 0 relative to
% F6 h- |8 q8 N4 p7 A // the beginning of the loop.! A- G, Q, x! N: y1 K( ^
, g2 t" f' @! O! y6 k // This is a simple schedule, with only one action that is
( K3 ?+ X5 E1 E5 R5 {: c4 q1 Z6 t // just repeated every time. See jmousetrap for more
, b9 b3 |. s7 H- P. G' C // complicated schedules.* S1 O+ B7 h& z8 W; [. G
@2 O& R7 y: f( r. {
modelSchedule = new ScheduleImpl (getZone (), 1);2 e9 H2 ~5 {1 f
modelSchedule.at$createAction (0, modelActions);( \7 I/ p0 p3 Y' p' s: t( a
% V+ h- X; f% Y! ^+ V' ^& Y return this;
, u8 t0 L0 m$ c) d1 u. T6 o% a } |