HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, w; ?+ _, E; c: y
8 }9 S( f: }! \ public Object buildActions () {# P' K0 K4 P: _8 F& ^
super.buildActions();8 I7 v" T) Z( M8 J
- _" Q; Y* j q3 ~! U
// Create the list of simulation actions. We put these in: K0 v3 ^( D) }$ d8 h3 J8 ?
// an action group, because we want these actions to be2 B' f" \, N7 T9 ]- \4 _
// executed in a specific order, but these steps should) @4 d, ?4 Q3 N! J
// take no (simulated) time. The M(foo) means "The message7 b. Y! [* E) n @* B8 e; V) }1 S
// called <foo>". You can send a message To a particular
2 F7 z1 j7 ]' F, C7 O, ^% `+ U // object, or ForEach object in a collection.
- o( I* I/ K1 v- b v- ?$ R) @4 x, g/ c/ B0 N3 h1 f
// Note we update the heatspace in two phases: first run5 }+ \# C' L2 @8 ]& ?3 u/ S
// diffusion, then run "updateWorld" to actually enact the2 k) q3 _; }$ k' _" i" _
// changes the heatbugs have made. The ordering here is$ E$ T) C/ W0 j% t1 C- I, f
// significant!
8 M- K/ t H6 w8 E1 d $ b* Y; q3 q+ G; x
// Note also, that with the additional
/ C; U( ^/ E& ^0 L/ } // `randomizeHeatbugUpdateOrder' Boolean flag we can
& M' E& B- V) ]2 c- ^+ W // randomize the order in which the bugs actually run3 ?9 b, K3 \& `; s3 ~4 g9 H+ R: `
// their step rule. This has the effect of removing any
2 M+ s4 \- H5 y) P5 k2 N9 R) B // systematic bias in the iteration throught the heatbug0 f! v3 M3 B! Q. Q5 K2 m& D
// list from timestep to timestep' o- ^- }9 |& n' Y- b8 r: Y( @# r
% U" Z) C) m: l
// By default, all `createActionForEach' modelActions have
2 f1 q$ m7 Z$ }* J3 @ // a default order of `Sequential', which means that the, T* ?) h& D3 @, x
// order of iteration through the `heatbugList' will be' R# G9 w5 H# U( G! R! i
// identical (assuming the list order is not changed
, q# W. K9 n* O+ x7 _ // indirectly by some other process).5 B- i9 _- i+ S% s
; m( J2 l( V$ W8 D
modelActions = new ActionGroupImpl (getZone ());
( J) Y. p, ~6 @5 l# M3 Y7 h
2 Q; B3 g8 E) e+ U. ` try {
9 x) s* r& ~7 U5 A' [' m modelActions.createActionTo$message
# E9 q7 M7 {+ f4 v$ E4 g (heat, new Selector (heat.getClass (), "stepRule", false));- }2 M/ q- e1 t$ S; u
} catch (Exception e) { N* Q2 |2 s; T+ v7 c+ C5 W
System.err.println ("Exception stepRule: " + e.getMessage ());
- U- _& V: K+ z4 Z1 d3 J }
( q" Q# e& X" a9 Z5 u0 O' g7 {* {( r% k( e% R0 ]& z; ~
try {* \1 g) U( d4 q- N+ z, ~) E( Z
Heatbug proto = (Heatbug) heatbugList.get (0);
# T1 A. q0 W( D. q. b, W, r Selector sel =
! p5 P6 O1 z- Z* W. \+ w new Selector (proto.getClass (), "heatbugStep", false);
( g; e: O- L6 @/ g2 q actionForEach =2 _' c$ V( s' S9 t# P
modelActions.createFActionForEachHomogeneous$call5 y5 ~* x3 e, {) l
(heatbugList,6 c5 ?, K1 T) @9 g
new FCallImpl (this, proto, sel,% f' `* J/ i1 R, G3 _
new FArgumentsImpl (this, sel)));( O; v" l( H1 `
} catch (Exception e) {
" _0 R* k" ^" Y: Y e.printStackTrace (System.err);) }9 C0 j/ B j6 b
}
8 S- d$ {# `+ k3 z7 ^
: H! i8 F) K# D/ M7 J1 v syncUpdateOrder ();
( N8 o0 A8 y' T) C8 l0 W3 p4 \' y: H0 k( s0 j9 f
try {' @% Y+ D$ e1 r+ q- A
modelActions.createActionTo$message
+ K3 E# N4 s# w) P* h1 C( d+ e (heat, new Selector (heat.getClass (), "updateLattice", false));2 K" l& J- S# ?( d t
} catch (Exception e) {( _5 U A1 E) R3 k w' I
System.err.println("Exception updateLattice: " + e.getMessage ());
: O+ _/ Q" R0 Z' h& a* v: ^6 u% w4 d8 P }
( u& ~7 u' D! P3 n9 i9 ^; d/ _ 8 X+ M0 h0 e4 p+ ]4 @9 Z1 _" e
// Then we create a schedule that executes the5 I& g$ D Q: ]0 T
// modelActions. modelActions is an ActionGroup, by itself it- ]' }3 r g. E9 x( D/ z: ^
// has no notion of time. In order to have it executed in( ^+ u' q7 M/ Y, ]! P% X
// time, we create a Schedule that says to use the, h4 U+ l8 r, L. j5 I( B
// modelActions ActionGroup at particular times. This( g/ D$ M" g. a" I7 N( a1 A- q# G
// schedule has a repeat interval of 1, it will loop every+ S" T3 v/ h5 F9 I% H; w
// time step. The action is executed at time 0 relative to( {# f' ]$ A5 p
// the beginning of the loop.* V- g6 r' c! M5 d. v
. T2 J6 o, C) f' A
// This is a simple schedule, with only one action that is
8 {3 h3 |. H8 A // just repeated every time. See jmousetrap for more2 S( P4 I3 y4 u3 K n6 K% [' g
// complicated schedules.1 f7 }8 [. E- B% g/ E
( c( {+ C. A! M7 x- I2 W modelSchedule = new ScheduleImpl (getZone (), 1);
! A( x1 b2 k# C. l4 m2 _' b modelSchedule.at$createAction (0, modelActions);
& j* n! |# s, ^$ i. X ' A7 p6 f7 U7 s! j7 M( [
return this;9 s( ]2 D9 k) [/ _9 {5 x& h
} |