HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- d: v# i, R% g5 R: i2 |" r4 N( u& n1 M) a4 n/ `
public Object buildActions () {
2 A4 g6 b* M" b4 e) g! g, O+ ] super.buildActions();
2 c* B; {: ]" R. c& ]
0 b9 j& y/ o% K Z1 ~% z // Create the list of simulation actions. We put these in$ S; C& i0 l/ r$ W: C$ P
// an action group, because we want these actions to be! y/ z1 G/ p m \' \5 A
// executed in a specific order, but these steps should) N) e4 H1 N6 k
// take no (simulated) time. The M(foo) means "The message
8 `; X. m1 u8 s! V // called <foo>". You can send a message To a particular' s0 U+ J6 _6 `' I2 ]# @9 A. F
// object, or ForEach object in a collection.
8 d' p3 E5 E1 \, s6 J$ [
( f9 l. X( A# {, l: L$ G+ Z // Note we update the heatspace in two phases: first run
) v" T2 e" U& D& k2 R // diffusion, then run "updateWorld" to actually enact the
2 K$ O3 n) f1 K: k- l" I // changes the heatbugs have made. The ordering here is. N$ c- a. s6 S$ _ F
// significant!
# ?# X( G/ b$ t 9 E8 q( ]0 W( z! O
// Note also, that with the additional
0 D$ u4 r) n: h0 } // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 p) _9 j" ?6 G+ q% A // randomize the order in which the bugs actually run: M3 a- n r3 d/ C ?
// their step rule. This has the effect of removing any
- O+ l+ ?& j# P( L$ x, N9 m // systematic bias in the iteration throught the heatbug7 F* ^7 A0 G/ d" |
// list from timestep to timestep
4 A3 H" T2 W7 S 5 v/ k; Z" | }& {) q
// By default, all `createActionForEach' modelActions have/ Q0 g% H5 \$ B
// a default order of `Sequential', which means that the$ Z7 N1 @# z3 A5 Y/ s, L- C
// order of iteration through the `heatbugList' will be7 W% _+ U- A1 ?
// identical (assuming the list order is not changed# @# D+ I, u7 X" O, g" e" Q
// indirectly by some other process).. e" K0 @. b+ g4 J
: Y+ i/ h: @# ^1 B) h; B
modelActions = new ActionGroupImpl (getZone ());
& `1 g7 K: T( m4 F {4 i7 a+ [6 `+ r6 q# |
try {( R% L* ?) H$ z' d3 G
modelActions.createActionTo$message
. ^3 G1 d+ [6 |! T (heat, new Selector (heat.getClass (), "stepRule", false));
8 h+ `# Z3 G2 i9 L; |% G/ P } catch (Exception e) {
1 U5 y1 y/ `. T* j& t& j, ` System.err.println ("Exception stepRule: " + e.getMessage ()); \2 A; a3 H0 ]) {+ H7 ~ ]
}1 X3 J1 |6 s3 o
9 o1 n. z3 Z- h, O' T6 ]( m try {
; d" n# L; _4 h0 b" h2 k Heatbug proto = (Heatbug) heatbugList.get (0);+ E* P: }0 i7 }8 y2 N) |
Selector sel = * H- `& {3 e+ h; f, E3 n0 P
new Selector (proto.getClass (), "heatbugStep", false);7 F2 n/ r0 k% Z( h* [
actionForEach =+ n/ ` c4 G) }2 M
modelActions.createFActionForEachHomogeneous$call
( `& a9 }2 Z9 O (heatbugList,
`- m! w/ E+ p0 z7 g new FCallImpl (this, proto, sel,5 ]/ r+ J4 A Y6 q
new FArgumentsImpl (this, sel)));
. ^9 u* M3 U# M# e# R: q- G0 Q } catch (Exception e) {
) p2 d1 ~" @6 w& f& m e.printStackTrace (System.err);
1 n2 r0 w% ]1 u% N( ~0 e9 t }
% {- l# U( o4 \9 W6 T # V0 Z! N0 F& |( E
syncUpdateOrder ();
' Q. z4 o# c' _+ X' U9 k( p! ~" S1 d* v3 h) ]# Y
try {0 D$ @' n) y0 ?1 M2 h- e+ v6 R& k, h
modelActions.createActionTo$message 7 e/ m9 p" v3 K0 y, Y1 L+ u
(heat, new Selector (heat.getClass (), "updateLattice", false));. D9 b% _6 R1 Z
} catch (Exception e) {+ c* M |* N( p; |& v: I8 K) x8 L
System.err.println("Exception updateLattice: " + e.getMessage ());
& x, a7 _* P: H# I, M }
3 h& B$ t/ L1 Q O4 b# q 4 @5 A6 g" k/ B
// Then we create a schedule that executes the
: g' I7 Z0 J2 Y6 q2 c% I // modelActions. modelActions is an ActionGroup, by itself it' G w" E7 M1 G% k2 F( n4 t
// has no notion of time. In order to have it executed in+ R, N* D9 h0 H/ u
// time, we create a Schedule that says to use the: Z' t3 R% l! L; k2 ]# d( P/ s
// modelActions ActionGroup at particular times. This
. w2 H7 j- i* n' I' x // schedule has a repeat interval of 1, it will loop every
2 [, s% n) ?- g" G! J, ^5 I // time step. The action is executed at time 0 relative to( A& V" {! C5 G, O% t' u
// the beginning of the loop.; e n Z0 a) D
) Q! E) {/ S/ q; X4 [+ O // This is a simple schedule, with only one action that is) w: E7 n* Y7 j
// just repeated every time. See jmousetrap for more W% J0 N# h4 v* H) p' E
// complicated schedules.! g* k v3 @2 y, p
$ F0 ~/ [: k6 B L) N modelSchedule = new ScheduleImpl (getZone (), 1);9 T% f+ k( e1 E1 s
modelSchedule.at$createAction (0, modelActions);
' P( u w- T4 C1 [2 P( B; i' X ) y3 X+ u8 S% k) a/ K' I F8 V
return this;% e9 F: u {2 D2 G B& {
} |