HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:) \) {8 S/ {6 Q+ C2 P3 c0 ^
- j4 f+ p, h7 W% M F
public Object buildActions () {
: d7 d2 [2 o+ b+ ~ super.buildActions();
! h# y0 I; X4 _" o& `/ B
n$ y( W, l! d, s- u1 x: s // Create the list of simulation actions. We put these in
+ i5 v9 ~4 r" z/ F* H: p2 a6 t // an action group, because we want these actions to be
$ V+ D$ ~# ?2 m6 j9 ^& _ // executed in a specific order, but these steps should7 {$ ]0 U; T, o& M( ]. F, C7 _1 Y
// take no (simulated) time. The M(foo) means "The message
1 ~9 D% o. E: U) O( x2 Q // called <foo>". You can send a message To a particular
$ V* a6 w; u/ J4 w4 b! c( [! P# M // object, or ForEach object in a collection.
6 J6 U2 P1 ]' `0 T 1 U$ ~; @8 q3 T2 m# E
// Note we update the heatspace in two phases: first run/ s: f; ~2 ?4 Y$ D& S
// diffusion, then run "updateWorld" to actually enact the/ G( j* a9 w4 k p# o1 _
// changes the heatbugs have made. The ordering here is
2 _3 V3 \, J1 ?- @$ H5 u. d& [ // significant!8 f& D; U5 p) n3 U! G7 u
6 c) l; E( Y9 h# k7 `& U5 E& R // Note also, that with the additional
J0 M Z: ?! f // `randomizeHeatbugUpdateOrder' Boolean flag we can
( i. Y: y4 b* W3 T6 k // randomize the order in which the bugs actually run2 \4 J, x$ J. @0 c# u0 [/ G. r7 |" u
// their step rule. This has the effect of removing any
; k4 a- M# l# x! r6 s // systematic bias in the iteration throught the heatbug9 }6 a% N& M9 I# t5 `1 j5 A) Z* D
// list from timestep to timestep
7 N$ }8 H! b' m 0 Q7 i- J5 |2 J/ `& z! N
// By default, all `createActionForEach' modelActions have
6 P' v9 {4 u- w. C // a default order of `Sequential', which means that the
% p4 X6 h: c; J. ]; `& `* K // order of iteration through the `heatbugList' will be
. p0 F f" f) [9 }7 T" @: B // identical (assuming the list order is not changed
0 K( l m; h: I // indirectly by some other process).4 K, u$ y( ~" B/ ?2 o2 e% d
& v7 k8 d/ g7 _, R" z modelActions = new ActionGroupImpl (getZone ());/ {6 T' m+ b9 U8 ]9 M9 s; x3 t7 Z$ p
, z' t! {" H: m x3 y+ n
try {
& V" J. m( E% ]$ v modelActions.createActionTo$message. {' I, N8 E4 `4 f2 \' p
(heat, new Selector (heat.getClass (), "stepRule", false));7 L2 u$ y3 q9 j; f
} catch (Exception e) {
6 z2 L6 y! C+ l" c) ? System.err.println ("Exception stepRule: " + e.getMessage ());
: r, _ K4 `3 ~ }- d0 z: U6 L$ O* k/ X9 j
) T* }, m! f: g W, Z% T
try {- R$ \) y! ?' `/ L
Heatbug proto = (Heatbug) heatbugList.get (0);4 G! H d: ], Y, z- L
Selector sel = 5 K t* E+ ~0 `8 s! R; i, m z, q
new Selector (proto.getClass (), "heatbugStep", false);4 ~. F3 W$ U+ i5 H" A' W4 Q7 @% m- E
actionForEach =, N9 o! j7 o& e( k. t
modelActions.createFActionForEachHomogeneous$call
! C& @9 y9 D6 I (heatbugList,
- _- p0 }7 ?2 D+ P new FCallImpl (this, proto, sel,
- p: t( A/ V# t new FArgumentsImpl (this, sel)));
8 `! f# Y" \7 l) Z } catch (Exception e) {7 O8 o6 f- b9 T$ n% J u2 }0 P7 |
e.printStackTrace (System.err);* D% j6 s5 Y- e6 K: K$ t7 x* v3 d
}
6 O- q) x5 V+ x. T& W$ V% T7 E- R ; O8 @( s* x: h8 p: O: F
syncUpdateOrder ();
" m4 ]) X( c, v" i2 U" D
& h$ X7 L' R3 W- V3 Q4 b7 q7 Y try {
) I; B: ?% e+ S& | modelActions.createActionTo$message
1 k+ c5 b6 Z x (heat, new Selector (heat.getClass (), "updateLattice", false));
& ?( L/ p( o0 \9 n* Y+ w } catch (Exception e) {- o7 i6 S4 W. [5 J
System.err.println("Exception updateLattice: " + e.getMessage ());! l+ [: I9 M2 c
}. O3 r3 Z$ W1 c
$ p2 [8 E' E9 z* s# I1 `( C // Then we create a schedule that executes the5 U9 k1 x8 V- Y; }' Q* n
// modelActions. modelActions is an ActionGroup, by itself it
1 j3 G6 h- d# i! B/ K0 ^$ B* M // has no notion of time. In order to have it executed in
) _' b8 P- K+ W5 j6 {# C6 q // time, we create a Schedule that says to use the1 X0 s/ l/ s$ C
// modelActions ActionGroup at particular times. This9 r( }- A# Y9 G
// schedule has a repeat interval of 1, it will loop every
" i3 x5 U* ]& ^/ Z. J @ [% T // time step. The action is executed at time 0 relative to# I4 B% k; l5 b8 b
// the beginning of the loop.2 V" p0 @) H' T2 Y f7 ~1 C7 ~
# Q$ F3 p: U1 c
// This is a simple schedule, with only one action that is
W& V0 Z! ~2 I3 l# n' ^ // just repeated every time. See jmousetrap for more; m0 |6 ^: g# u) i1 d# _
// complicated schedules.
: y0 A @! `* [
3 |% E2 Y X3 g modelSchedule = new ScheduleImpl (getZone (), 1);
2 s& L, K5 Z: U5 |9 S9 u W T modelSchedule.at$createAction (0, modelActions);
3 r) F$ F2 Q0 `# M7 L4 L M# D6 j$ V: L: ]8 b
return this;
d4 A) y/ P) j' r0 ?1 H } |