HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 ? {6 j. ^, D; L; |1 J: j
4 ^7 O7 y' b% Q: u% L9 v" {
public Object buildActions () {
4 w( r8 m4 m( ~* ? super.buildActions();/ q0 N' T u( J. o: m. b% K
) \0 [ l+ V$ ]0 S' X& x // Create the list of simulation actions. We put these in
( G- ?. z; E; |' } // an action group, because we want these actions to be
" x, a, [. C2 c4 Q) x // executed in a specific order, but these steps should
; D1 q0 S2 M$ [ // take no (simulated) time. The M(foo) means "The message
6 m/ ]- ?2 @" R+ h$ _/ {0 r P8 q3 w // called <foo>". You can send a message To a particular
* T8 i" y; O( ^1 [ // object, or ForEach object in a collection.5 [, I1 N. _/ n z
% ]* B/ k) F& g, u* ]5 N // Note we update the heatspace in two phases: first run
& a$ @3 E+ l# d# O+ u1 r, S) m$ o // diffusion, then run "updateWorld" to actually enact the* q7 ~. O6 V2 M8 @. w$ _( b/ _
// changes the heatbugs have made. The ordering here is4 ~/ [- z: J0 e, K9 P+ h
// significant!4 D; {& J# f0 X
$ R& q* p/ T% r+ @* U4 @- C/ \0 \ // Note also, that with the additional9 L& c i, U7 Y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, d$ _+ ^: Y# d' B' a // randomize the order in which the bugs actually run
/ V7 `+ O+ i1 J# Y* s' O4 Q // their step rule. This has the effect of removing any
/ q5 P9 Y7 F! a! y0 r: W // systematic bias in the iteration throught the heatbug% ~0 F$ `% {8 m3 x% R
// list from timestep to timestep4 B& X0 L9 g5 p$ a- ^7 c! }
4 n8 g! y3 i9 E: `- ^: N // By default, all `createActionForEach' modelActions have$ p1 L( \" w0 s- [5 j3 a2 l9 }
// a default order of `Sequential', which means that the
1 @( j# B/ p. ` // order of iteration through the `heatbugList' will be
* U5 ?" E+ w1 T4 ` // identical (assuming the list order is not changed
' G$ V; q; q/ w* C. M // indirectly by some other process).
v H: W" l: Y, ]% H; d: B+ r2 g1 w : |4 W$ G# I/ K8 E- }. m
modelActions = new ActionGroupImpl (getZone ());
' Z0 L3 n, [3 u3 y! D
5 a6 B# ^" @ P try {
# ?1 Q1 y1 r4 u3 j modelActions.createActionTo$message e" I/ Y$ J0 T) ^5 D, s- a8 [
(heat, new Selector (heat.getClass (), "stepRule", false));" @. L# @( P$ B3 n
} catch (Exception e) {
* \0 l! s- B/ l System.err.println ("Exception stepRule: " + e.getMessage ());4 [8 j9 ~0 I4 S& |" q' ^' O
}; s" q# |, a$ r' g- t) A2 C
, S+ U: H6 u' M- h8 v6 Q3 H4 i try {" c7 X! i. u+ f. B p* h ]0 S
Heatbug proto = (Heatbug) heatbugList.get (0);4 o* Z8 J8 W2 J/ O
Selector sel = % y$ O# [1 Y% ?5 Q! \+ c3 Z0 m2 I( V3 Y
new Selector (proto.getClass (), "heatbugStep", false);
. T% ?( h5 o, o3 t, i actionForEach =" d5 _% ~3 _; _, \0 h1 @3 |
modelActions.createFActionForEachHomogeneous$call& [; p, H- E* E. u
(heatbugList,
2 e& D' q4 |( C# P' l6 I# [+ [9 g" h new FCallImpl (this, proto, sel,2 C& \2 H2 Y8 ^7 x
new FArgumentsImpl (this, sel)));% r; |6 P* R7 g, {
} catch (Exception e) {
6 }0 u& }6 {; t! Z1 i1 Z! w P$ W e.printStackTrace (System.err);
9 J" F* Q) z* S1 O; H }
. d; z7 K- \+ \3 o . }# s( y/ P$ N
syncUpdateOrder ();# U; w2 G0 J9 S7 e, u; _$ X8 o3 w
. h$ w% R. ~# w try {
0 m) E, D2 o ^ modelActions.createActionTo$message
" @4 h E" j! s9 c3 { b (heat, new Selector (heat.getClass (), "updateLattice", false));
& A4 |1 C3 `: f1 M1 k7 o. Y } catch (Exception e) {
; T1 L e. w7 L9 j0 Q' W Q9 h* \+ o System.err.println("Exception updateLattice: " + e.getMessage ());
; D6 @2 F) e1 l8 r1 R: {9 u+ t }
, P7 T0 F+ t$ @) n& p; y6 c
- f( n; x0 t( q# n) w // Then we create a schedule that executes the
# l E& A% @8 X1 d/ y8 U // modelActions. modelActions is an ActionGroup, by itself it
( \) M( O- x& R) |9 x/ k // has no notion of time. In order to have it executed in+ q% F6 ?6 ^5 n0 G- h& i% V' v
// time, we create a Schedule that says to use the
) D8 q: M- d8 e" H // modelActions ActionGroup at particular times. This W* @. n! J/ c5 u P$ L, C
// schedule has a repeat interval of 1, it will loop every+ @: j# B9 ~6 x) r8 O
// time step. The action is executed at time 0 relative to2 T) h6 x( H2 u
// the beginning of the loop.
5 d9 ]# J; V! k5 T" d& f8 ?
1 x* v0 ~( Y& X9 ~* V // This is a simple schedule, with only one action that is
# s) j7 P, V3 d4 N" ?/ H" l) R! l9 i // just repeated every time. See jmousetrap for more* |* |1 {/ }2 r6 f
// complicated schedules." C' v* o3 v" {1 p" `
6 K) q3 m4 G$ i1 Z, g
modelSchedule = new ScheduleImpl (getZone (), 1);
8 }6 o2 [5 w* Z. W0 e modelSchedule.at$createAction (0, modelActions);
+ w. n* m9 C6 Y3 F B
# G) O6 Y2 [, v" C return this;
3 q4 h' x1 i2 H. z, t } |