HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* i2 L8 x2 V# t5 u1 f/ q( B' N
7 O4 ?* v9 q" @' f7 G! K- f public Object buildActions () {
. P: v6 I! f: |9 [ super.buildActions();
0 Z( I/ e" d* F" s' ?8 R2 _* c" i% j% s 6 W0 |2 |2 z* Y" _; b# r+ C6 o
// Create the list of simulation actions. We put these in
1 h7 k0 q# k: O9 f# B* |: _ // an action group, because we want these actions to be
4 ^6 [& M" C" E$ K // executed in a specific order, but these steps should: K9 ]% Y8 _# [0 d# O5 L
// take no (simulated) time. The M(foo) means "The message
; h' }& ?/ x* w; |9 R // called <foo>". You can send a message To a particular
% u2 y7 \" T9 m0 u // object, or ForEach object in a collection.
2 j [! Y2 m/ P, x7 ` 2 k4 ]1 E, K* j/ R0 l, [1 S: Z
// Note we update the heatspace in two phases: first run
5 k- M8 ] M" E: E7 a+ V8 W& o( O // diffusion, then run "updateWorld" to actually enact the$ e+ D* x' a$ v6 P
// changes the heatbugs have made. The ordering here is
& I! P) O y0 w- S! K5 A // significant!! c% b* M6 p" \' E7 [
& P) s( u1 j, P! T1 R9 d* q' g
// Note also, that with the additional" M6 h2 y1 r" k
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ e; B1 p3 [8 d4 r. |1 g) X
// randomize the order in which the bugs actually run3 }. {( e g% x2 @- m: B
// their step rule. This has the effect of removing any% m" i! e9 T5 j: _3 {8 G O
// systematic bias in the iteration throught the heatbug# u9 o! S# }/ U1 q: [( o
// list from timestep to timestep: E9 B) y6 J. _ u
6 ~+ r( w, v s; @2 U3 ]
// By default, all `createActionForEach' modelActions have
/ v1 J$ `" R' }7 {/ m: i9 j b // a default order of `Sequential', which means that the
; v+ u- Y! _4 H* F/ \. p // order of iteration through the `heatbugList' will be
- v* h4 b5 C" F6 G" a d; O // identical (assuming the list order is not changed
/ s$ |, N5 \* W. f* c. T( _& w // indirectly by some other process).1 h5 w. c. v" P! g: R" y
+ ~2 S7 E" Q; J% {% J
modelActions = new ActionGroupImpl (getZone ());
% _5 u( j$ K4 @9 n. j; Z- ~' ]+ B/ t+ t" r1 T" j+ b1 c# E: h, t2 c! g
try {
! y4 j; M! c) V5 i& f6 w2 O modelActions.createActionTo$message
$ C, T6 ], J% A/ y; F0 T (heat, new Selector (heat.getClass (), "stepRule", false));
7 Q) ?6 h9 }6 v } catch (Exception e) {7 P4 [3 |5 O8 ?" o& v0 b
System.err.println ("Exception stepRule: " + e.getMessage ());1 M$ S. X1 s3 E- P
}" C+ v5 t5 i# |
. w1 n) ]3 ]9 C' |" } try {
) b) i/ O: e5 y# Y0 {* { Heatbug proto = (Heatbug) heatbugList.get (0);
8 f( H& t$ o+ S+ y- B% Q7 Y% ~ Selector sel = ' p5 f/ L$ A/ n. x: |4 d/ J2 d
new Selector (proto.getClass (), "heatbugStep", false);
* ^7 O$ _8 r; M: a8 N actionForEach =
8 v4 h) o; S7 {9 a/ ~% h modelActions.createFActionForEachHomogeneous$call
8 j/ ]. V0 p/ h (heatbugList, r3 @$ l8 Z/ Z% c
new FCallImpl (this, proto, sel,
; w- t0 ~ M+ P$ U7 v new FArgumentsImpl (this, sel)));
5 K }! t8 j: R; _& M3 s } catch (Exception e) { h3 I/ [1 B! ~
e.printStackTrace (System.err);2 r+ ] b6 J8 N k d
}
! {6 d; {, e! E. J 9 ~, x# p# u3 P
syncUpdateOrder ();6 c( h) x8 s% c+ F8 A
6 ?! x9 H3 P+ c/ H6 K7 O try {3 _3 R7 f& z e$ F' l4 t
modelActions.createActionTo$message
3 \5 ? B" O3 p- b (heat, new Selector (heat.getClass (), "updateLattice", false));
1 A1 q7 T- D" q& l+ O: W$ {* s } catch (Exception e) {
& F2 t) c# S2 t. D0 B6 u System.err.println("Exception updateLattice: " + e.getMessage ());
+ O1 I- G: f5 b }3 S- G ~* E+ S
& I3 A- H( L8 s- x- G1 m
// Then we create a schedule that executes the3 r! j i* |* J J1 |4 O3 J
// modelActions. modelActions is an ActionGroup, by itself it
( U! v/ H' `! Q9 u // has no notion of time. In order to have it executed in
/ f& s' }. Q# B9 w4 l/ G* b // time, we create a Schedule that says to use the3 x$ q1 W# }5 V7 i/ @
// modelActions ActionGroup at particular times. This
9 F; F' g9 v1 I3 u( `# Q1 q! O // schedule has a repeat interval of 1, it will loop every& a6 E$ g0 z: ? b
// time step. The action is executed at time 0 relative to, | T |& F! L! Z& l5 @8 W$ D/ B% I e
// the beginning of the loop.
+ o+ H' V+ }% l- D( `2 h* K
% Q9 U8 A" h: Q // This is a simple schedule, with only one action that is8 A5 P& w/ L( F7 s
// just repeated every time. See jmousetrap for more
9 L6 L, N5 H1 U) ~ // complicated schedules.
2 k8 }" v! b" S. Y 0 x. O8 J( C' I( D5 r3 d
modelSchedule = new ScheduleImpl (getZone (), 1);
5 X3 r- U& D* w! U/ g* u. F modelSchedule.at$createAction (0, modelActions);( G% @' F- Z, ?1 _6 R9 D
9 {7 v; ?6 R6 p* r! q" V$ V
return this;
- S/ J7 S$ @( M# d } |