HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' Y9 c/ k6 l0 |7 S: N
# M/ @! N7 B+ M! U6 ^ Y: | public Object buildActions () {$ U( F( Q* v: E8 t' M0 ~% t% ~
super.buildActions();) f0 B3 Q+ d( D* B
, d, B0 w& F! P" G // Create the list of simulation actions. We put these in) C0 Z+ V$ g9 |3 r$ G
// an action group, because we want these actions to be
$ }7 o$ S% D( j9 J // executed in a specific order, but these steps should
% a- F0 j, d; J& w% P // take no (simulated) time. The M(foo) means "The message, o0 L; ]7 s0 h. U! Q
// called <foo>". You can send a message To a particular1 W. [- {- g5 @; T9 `# ]
// object, or ForEach object in a collection.1 j; G* K6 n8 S
' ^) k+ b1 |' k: Y( l) p4 B
// Note we update the heatspace in two phases: first run4 w' q( ?- w" p
// diffusion, then run "updateWorld" to actually enact the
) t) L% p* i8 v# j# ^ // changes the heatbugs have made. The ordering here is* G( g R7 w. V$ j
// significant!
; Z8 a" \$ P9 F3 h( q6 x ^9 l3 J8 B$ U3 v6 _6 X
// Note also, that with the additional
# N4 h* V. r0 N8 Q/ _$ j- d1 G // `randomizeHeatbugUpdateOrder' Boolean flag we can5 Z* |9 K; Z4 F, X2 D
// randomize the order in which the bugs actually run; X1 B2 U7 ?! k- O& v
// their step rule. This has the effect of removing any
0 M; G/ @" w X( {4 y6 i' t // systematic bias in the iteration throught the heatbug
- B: C7 u, @1 y# \. ]! E, j // list from timestep to timestep
+ ^( t6 y. T; [5 T ; c2 K3 P6 |' i, n# [% |
// By default, all `createActionForEach' modelActions have
# s8 i6 g6 H$ {9 N9 t // a default order of `Sequential', which means that the+ ~& R4 l; v$ |: u/ k2 I
// order of iteration through the `heatbugList' will be
% ` I# ?9 b; m; b' z5 _3 [9 F // identical (assuming the list order is not changed6 q- \+ O& l; ]7 X5 p. f" M
// indirectly by some other process).
" k+ y' g2 h8 Z. k- Q) c/ C
, ?& t* @' X1 L- \6 c modelActions = new ActionGroupImpl (getZone ());1 v3 D5 H& I& J# l) t
, |8 h6 i, U: G! ^ f try {& j' {. q O8 \% a" [
modelActions.createActionTo$message
/ x/ g: J, y g2 ^: Q# D: [7 L (heat, new Selector (heat.getClass (), "stepRule", false));; d4 M% K/ A4 N( G5 F& l" O2 v
} catch (Exception e) {
+ k' s5 N# o0 S' @ System.err.println ("Exception stepRule: " + e.getMessage ());
% L2 V" {' P4 L% P }4 p) ~8 M9 V5 z9 z
+ b- r! v6 t- h try {+ `. a( ~" x" Q" r
Heatbug proto = (Heatbug) heatbugList.get (0);1 f. W: F3 q# l( I" V! ]
Selector sel =
8 G: ^4 ^: N- p% }; Z5 m new Selector (proto.getClass (), "heatbugStep", false);% i E3 H! ^5 Z2 v* y, B# f9 k
actionForEach =0 f; z5 V6 U/ d& f1 A/ n
modelActions.createFActionForEachHomogeneous$call
& R' f2 Q. z) o* f$ v1 s (heatbugList,( K7 d5 F* m5 v1 }% y. y: U6 h
new FCallImpl (this, proto, sel,. h2 Q" p+ t8 [* [- L" j6 x* L& ~
new FArgumentsImpl (this, sel)));+ d; Y( q$ K$ q0 W' K/ U
} catch (Exception e) {
0 X& |8 J) h3 v e.printStackTrace (System.err);3 \) {0 P* H8 f, d9 X5 _
}
3 x: j* e4 P6 z9 E" N( a
, t" b% U# y. q' R" F# t% O syncUpdateOrder ();
- A7 G" `( d4 g! [7 Q- ^2 V, M- W" c* X8 H4 a7 y4 ]
try {( m* z/ B! H& i( g4 V
modelActions.createActionTo$message 9 d. K0 \6 A% |+ M* h. e2 G. O0 t
(heat, new Selector (heat.getClass (), "updateLattice", false));2 u7 \1 U& V& [+ o2 I9 x
} catch (Exception e) {
- M; Y8 N& } u* k- i2 } System.err.println("Exception updateLattice: " + e.getMessage ());
: r$ P! R; j h1 _ }! `4 b9 Y0 r: s4 g3 y' P' l# v
, B: q# f8 c- | // Then we create a schedule that executes the. U- K% o5 n% n$ J: D7 Q: G( n
// modelActions. modelActions is an ActionGroup, by itself it8 d4 {% r7 C! A R0 t: A
// has no notion of time. In order to have it executed in; U5 j4 p7 s4 U0 H
// time, we create a Schedule that says to use the
& y; y5 N c' R) @( \. j // modelActions ActionGroup at particular times. This3 ?& D& D; U! y% U9 k! s4 ^
// schedule has a repeat interval of 1, it will loop every5 g, d, L) F( Q$ N$ ]
// time step. The action is executed at time 0 relative to
* @( P$ O2 A) ?3 t% Z // the beginning of the loop., @! `* a$ W* J# _2 }
5 ~4 U! K& s7 ^$ H) u // This is a simple schedule, with only one action that is
+ p9 l7 Y: H+ f, D: T7 P! t9 B3 l // just repeated every time. See jmousetrap for more
* ?2 |/ U( p* T // complicated schedules.
. R; H: L- l" b% N3 o$ D# h 6 }6 ?5 V% Z( W9 j- O" ?# M
modelSchedule = new ScheduleImpl (getZone (), 1);
; [! V* Y: b4 N4 t) [9 s modelSchedule.at$createAction (0, modelActions);) B( z2 E4 ]6 h7 J8 i. J' \! ~) q1 W7 ]
. z3 |, G9 D8 N2 X% W f, M
return this;
9 I& f, A6 G. D' Y( o, ` } |