HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& z9 y# o) ]( X" c; |+ L. w
* {+ s6 ^8 D, M) q3 m public Object buildActions () {: e' x; ^5 i) o L+ ]' U6 v2 Z4 }
super.buildActions();
2 J# f. E- ?" c, J y & X1 g9 D% _4 n# r
// Create the list of simulation actions. We put these in
5 r1 \; `) G0 h8 Y. V // an action group, because we want these actions to be
% `) \+ L- k5 g // executed in a specific order, but these steps should
7 C% t: r$ V5 J& h3 ^ // take no (simulated) time. The M(foo) means "The message
* \8 K( _0 w; T, I5 r" g( O9 G // called <foo>". You can send a message To a particular
& i- W% `& w3 G- G& E+ g2 N // object, or ForEach object in a collection.- ^/ T* j$ U5 H
- D+ F/ V1 g. h5 d$ K9 Q- h
// Note we update the heatspace in two phases: first run" w4 G5 H5 D; X% @( _, b5 [
// diffusion, then run "updateWorld" to actually enact the
4 ] w6 z/ O* O, G // changes the heatbugs have made. The ordering here is2 p( ?- T5 p2 c3 e6 G+ J5 w* B
// significant!1 `6 ]; L$ G6 _, L! I8 C3 `4 A
# |+ }5 Z3 \, J6 F
// Note also, that with the additional# G% z z2 l9 K( Z1 h1 p
// `randomizeHeatbugUpdateOrder' Boolean flag we can: C' ~4 ]" a7 w* l( d& V( h
// randomize the order in which the bugs actually run& N- _& J5 }8 j2 [" L e* Y
// their step rule. This has the effect of removing any
; B2 m Z6 X0 `& L2 |! U# j // systematic bias in the iteration throught the heatbug' B. X$ _5 n- V
// list from timestep to timestep
' V9 m. T% H0 Q- @4 ]; c
' T( N/ y1 |; \ // By default, all `createActionForEach' modelActions have
! L- g A: `6 n // a default order of `Sequential', which means that the& `7 d6 ?, X, _
// order of iteration through the `heatbugList' will be% K- ]' x K1 y* ?) C) |5 ^/ v
// identical (assuming the list order is not changed" O2 V2 b0 a" l9 N8 N. o
// indirectly by some other process).' [$ U) A: g& C# a
! L9 d9 W( v' \0 E: P$ l5 d
modelActions = new ActionGroupImpl (getZone ());3 }4 J3 F( k( g
* o2 U7 w3 l5 T: C- q% o Q' P& K1 K
try {' W" I4 _+ b- m q/ v0 p
modelActions.createActionTo$message
. k; ]) }4 d& i# S (heat, new Selector (heat.getClass (), "stepRule", false));% b" i* a3 p h' B
} catch (Exception e) {
2 \/ o: Q8 O3 r2 H, h System.err.println ("Exception stepRule: " + e.getMessage ());
; B# s! T/ c0 \+ ]- V1 t8 y) }8 | }
; s! `! W; L. V6 S% A: g8 m0 t. Y, j2 r
try {
( }3 L% l4 v2 N; a% X4 n Heatbug proto = (Heatbug) heatbugList.get (0);& }1 T2 x k- y# K; x7 f
Selector sel =
1 A/ D8 n6 y# R. f% u7 Q new Selector (proto.getClass (), "heatbugStep", false);1 {3 E+ ]$ N& Z2 `% U1 w, }
actionForEach =6 c( s% @! E0 s3 U9 O& o' ^
modelActions.createFActionForEachHomogeneous$call
9 F3 L/ e3 _7 y# U6 ? (heatbugList,2 K% ?4 E% b" U- Y
new FCallImpl (this, proto, sel,% Y6 I. {5 z/ [2 R% u1 r
new FArgumentsImpl (this, sel)));
2 f7 `. \: h A( n } catch (Exception e) {2 |4 L) M0 I! f$ U# a4 x, B
e.printStackTrace (System.err);- g# ^. Q+ i. ~+ B8 Q; v& h, y
}2 q1 f9 Q- J1 J& q3 Y# x+ a+ Q* c
6 Y& ]! i9 k4 ^; X' _- {# P0 f
syncUpdateOrder ();
. n% Z, b1 ~2 v$ T/ D% @# x; I8 K( U8 \0 q$ m
try {
: n) E/ ^9 Q, O: ^1 s$ F: \ modelActions.createActionTo$message 8 b5 A( r$ X0 |: J' `7 R, j0 {
(heat, new Selector (heat.getClass (), "updateLattice", false));
! d- o v( |; o/ E7 w } catch (Exception e) {
! s2 ~9 b7 D0 J2 u System.err.println("Exception updateLattice: " + e.getMessage ());, K5 h3 f* O" ]% G1 _, S8 A
}& A- J; B' l/ b" c. W2 Z+ q, r
; u8 o+ K$ s8 k7 [# ?1 h // Then we create a schedule that executes the
" K/ r' R% i! Y7 ^- J* K // modelActions. modelActions is an ActionGroup, by itself it
; s. U) }1 \9 N" \4 ] // has no notion of time. In order to have it executed in! {( d2 K$ K; a. g. [
// time, we create a Schedule that says to use the8 S# O6 Z4 L6 C' d* E, G8 @
// modelActions ActionGroup at particular times. This* X. t6 z7 ^7 s- v+ p7 M' ^
// schedule has a repeat interval of 1, it will loop every" e9 r9 }$ ?7 r
// time step. The action is executed at time 0 relative to* ]& ^6 z6 t2 q# t! U7 a
// the beginning of the loop.) a; y: A# D+ R, s
2 ]0 U k; g' ^% m1 [7 X2 [% M [ // This is a simple schedule, with only one action that is$ x' e* _! i5 l) y5 m5 x) }
// just repeated every time. See jmousetrap for more a% }" x8 u; X" E$ y t
// complicated schedules.0 y( L; F/ T9 u; f' e3 C
' z7 ]$ i, R+ U+ ~4 I
modelSchedule = new ScheduleImpl (getZone (), 1);
* u, F4 A3 i6 m2 J' G modelSchedule.at$createAction (0, modelActions);
# |: ]& q$ ]4 o8 Y {3 i5 W
% t/ c' P& W7 N: g return this;! N9 @+ h, t+ E9 x
} |