HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: t0 p i& R, v: E" p& F
( }& R9 X6 P0 K' K8 z public Object buildActions () {
! `) u L0 H& v# y6 U super.buildActions();
+ R) P! a8 J7 o% P9 u V 3 p4 l& M U$ q3 b$ H6 c6 M
// Create the list of simulation actions. We put these in
% A7 [4 }* X5 N0 s& h // an action group, because we want these actions to be7 I+ M4 ], O% _4 E
// executed in a specific order, but these steps should& j4 K7 [ w" W0 T
// take no (simulated) time. The M(foo) means "The message$ M$ P. F7 a* ?. S8 k+ d9 g$ S% [
// called <foo>". You can send a message To a particular. Y. Z' g( n8 K, G
// object, or ForEach object in a collection.
8 r* }5 i9 K# V
3 k1 g9 w d' d& n // Note we update the heatspace in two phases: first run
% k( V5 q. O7 z+ q // diffusion, then run "updateWorld" to actually enact the
* H$ L/ J! [: H // changes the heatbugs have made. The ordering here is7 i2 S! @2 C# z( y$ O k7 l
// significant!4 M. N' V+ w/ b* D
% G/ {, O- _3 S3 }' _. Q: i // Note also, that with the additional
) d/ e! F3 I3 H0 ^2 t1 f$ P // `randomizeHeatbugUpdateOrder' Boolean flag we can
; L" P1 ?# } s0 F1 q$ U // randomize the order in which the bugs actually run
- }0 [* X* p5 h w5 k, E f // their step rule. This has the effect of removing any
- A7 d% w4 C5 A! Z // systematic bias in the iteration throught the heatbug, k; [7 m" B, Y8 }' N
// list from timestep to timestep% y( ]2 l4 _' t9 H0 ~, j
9 }+ `0 r% o; T9 p( f // By default, all `createActionForEach' modelActions have
/ M# K& o/ {; i6 r. s0 s4 U // a default order of `Sequential', which means that the
q. C! L; v) Q0 a // order of iteration through the `heatbugList' will be$ v. e; N w# I, w2 v$ M6 ?
// identical (assuming the list order is not changed4 `; B q3 T# b$ Y5 o
// indirectly by some other process)., _8 G5 p' J, T0 t! [
& b3 ?4 T) z+ O% ?
modelActions = new ActionGroupImpl (getZone ());, B0 y4 h3 F: Y! @
. L' _2 i8 O6 h: m/ @# p try {
. g8 D$ `/ [) v% a* @ modelActions.createActionTo$message
; ]/ H- x; c; C6 m# k, z (heat, new Selector (heat.getClass (), "stepRule", false));: [. z( N7 }% B. s1 A
} catch (Exception e) {' T7 A* n, y/ v) C
System.err.println ("Exception stepRule: " + e.getMessage ());
4 ?7 r/ {2 M4 X3 T$ E }) j2 t; |9 D% c
' i- X, N0 C* j$ x5 o) f, E) Q
try {
& y$ m9 E- u8 [. t" @ Heatbug proto = (Heatbug) heatbugList.get (0);# d& P9 C+ d9 t! {
Selector sel =
% }5 N! w9 n+ k new Selector (proto.getClass (), "heatbugStep", false);
' J* Y0 ]7 W: H1 l actionForEach =7 j* |8 @: P7 B7 }4 K( p% w9 U4 p( ^
modelActions.createFActionForEachHomogeneous$call: P2 }: f4 X# v( W
(heatbugList,
( c; o6 N v3 x. W+ U new FCallImpl (this, proto, sel,
9 g/ `, ]6 j0 J4 O, N new FArgumentsImpl (this, sel)));* N2 u; u }( s3 F/ X9 P
} catch (Exception e) {/ W3 M! X+ _5 }. P1 Y3 [/ ^
e.printStackTrace (System.err);# i5 i: z9 Z7 _2 U. U/ [
}! P- y5 t& M: F. L* ?6 H
, O1 B, j( L) |! ], V syncUpdateOrder ();
4 ^# B. r" V( h& m: d
& ~$ C$ U9 x5 N# d* j, {( n9 z# P9 o try {
A4 l6 Z. y( B! p6 n5 W modelActions.createActionTo$message
, a I# y0 M. L; d* t! \% o (heat, new Selector (heat.getClass (), "updateLattice", false));' c1 |; R* J, E2 d
} catch (Exception e) {3 Q& `2 J) L. Y
System.err.println("Exception updateLattice: " + e.getMessage ());
$ `: [! U( V5 v' Y& c; k' _ }
- F, H( r2 |( c' `7 w( z3 w
4 k7 Q& k( c" f, A // Then we create a schedule that executes the1 j0 J$ s. F5 F+ P
// modelActions. modelActions is an ActionGroup, by itself it
- `# a* L3 P( Z" F0 m! t // has no notion of time. In order to have it executed in
2 e4 ^! s) w: G( u; C // time, we create a Schedule that says to use the
; n, N6 G. `9 J6 A% o // modelActions ActionGroup at particular times. This; \) N) X. S8 \0 z8 v3 z# M
// schedule has a repeat interval of 1, it will loop every
. |6 L A ^+ r! k" Y // time step. The action is executed at time 0 relative to
4 E( [* M* I/ V3 ` // the beginning of the loop.
- w4 @ `& x6 x7 Q* L; K$ O: A6 ~: U
// This is a simple schedule, with only one action that is. e; x( s7 ?& U# `# r4 m( K! H
// just repeated every time. See jmousetrap for more3 g( O1 M# A0 w- k! Q0 k
// complicated schedules.
9 q# A) r9 t* k4 F, r9 K4 I
& }5 t8 ?- \# ]& f3 u/ l# }3 H! \; b modelSchedule = new ScheduleImpl (getZone (), 1);0 ?1 l. R1 ]0 b4 B5 H: ^. O" [
modelSchedule.at$createAction (0, modelActions);2 c1 K. o& ?8 g$ g
0 v3 ^ k$ z& Z( \3 v4 X9 ]
return this;
) H; b9 G$ v' k6 Q5 `6 N$ H" m9 K } |