HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: x. ]! i& f: E6 P* I/ J
( ]4 ?+ h6 |( P! z
public Object buildActions () {
8 J/ L# Q0 [% i super.buildActions();& u2 S- S* y1 x: \
* V) A9 m. I7 l7 |6 k; l // Create the list of simulation actions. We put these in9 M4 F) |: V. P# F- ^" W1 a* N
// an action group, because we want these actions to be3 F! s3 [9 q4 i4 S
// executed in a specific order, but these steps should
" b6 h$ O0 y/ p: V* ^% R s // take no (simulated) time. The M(foo) means "The message
: t+ M) }# c3 O8 j) M/ z x // called <foo>". You can send a message To a particular
+ c% @2 X+ L% x( X // object, or ForEach object in a collection.0 P% \, t) U3 n' H- o& l
) \2 W% P ?+ L6 k
// Note we update the heatspace in two phases: first run
0 H- p7 @6 w6 L# K* ~( l+ k- d // diffusion, then run "updateWorld" to actually enact the
; X, Q0 T! f, h // changes the heatbugs have made. The ordering here is
8 S; A: ?% n' v( g" d- {: B; l // significant!
3 l1 }% D# h" ^8 Z) C; E
3 ?; a' C$ A1 ^ Z/ b( G3 I // Note also, that with the additional4 P; [! V/ @( t. K' {/ s
// `randomizeHeatbugUpdateOrder' Boolean flag we can( o8 T! L, }: r. C0 o' v7 }
// randomize the order in which the bugs actually run* r) v% i' Z/ B) v* w/ C. H
// their step rule. This has the effect of removing any) U3 Q& i9 e# I: U q0 C0 ~' e
// systematic bias in the iteration throught the heatbug& p4 D% ]! j& ~0 K; `5 _
// list from timestep to timestep
) I% G3 Q5 d. k5 ~: n- p7 X, f* n 6 g6 U$ I2 J4 ^
// By default, all `createActionForEach' modelActions have
5 O+ I5 J! a# i$ V E // a default order of `Sequential', which means that the
/ D" d: Z* Y( g7 s8 c // order of iteration through the `heatbugList' will be& S/ e* S. ^4 D* e n9 h# O' c
// identical (assuming the list order is not changed
4 y0 q$ ~2 L1 `' q // indirectly by some other process)./ ~. d8 \4 R4 F$ ^
5 ~# j) \( y' u3 m( ] modelActions = new ActionGroupImpl (getZone ());/ c+ O& u2 u% [" S/ k( r
1 h& D0 s3 ]0 x% q# w4 B6 `! V" C try {
- x+ P3 k/ k7 g4 E! I modelActions.createActionTo$message. U+ x' B# S$ _2 G1 I
(heat, new Selector (heat.getClass (), "stepRule", false));
8 O4 {4 x$ z. O9 w6 S* n9 f* H } catch (Exception e) {0 G( V1 u6 Q( \/ F b
System.err.println ("Exception stepRule: " + e.getMessage ());' P, W2 y7 `( {0 ~; p
}
0 @$ Y2 k5 W$ a( y: A8 h5 L& l8 v
( P3 @: B' l+ u$ {7 R4 r# Q3 n try {; ]6 N( g1 ~4 c: x6 O! K+ n" b9 q3 @
Heatbug proto = (Heatbug) heatbugList.get (0);
7 n) L/ f, x }+ W4 O+ U! }4 K& a Selector sel =
- Q' ^0 ]# U5 H7 ^ new Selector (proto.getClass (), "heatbugStep", false);9 u/ {2 ?7 L+ w# {1 p
actionForEach =3 j' J7 D2 E) e1 D/ |1 w
modelActions.createFActionForEachHomogeneous$call6 _7 ^7 F, b& n9 i4 u6 H
(heatbugList,+ K7 ^) K( ^! O; {& k
new FCallImpl (this, proto, sel,7 ` h% b2 r/ R3 I
new FArgumentsImpl (this, sel)));
" h- g6 a( E2 K) u7 z# u ~ } catch (Exception e) {& n5 e3 q& \" R2 ]6 F
e.printStackTrace (System.err);
5 I: V8 Z. |# [6 V3 ]- i6 e }
! Z2 j+ ~. t2 C* s
+ ]( g# z: k' {, B9 A* j! C, t z syncUpdateOrder ();6 y' n. l4 k% V
& Q! z& K2 s8 b! ?. z. P6 `8 m try {
( U& g$ O( A& y: r" R2 \$ U modelActions.createActionTo$message ; L- X% Y+ o. h" ]$ [" t" @
(heat, new Selector (heat.getClass (), "updateLattice", false));
$ V. L9 `& ^- |8 ` ?2 b; p } catch (Exception e) {
% W, k# f9 b3 a3 z: f- T System.err.println("Exception updateLattice: " + e.getMessage ());
" E7 _& h9 a, @7 D( i5 K }! }: H( B/ K6 W! P% v
& u' [8 [( l+ H // Then we create a schedule that executes the% I" b6 P6 W% u% h/ }, `9 t
// modelActions. modelActions is an ActionGroup, by itself it
8 P/ N D& L- S6 S$ n4 q // has no notion of time. In order to have it executed in
" P# W6 I- l$ k // time, we create a Schedule that says to use the- g+ u$ J, _6 S: z: Z
// modelActions ActionGroup at particular times. This- t9 z: a- ~5 u; G f6 o* h
// schedule has a repeat interval of 1, it will loop every9 U+ O, G# E* x: b+ x6 i2 x+ B/ I
// time step. The action is executed at time 0 relative to
' _3 D4 l: m6 v" r // the beginning of the loop.
: L- }( t) C9 e) _+ c" q u! w! V) D3 V
// This is a simple schedule, with only one action that is8 J' |: i; c' i7 W2 s5 R/ J3 D& O# v
// just repeated every time. See jmousetrap for more
, ~# ~6 a$ h5 O' e2 w // complicated schedules.$ H" q! n% x& }7 |$ i5 k+ K' J
- u8 o: D! s) v modelSchedule = new ScheduleImpl (getZone (), 1); Y U0 X2 f9 M) h2 |
modelSchedule.at$createAction (0, modelActions);
! _. C% r) S9 l6 x0 v
7 \0 R; i+ q3 s$ g1 @1 ]/ k return this;
0 q) v' C/ K4 P) I7 \) G/ w } |