HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& b: n& P- d2 X
- H4 h" H; D: I. M5 c8 z0 x
public Object buildActions () {
$ x! E. k! A/ W$ D super.buildActions();' J, y4 q4 |: }/ G. g( p
7 T, v6 A3 {0 d8 R( x) `+ _
// Create the list of simulation actions. We put these in1 d8 _ ~, ?) i
// an action group, because we want these actions to be# v8 A* P2 o0 `! a; h
// executed in a specific order, but these steps should
% ]& T3 M: f) n7 I8 u- @* h // take no (simulated) time. The M(foo) means "The message
: I3 M$ \. ?) m. k // called <foo>". You can send a message To a particular" E G$ {: Q4 `
// object, or ForEach object in a collection./ p' K' j( j2 V& E8 l! R' }
: h- \- I2 x( x* g* p$ F
// Note we update the heatspace in two phases: first run
0 N6 D' ^" M/ P$ f! K; @ // diffusion, then run "updateWorld" to actually enact the4 f: s v- f' o$ G1 E7 g; L
// changes the heatbugs have made. The ordering here is
. h/ N1 p% @! e9 E: G, @3 h. A // significant!2 J* B: E8 M" l7 i! a% r) `2 i& Y# S
) S- Q7 @6 C! H( M& Y3 r // Note also, that with the additional% k2 ^7 E( x( Y; _
// `randomizeHeatbugUpdateOrder' Boolean flag we can& X9 l0 p( s/ `1 I2 @3 n2 K: A' p Q( A
// randomize the order in which the bugs actually run6 u. s2 F J7 b% H1 N# P; X
// their step rule. This has the effect of removing any
* b/ \. A3 ^( ~ // systematic bias in the iteration throught the heatbug' u" `: l& p% q
// list from timestep to timestep
: j5 N" a7 I" @3 j/ E# @ L3 g# d7 D 7 ]+ p8 b' d1 U$ H
// By default, all `createActionForEach' modelActions have, E% `/ B }4 K8 [9 ]9 F% z
// a default order of `Sequential', which means that the
2 ~3 n. e/ r9 Y1 y6 L1 [ // order of iteration through the `heatbugList' will be
2 {* |3 m* ^: X // identical (assuming the list order is not changed
6 x* l2 o8 j4 h' l, \ // indirectly by some other process).+ K' ~- `, H F
, F' k$ l$ `" {; z+ C( @
modelActions = new ActionGroupImpl (getZone ());) w c3 e# C1 a i. ]; _
$ K7 W" o/ Z+ e; | try {3 k4 w* d4 e5 S$ C: E* x$ r
modelActions.createActionTo$message
: @5 e. Z4 ^, Y6 K( X0 c (heat, new Selector (heat.getClass (), "stepRule", false));
6 Z3 {) z' S- E6 P& Y2 A. i } catch (Exception e) {
G& `- i9 d$ q" U. T* ^ System.err.println ("Exception stepRule: " + e.getMessage ());
+ h5 v# O2 R9 [* K! e }3 G( I2 _+ J, U! j' G9 E. v
+ F9 z. `% O6 n5 N try {
/ s5 l- b6 x" k5 G1 d. \ Heatbug proto = (Heatbug) heatbugList.get (0);
1 P: E) u4 M7 O7 T" ?9 { Selector sel =
% }% |( o5 {2 D5 C( u, C* X8 T new Selector (proto.getClass (), "heatbugStep", false);
& R- `1 W9 [$ b actionForEach =) @5 I; l7 z# ~/ i9 M2 i
modelActions.createFActionForEachHomogeneous$call' s1 q4 M% D' m% R5 `3 @
(heatbugList,
& v4 S9 Y9 ^4 A; t1 }! e5 J7 z new FCallImpl (this, proto, sel,
# R8 S/ X$ t q2 [% x( w, A new FArgumentsImpl (this, sel)));3 K4 D+ E1 S z- ` Q8 V& C
} catch (Exception e) {6 t7 R0 @$ }) v: q% n9 w3 C7 B8 ^ g2 n0 k
e.printStackTrace (System.err);
" h$ z2 s* Q& H }
7 x! E2 z7 x+ S* E- ]
" D1 V& ~, t# W syncUpdateOrder ();( w8 M. [0 q6 B
7 W( n6 Q6 z/ H2 h6 q% ^
try {* O/ E& g/ y5 D5 L3 Z
modelActions.createActionTo$message : K+ k- [0 W' p3 [; O
(heat, new Selector (heat.getClass (), "updateLattice", false));% l9 l# d" ~. b, X
} catch (Exception e) {) l y) b! K: q# \5 w0 R
System.err.println("Exception updateLattice: " + e.getMessage ());) N/ t# u5 b7 ?& S- n) ]. h
}
; ]: G- j/ ]) K" k
8 m0 ]( X( ?0 g/ T% c5 L6 M // Then we create a schedule that executes the: G0 t8 @7 d, \! P7 t
// modelActions. modelActions is an ActionGroup, by itself it
8 E9 f0 K i* k2 r // has no notion of time. In order to have it executed in
1 L; H5 M$ R h0 i" O, i" g // time, we create a Schedule that says to use the3 M0 q! ?1 M! F5 A8 `# ~% |
// modelActions ActionGroup at particular times. This
, g' Z; n- u" o$ \; p! O* P R1 B // schedule has a repeat interval of 1, it will loop every F& R2 z# ]! z4 f- a
// time step. The action is executed at time 0 relative to! c z3 ~3 ]( Y @9 r7 X& w+ c
// the beginning of the loop.
) z: z+ t, U& ^3 A# D0 t& g+ O
0 M: s# j& ` t) c: f* I, k // This is a simple schedule, with only one action that is+ x5 f4 V* |5 X8 t$ D5 ~. g
// just repeated every time. See jmousetrap for more& [1 x$ I6 I' B4 x1 p2 b
// complicated schedules.
0 J! D' g9 a- D, i* Y7 S1 C " W# E. |4 `# n Y0 f" b4 w
modelSchedule = new ScheduleImpl (getZone (), 1);
5 u2 d+ N1 n) m# r" Y5 ^/ z modelSchedule.at$createAction (0, modelActions);& w/ d; G, d' k1 ^
2 J0 ^) K( y& u9 j. p+ z* T
return this;
4 M6 C. {7 E! N' H3 l } |