HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
4 ^2 A5 v5 ^/ W1 N
4 t, N. ~ t) }8 Z6 p5 _/ a public Object buildActions () {# H8 {, k' i9 m
super.buildActions();# y" @7 I: ?( g. M
/ @! S! m# _- L9 i, g* t) H- ~" a
// Create the list of simulation actions. We put these in; c5 [0 T( |0 G# |. ?
// an action group, because we want these actions to be" J' P, a& }4 d5 `4 g
// executed in a specific order, but these steps should7 Q: ^( G: e2 P6 U- S; a6 Q
// take no (simulated) time. The M(foo) means "The message! T$ J9 }% _! ]/ |6 T8 c6 O5 R
// called <foo>". You can send a message To a particular
' X$ _* Y' ]# l x% O // object, or ForEach object in a collection.5 q, o$ ~0 h* y p5 X9 j
4 z l! \8 T2 @# u/ B
// Note we update the heatspace in two phases: first run
3 @6 L! b9 h2 x6 d // diffusion, then run "updateWorld" to actually enact the
# e( j6 {* z( y1 W% o // changes the heatbugs have made. The ordering here is/ L$ c/ z9 P" a* V2 U
// significant!, Z) T& C& Q8 B# [4 n" J3 D
3 L' T. U/ F& m
// Note also, that with the additional/ V9 N7 u% F; y* \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& r6 Q7 l. [% J; I // randomize the order in which the bugs actually run" r6 v# M0 G F! {# m) f1 v' k. j
// their step rule. This has the effect of removing any$ G- g3 [. y1 n6 [
// systematic bias in the iteration throught the heatbug% h! ^% a1 v+ R+ m8 _
// list from timestep to timestep
( U0 e* ~$ s9 {1 f% I. [4 ` 5 H% P6 u! ~$ q5 F
// By default, all `createActionForEach' modelActions have
5 o, c' p/ {9 H% M& t7 {3 e( m7 ^ // a default order of `Sequential', which means that the' F" A3 i; H/ X. @+ T/ z% ^ ?
// order of iteration through the `heatbugList' will be9 h/ x9 M0 R) F+ K" R
// identical (assuming the list order is not changed
3 a+ {7 p2 H9 s; |9 W6 s6 i // indirectly by some other process).
6 L4 C8 n# d# C3 ?% X ) g) Y- A1 C- {2 X: i" w
modelActions = new ActionGroupImpl (getZone ());6 |$ }, G7 m* D# r
1 ^" M' g5 ?" Y$ l2 n' q
try {+ r( Q% u: u. E. m4 q1 y/ j. U/ W
modelActions.createActionTo$message, T) F2 f, }: @' A5 K: r' l
(heat, new Selector (heat.getClass (), "stepRule", false));
. v6 h4 z/ j: J \6 l } catch (Exception e) {# o4 F2 T; G4 V W, k7 A
System.err.println ("Exception stepRule: " + e.getMessage ());
o8 @: `; t' b; }( g6 }4 G4 P }7 y" U+ [; C" I
1 \1 W9 l' f2 S; h, _5 W% Q
try {
( a1 I- D$ [7 i. H) G Heatbug proto = (Heatbug) heatbugList.get (0);" v& m M) p" `/ m( j
Selector sel = ! x9 W+ d! T* C+ l8 X
new Selector (proto.getClass (), "heatbugStep", false);
4 n6 W) u/ G( s/ t$ `4 e actionForEach =
/ P' M# B9 c! {$ j* O( J9 X8 l modelActions.createFActionForEachHomogeneous$call" n) e, c1 w$ U
(heatbugList,2 E% O! H& d6 @" }: e
new FCallImpl (this, proto, sel,5 H. G N/ y9 z7 y
new FArgumentsImpl (this, sel)));
- I, n4 s0 f- b7 J } catch (Exception e) {/ }6 q, T& i8 w% i8 R3 Z- ?
e.printStackTrace (System.err);/ |8 M5 ^6 Z6 B+ S a4 b
}
% ]) j7 X2 W) z; w$ }. v
) Q2 E% N# Q2 r; B3 ] syncUpdateOrder ();( q- K3 \9 ]9 P$ N: Q( h4 P7 w Z
) \5 v. X- e, h+ s' O; A, l% ]2 A4 G try {& H1 V* w( R! ~2 \" T
modelActions.createActionTo$message ( P: ^/ W& e3 G" m( S+ d, a
(heat, new Selector (heat.getClass (), "updateLattice", false));+ w0 y) D9 M1 I; P/ A' Z' c- |" u( V
} catch (Exception e) {3 |) N* [+ S& I" y: T7 u
System.err.println("Exception updateLattice: " + e.getMessage ());
1 ]3 E4 U2 E0 ]2 W' q }) y* M4 V/ [8 q1 S9 X% m
4 Z, |+ L. E) f+ k- B- |1 m2 C // Then we create a schedule that executes the
8 o+ E: Q: w d5 I8 s6 D/ R% O- N // modelActions. modelActions is an ActionGroup, by itself it2 \5 j( U7 @1 s0 b% {- i: o& Q
// has no notion of time. In order to have it executed in: D) I: ~9 n8 o1 e0 y. b
// time, we create a Schedule that says to use the
# W6 j/ i5 e4 G; b$ K1 Z+ }- y // modelActions ActionGroup at particular times. This/ F3 [' M) ~& p" e4 ^
// schedule has a repeat interval of 1, it will loop every
" ~4 y2 S9 ?" h8 j! C; X // time step. The action is executed at time 0 relative to
u8 {/ h( Y1 U. j7 f // the beginning of the loop.
$ L) u2 x P5 p+ \5 l4 H* @/ W2 W( k& b
// This is a simple schedule, with only one action that is n, v: @# K/ c3 m" ~% M, I
// just repeated every time. See jmousetrap for more
* Q. Q+ L' A- _: x: k // complicated schedules.
4 W4 H* R8 J: w
/ H+ v- j6 }: q0 u( j modelSchedule = new ScheduleImpl (getZone (), 1);7 v# q5 | _# T( \4 o: ]* M
modelSchedule.at$createAction (0, modelActions);! E" t; N/ q% }2 ]' E2 S9 u! }
# W& h1 v$ J% n4 n4 h O
return this;
0 h; f3 A6 z: T3 c; n } |