HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# u7 H/ [% r" ^4 |2 p T
' k- G. I, \$ O% }- R& E2 w/ D
public Object buildActions () {
) T3 W. {4 X+ q super.buildActions();; q4 ?, _: |5 |. h5 e
# S9 z8 c; M" l2 N! G z
// Create the list of simulation actions. We put these in
- p* f& h& u: K8 ^ // an action group, because we want these actions to be' i. [2 W0 H' m
// executed in a specific order, but these steps should1 s% d* t4 B) c( `3 T4 n8 e3 g
// take no (simulated) time. The M(foo) means "The message8 `0 L9 i/ b% ?# a$ f" u
// called <foo>". You can send a message To a particular
% c% j4 i: m# v+ C3 [0 U+ l // object, or ForEach object in a collection.- j) ^$ Q- g9 G1 M4 k8 h1 O$ U; W
4 k# n1 J) y" _* A6 r // Note we update the heatspace in two phases: first run* K) A! ^# o4 M k% a; o
// diffusion, then run "updateWorld" to actually enact the0 h. ]1 \- u) f6 _: ? F4 o: s+ r4 U
// changes the heatbugs have made. The ordering here is
" G" ~' z# M! c/ s# L( | // significant!
8 ?' R# m" K$ B/ S
. }: L: D3 j3 m) ~. `( Y // Note also, that with the additional
/ l2 e, i( ?8 K- I, r k0 T9 q4 N // `randomizeHeatbugUpdateOrder' Boolean flag we can
( x; {" ?2 b3 U1 v1 S // randomize the order in which the bugs actually run
( t; l; E' S5 h8 w3 {9 h/ v // their step rule. This has the effect of removing any
& Z( U- |7 ]- Y+ x. L // systematic bias in the iteration throught the heatbug
; ^5 u' P1 [! n/ d // list from timestep to timestep
" n! w& m, ]) f4 C7 [- I. K' | , }, `% u& I' o7 U
// By default, all `createActionForEach' modelActions have
8 K/ Z& r; |9 Y4 @! p G ] // a default order of `Sequential', which means that the* D+ N; v+ F3 ?7 e; T! w2 G
// order of iteration through the `heatbugList' will be
, D& c; @& j" {: k" p u: r // identical (assuming the list order is not changed# m; u( z1 v4 \3 l% d v
// indirectly by some other process).
$ b9 \8 C6 l' C2 v0 G& W- A 4 D2 y+ D E( m ?% w* E
modelActions = new ActionGroupImpl (getZone ());1 x$ L3 s( H* `: u
" W( k2 Q/ i5 E1 P. U& ~3 s
try {
/ T: ^' b6 C7 p. Q I, R modelActions.createActionTo$message
, k' Q/ ^. {+ W, H$ N (heat, new Selector (heat.getClass (), "stepRule", false));5 ]6 t6 `3 O( M. V- A6 n/ b; {
} catch (Exception e) {5 k B: G1 S* [9 s- I
System.err.println ("Exception stepRule: " + e.getMessage ());2 G% Y# J% T1 \
}' X2 Q: F+ y. T
/ p7 B9 K2 B5 b9 c& H& q
try {! p. g2 G' |1 I" B1 _
Heatbug proto = (Heatbug) heatbugList.get (0);
) @% y2 z- N# M1 k) X5 {. k Selector sel =
/ F6 h1 _4 r- t; @ S# [& C$ X new Selector (proto.getClass (), "heatbugStep", false);
1 v% a( S; I) \% S: v/ l5 } actionForEach =) a$ G. Z. z7 z" U. R' H
modelActions.createFActionForEachHomogeneous$call L% S$ N: I" |! H: @ M
(heatbugList,8 w% Y% s+ V+ P$ r B6 J; c
new FCallImpl (this, proto, sel,
' ^6 C8 d4 p1 `' M new FArgumentsImpl (this, sel)));
a9 v9 x: Z. X! j8 | } catch (Exception e) {
3 }1 i$ X6 @( n* |& e; W e.printStackTrace (System.err);. N0 v6 O! o' N
}
! Q! n: \; Y u8 J3 a, u ' x0 T' Z6 y, j1 K, I
syncUpdateOrder ();
9 A- J! e) D3 e$ ~+ @3 C8 J* z+ j
]+ S5 ?% @; K5 Y. Y2 g0 g+ r try {9 v f" M5 b& m7 S
modelActions.createActionTo$message + e$ v- H/ y' k! {& d9 ^
(heat, new Selector (heat.getClass (), "updateLattice", false));" U7 N- B2 e7 O7 X
} catch (Exception e) {
6 q* j" E, m" E, R" A$ T7 {' f System.err.println("Exception updateLattice: " + e.getMessage ());
+ J% T7 Q1 Q' C4 G+ [5 a }
# q) s. j0 W" a* U6 a$ i# Q
! J1 L- [! x* {8 r: o // Then we create a schedule that executes the- A; P9 k8 y# Q6 N3 [
// modelActions. modelActions is an ActionGroup, by itself it/ j" |. b! V( M) o* c7 ~! ]
// has no notion of time. In order to have it executed in( _% y# }3 [+ v1 f6 W. ]
// time, we create a Schedule that says to use the' B6 C# ^; r; ?# |
// modelActions ActionGroup at particular times. This9 ?# n: R6 i4 Q
// schedule has a repeat interval of 1, it will loop every, j( j- z/ g1 a
// time step. The action is executed at time 0 relative to
) v8 p, C- h; n. R5 F R7 K/ R // the beginning of the loop.0 p/ g4 C$ u5 u& D0 G) m+ G; r
/ q5 t5 z# d, p9 b$ o0 O. `' x
// This is a simple schedule, with only one action that is5 u2 c' ~; G. t8 y
// just repeated every time. See jmousetrap for more
4 x3 c U) ~2 `. `3 K // complicated schedules.; r) }0 x) N: a4 l+ M1 Z0 W
_9 ?* ~* c, T$ Q$ d
modelSchedule = new ScheduleImpl (getZone (), 1);
1 T [0 S; e: J9 } modelSchedule.at$createAction (0, modelActions);: o d: n1 u! Y+ F, z/ }6 t& ?: k
- c) E% x" P6 w. B, d return this;
' T6 c3 K2 R# e: G) m c9 Q } |