HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
1 i: D! t, ?( }! c$ t( H1 {( Y( i+ R7 m& _/ W. q3 x
public Object buildActions () {
7 T( c* ]4 }! S! K/ M7 M5 I super.buildActions();
: E& H0 ?( @8 V+ x. @
$ u1 b4 v }2 ^0 a- h$ h // Create the list of simulation actions. We put these in
* L. C$ ?6 V% J" l // an action group, because we want these actions to be
_. p& s" H1 t+ o2 D. Y) o, y" H8 t' b$ i // executed in a specific order, but these steps should
, ]( y, z! C( M* Z& e& w1 ?; T. _4 g, v // take no (simulated) time. The M(foo) means "The message8 j4 }2 X2 e, [) D1 p
// called <foo>". You can send a message To a particular- x, u! M& d* f( E% v- N& K& M( `
// object, or ForEach object in a collection.8 r! Q* c9 k! S- G9 i% r
+ ]$ }% m. ?4 b( C* L
// Note we update the heatspace in two phases: first run( i$ m8 D* w! t, Q: ~
// diffusion, then run "updateWorld" to actually enact the
. U: A" d# _0 D! t1 [7 n* A' q // changes the heatbugs have made. The ordering here is
( \1 }! M; z! b. \4 l! ]( Y' S, } // significant!+ m8 b- ?) U9 v6 t" ?* @ Q' K
% K& [# a6 e: O
// Note also, that with the additional
8 B* _& t8 q( X2 U+ G- X // `randomizeHeatbugUpdateOrder' Boolean flag we can9 E. u% y' q4 J2 E
// randomize the order in which the bugs actually run
* i4 E3 Z8 F; y+ S5 X) l // their step rule. This has the effect of removing any, b; y, A$ A1 h6 k0 v
// systematic bias in the iteration throught the heatbug% [! Z# H# n' u$ n5 }, y. z( p
// list from timestep to timestep
2 ^! }3 {, q% x. {0 ?; z
6 N0 O- J; {4 J% V: Z7 h // By default, all `createActionForEach' modelActions have
- r' [: {# W3 C- w- O9 a$ k // a default order of `Sequential', which means that the
. C, G& n9 ?- e9 F0 B o( } // order of iteration through the `heatbugList' will be
* Z y* \, {& n6 t I7 z // identical (assuming the list order is not changed
" a7 u" L `2 x0 ~ |$ T // indirectly by some other process). p2 ]1 d! F3 [. s8 m, X
5 t7 e+ S3 N! K0 k' b, @0 c& Q modelActions = new ActionGroupImpl (getZone ());+ H5 A( t( [$ T
. @3 |6 E2 l/ U5 E# O } try {7 r, u$ e; c. n2 F+ l: d
modelActions.createActionTo$message
% J3 `; e# J( m* X' P (heat, new Selector (heat.getClass (), "stepRule", false));
( s3 V! L# w3 w, c% y! W } catch (Exception e) {
, \8 }& Z* |8 f, C8 B System.err.println ("Exception stepRule: " + e.getMessage ());7 E- m4 e3 ]+ H7 e0 d& y, F
}
+ m9 O" V/ Q7 \" S; @( r
4 A" L$ y9 y3 J5 j/ o. A" K try {, N0 p9 a* g F- E1 q) o2 k
Heatbug proto = (Heatbug) heatbugList.get (0);
- I7 Z S. b) C, G& c% S& ?' J7 L Selector sel =
3 X# H7 I9 }2 n- I [ new Selector (proto.getClass (), "heatbugStep", false);
2 F' Y2 ~3 d1 d5 m; O actionForEach =3 U# z; d1 K0 u1 X2 w5 {; z" K+ f: r
modelActions.createFActionForEachHomogeneous$call
$ N( }6 l4 D$ F/ @% F3 x l (heatbugList,( o! B1 C- x" ?$ @; @. |
new FCallImpl (this, proto, sel,- T% a6 ?2 G3 g, x' B
new FArgumentsImpl (this, sel)));: @! T+ i* c; w* f9 _7 g* w
} catch (Exception e) {
6 C! }; _7 [6 A+ Y$ r4 Q e.printStackTrace (System.err);
" Q: o4 k ~& H& Y5 r+ ^* j; f& o }
4 |, f, U% C. Y* J. d) S 8 d4 e& A" G; d5 G1 T
syncUpdateOrder ();( t- s5 B$ U6 {! B2 t
( h, f5 q$ D3 K6 G* {$ ~* { try {
& t* o: c* j5 c7 B. f' s modelActions.createActionTo$message
% }- \3 h$ I- \9 p; H) y2 t6 n (heat, new Selector (heat.getClass (), "updateLattice", false));- N- G) b' K: o! c
} catch (Exception e) {
& T' N3 Z5 o, [8 k. a- P7 |) F System.err.println("Exception updateLattice: " + e.getMessage ());1 v- m; u* Y/ P$ @- n$ `4 d0 ?* g
}
* K1 y! w" T6 w+ x8 P2 z / M2 E- ?8 l! H3 `6 W# W
// Then we create a schedule that executes the
- K& n0 @4 M7 H R5 \ K( {6 }! R4 ` // modelActions. modelActions is an ActionGroup, by itself it& f0 o- ^4 ?! E2 G' m0 {$ Q
// has no notion of time. In order to have it executed in
- k! U0 ~; D; ~& ~% R // time, we create a Schedule that says to use the
% ~6 o+ z* M! _/ p6 N! G // modelActions ActionGroup at particular times. This8 O8 V* A1 ~; _6 u! {) {
// schedule has a repeat interval of 1, it will loop every* E: d5 c$ h9 B2 M
// time step. The action is executed at time 0 relative to d' a0 c: a, c3 N$ o9 w
// the beginning of the loop.
: Q! H6 T8 z8 g$ q/ B: h3 h6 E( p* H7 I+ W* G7 q
// This is a simple schedule, with only one action that is
- O8 B8 l8 L' W5 g8 L6 I // just repeated every time. See jmousetrap for more/ t& _ N+ m: V, c
// complicated schedules.: S3 {: m* u! d* _9 U
3 F- d# k4 p& J6 d% ^ modelSchedule = new ScheduleImpl (getZone (), 1);$ K9 t' I t7 O1 o9 w2 s& }
modelSchedule.at$createAction (0, modelActions);
! D& f9 A; G! l/ s! m
* ?; V! t+ T9 I return this;
! ?; {( Y) O3 V2 ~ N } |