HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:1 M5 h1 u) G3 n* y' L
+ e/ J2 h0 Y6 l- @7 r3 @0 d2 o0 `/ P
public Object buildActions () {, q7 F- b7 x& v8 S+ P
super.buildActions();
% A+ i2 O; Z0 V: C, [, _
' q/ B8 c j9 Z& P# q9 K2 f // Create the list of simulation actions. We put these in: K' T: [" J8 [6 b2 V
// an action group, because we want these actions to be: \$ m3 i/ N, l3 v
// executed in a specific order, but these steps should
! M; \5 q; v9 t3 A& ?0 U5 h7 \ // take no (simulated) time. The M(foo) means "The message
/ N3 ^9 Y! V+ q // called <foo>". You can send a message To a particular
7 L5 l8 O9 U k' t% C+ n% {4 ? // object, or ForEach object in a collection.0 @6 ^; N1 K/ }" `* t* l, g: p1 A! t
) k w3 n2 w* P/ b2 m" _/ y) R
// Note we update the heatspace in two phases: first run
2 }8 U' R' D- [: i3 s* Y5 s% \$ J // diffusion, then run "updateWorld" to actually enact the8 u% y, ^5 h* l
// changes the heatbugs have made. The ordering here is
1 k) V! y% t( u, z: @. `% M O // significant!
N4 F6 J# V8 T5 j& _ ! B/ v* G, @% A8 f, J6 Y
// Note also, that with the additional
( ^, ~8 h$ ~) ]/ M% e$ p$ w$ q- i // `randomizeHeatbugUpdateOrder' Boolean flag we can
" [( Q/ U k" X. t0 _ L // randomize the order in which the bugs actually run: Z: [0 T5 }, S9 @! t; f/ N
// their step rule. This has the effect of removing any
0 z. M& y0 p% @' t! O // systematic bias in the iteration throught the heatbug! `- _4 A/ U* H, A0 b T1 O5 M
// list from timestep to timestep
+ B7 i+ v9 {4 G# X7 c5 Z# V, A 7 E P ]! T6 X% E
// By default, all `createActionForEach' modelActions have. f5 l& o) V/ G
// a default order of `Sequential', which means that the7 ~$ p, d* h. I9 f8 [- V/ d- U: t
// order of iteration through the `heatbugList' will be5 I+ D4 M ~% G
// identical (assuming the list order is not changed
7 q- _0 X5 e+ R9 c. X6 S+ k // indirectly by some other process).
6 [0 }. q, g/ Y n: z+ \2 X
% k; M& A# @" Z$ q/ O: q1 c* } modelActions = new ActionGroupImpl (getZone ());
4 ]! A7 Y" ?/ k7 b1 P. O9 S4 M* \7 n' U, j. p: _
try {
8 L" b3 i7 a2 d9 k modelActions.createActionTo$message ` ]! D" B) v/ y5 V) a8 Z; q
(heat, new Selector (heat.getClass (), "stepRule", false));
0 }: R$ r4 L2 ]4 t } catch (Exception e) {
2 M9 J Q V! K System.err.println ("Exception stepRule: " + e.getMessage ());
2 L, p7 T4 r' L7 ]2 { }
9 b! D5 q* G; T( C; v! Y8 g, s- r, m% E3 Y! P
try {
2 H& t* ]) y! F$ N$ ~$ T Heatbug proto = (Heatbug) heatbugList.get (0);5 N/ a" h! @+ W. l" B( T2 B
Selector sel = / r5 I2 W' U/ s* J. g, T& ^+ F
new Selector (proto.getClass (), "heatbugStep", false);
% _0 ^1 A1 l1 X* d/ V6 C" V actionForEach =
1 Y. b- ^: p! x. [- |# _ modelActions.createFActionForEachHomogeneous$call
8 R0 ]5 C" y3 M6 B4 W (heatbugList,
- F3 {0 c* s8 B new FCallImpl (this, proto, sel,
0 D9 q: t$ ~# ]9 k new FArgumentsImpl (this, sel)));6 o# M/ o4 d8 I
} catch (Exception e) {& H8 `' x! k+ J4 d% z/ R
e.printStackTrace (System.err);/ T6 Y/ u4 p* k' ]6 y0 F
}
0 Q) w8 w6 h# W8 C/ s. z
: I0 p( ]# _3 l: C' X syncUpdateOrder ();) w- J; ?; ~" j" n' d0 \7 z2 T
* k2 C/ l. l0 Z1 ] try {3 k2 j I; B' W! [9 i* G( |
modelActions.createActionTo$message # b: x5 l# ~' `, K7 S2 T
(heat, new Selector (heat.getClass (), "updateLattice", false));
[8 N0 z# Z5 n+ n5 D3 w } catch (Exception e) {
5 X* S2 a! L% K4 }: Q7 B System.err.println("Exception updateLattice: " + e.getMessage ());
2 |) u3 q; j } }
/ ]* L8 J9 s; f
' H+ G. x0 z; {1 g$ A // Then we create a schedule that executes the2 A$ g+ ?4 M: M2 w* |
// modelActions. modelActions is an ActionGroup, by itself it
) m3 N/ g" R9 f g/ k9 m // has no notion of time. In order to have it executed in
) e7 R! a' {, \% D. v; N1 k5 w* D // time, we create a Schedule that says to use the
2 M4 d+ x& V8 A4 n // modelActions ActionGroup at particular times. This3 W+ \3 R6 W/ Z3 A& n( g
// schedule has a repeat interval of 1, it will loop every
: u. ^. _6 ?! @! L/ G5 y- r& E // time step. The action is executed at time 0 relative to
# q. F! j# l4 Y // the beginning of the loop.% X" t* @1 x, s5 \
+ n( P7 w3 Z" k // This is a simple schedule, with only one action that is- G4 J% B5 g; H, X4 \" ~
// just repeated every time. See jmousetrap for more' e6 M- w8 [* ]* C d) N
// complicated schedules.3 Q( @# N9 f( x8 P- \ i; S# |
; H' _% _7 b: T- k, U- v
modelSchedule = new ScheduleImpl (getZone (), 1);) Y. z: s+ \- t7 _/ o/ |9 R* w
modelSchedule.at$createAction (0, modelActions);' O# [- d( e# u; f5 I( F
% q" @) D# p/ ^# h
return this;( ^5 T! m+ Y* @0 B5 g& F3 F1 P: P5 ~
} |