HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- ]' T2 p0 h2 n; P2 h8 X
& A* u( P9 D2 W$ D: s public Object buildActions () {8 [' E- I2 g6 F, q5 A( `
super.buildActions();9 |! I$ }! r+ o; W$ q
" z4 w4 r' S( h: w // Create the list of simulation actions. We put these in7 i% f% E: \% ]7 ]
// an action group, because we want these actions to be/ |2 W0 F% K$ B! m
// executed in a specific order, but these steps should
4 F. s: ]1 F3 d$ Y // take no (simulated) time. The M(foo) means "The message
+ e0 L# K5 D' p // called <foo>". You can send a message To a particular
" o. w5 s% U. \ // object, or ForEach object in a collection.
4 `: ^9 D2 u% X# e { 6 {# Z0 o2 { |/ M1 a
// Note we update the heatspace in two phases: first run
- o* v. B8 q+ ?. @0 E7 U // diffusion, then run "updateWorld" to actually enact the
8 N! l4 Q) s, B/ k // changes the heatbugs have made. The ordering here is- ^+ q, o9 b B8 l! T% U8 S& {
// significant!
& k0 F' [6 q- W% b: L. C5 u s% I1 W) b% S9 s
// Note also, that with the additional7 W0 s& O% C9 I
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 k. {) f0 j C' ?' Z: R" C // randomize the order in which the bugs actually run) @/ k" \+ d% r% ]8 y' X1 a5 z, K
// their step rule. This has the effect of removing any
! G, k2 ^5 [7 k# @/ K. r // systematic bias in the iteration throught the heatbug: l; S* n2 i) q* l2 G% p3 r7 |
// list from timestep to timestep
& N5 X$ @4 l, K $ M( e9 S0 ?/ m5 Q$ ]
// By default, all `createActionForEach' modelActions have' w+ c- |. |: [" Y5 k) N( m5 T
// a default order of `Sequential', which means that the# A& B$ Z) `: N% N7 R' u* S% Z
// order of iteration through the `heatbugList' will be
0 v: H7 {0 z y1 F# |2 w8 x6 T // identical (assuming the list order is not changed
7 b& Q, s$ V" r# h5 J // indirectly by some other process).; Z! c9 X7 b& o' O6 P. ?+ {
+ H0 O' L0 J* r2 F* O4 M
modelActions = new ActionGroupImpl (getZone ());2 R \5 p# k* E: O+ I/ ^
9 ?/ U4 ?3 p1 j V, [ try { i: T+ d0 d0 z9 U7 }8 T
modelActions.createActionTo$message
; k1 a5 Y. L2 J; l& F; q (heat, new Selector (heat.getClass (), "stepRule", false));7 E' U/ \8 Q* q+ e
} catch (Exception e) {& R/ S; G8 _8 v$ [) `1 r
System.err.println ("Exception stepRule: " + e.getMessage ());
3 }1 L7 d: D% w# u" ]( V }
! v/ D' Q- W& I
7 f1 j0 V* v5 s2 h4 o' G. d try {
9 \) v+ [0 [% N, j8 y, P Heatbug proto = (Heatbug) heatbugList.get (0);& I- O) s g8 P. D8 q
Selector sel = 9 ~: _" G' G$ n! A- X
new Selector (proto.getClass (), "heatbugStep", false);
5 a H9 B1 d, G3 | actionForEach =& I6 V1 b/ ?/ v2 X
modelActions.createFActionForEachHomogeneous$call/ H' p# L( v$ ]
(heatbugList,
) G2 ~5 [8 y7 ], {! u4 A. C new FCallImpl (this, proto, sel,1 m* [' r% s- L \
new FArgumentsImpl (this, sel)));4 I# e# S7 M) ^5 a% ~8 \
} catch (Exception e) {
$ p8 w; Y# |- R& G3 r e.printStackTrace (System.err);2 G; y6 `8 Z. D
}
3 I' C$ ~6 m- O* h/ M, l
. t U! b7 k; f) C2 }3 M4 E9 N% n' c syncUpdateOrder ();
8 {5 G0 B5 Y' ~4 f; z( H2 y/ o/ R" g5 C/ |3 }
try {
; m! ]. W( ~/ C& c1 @0 ~0 _ modelActions.createActionTo$message & k) _3 x% N4 \2 m3 U8 O
(heat, new Selector (heat.getClass (), "updateLattice", false));
5 e. p! z7 _5 h# y1 D5 d } catch (Exception e) {! R; Q# l: ~9 P7 @- s5 F3 `
System.err.println("Exception updateLattice: " + e.getMessage ());0 k( e6 _" c4 l2 x A7 Q) D$ w) P
}, V3 }+ p5 K! a$ t w& S
: h: u& R" h3 d* K* z( L // Then we create a schedule that executes the. k" e b8 p( L* x
// modelActions. modelActions is an ActionGroup, by itself it
3 U* T7 a+ ]8 @ // has no notion of time. In order to have it executed in
1 m! K/ c; ^% N. x* ^# [ // time, we create a Schedule that says to use the" u7 T# @& `% B; I
// modelActions ActionGroup at particular times. This
% H. s5 ?$ a0 [' d U; ~ // schedule has a repeat interval of 1, it will loop every
0 N$ V. n* M( g1 w // time step. The action is executed at time 0 relative to
0 O% M8 V& L/ g' z; Z6 B7 { // the beginning of the loop.
3 B* H, s+ H. P5 H# [
4 q; Y& r" {. B // This is a simple schedule, with only one action that is4 u. z' M* X4 t& W
// just repeated every time. See jmousetrap for more
5 [. L7 w0 M6 O7 Z1 q1 H! i5 L // complicated schedules.3 D8 e3 _; N' k4 S0 J
1 `9 X0 B8 ]: O7 P9 ?2 D. I modelSchedule = new ScheduleImpl (getZone (), 1);* C/ l& p: B0 E3 z. J& _
modelSchedule.at$createAction (0, modelActions);
5 ]3 t3 Y* [* r& E# c $ ]: O8 J, v. l; J' e
return this;
$ _% Y5 I9 x0 J2 g3 C2 K, K" |% J } |