HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& J8 P! |4 m: _ U
; H* ~& \2 z0 M
public Object buildActions () {
. O6 g h/ c; r9 N2 a0 w% E# I& g% l super.buildActions();
- A/ g- h# f1 w
( q7 x$ S- w5 v" I& m: {+ \ // Create the list of simulation actions. We put these in2 e% s) B' g$ R( u1 x
// an action group, because we want these actions to be+ X4 x. M7 C! ^, V8 A- h+ ~$ D3 Q
// executed in a specific order, but these steps should
" X. v ?7 A! w4 l. K5 @( x // take no (simulated) time. The M(foo) means "The message3 P7 e" A) O, J4 w4 y
// called <foo>". You can send a message To a particular" b% f% v* N9 L( y
// object, or ForEach object in a collection." B* E6 y2 `- K2 J% B4 D! O
+ T, c/ u5 i% t, F: s // Note we update the heatspace in two phases: first run/ S6 }# U' i8 Y# C* c% M, a
// diffusion, then run "updateWorld" to actually enact the
& P) Z4 m6 K; }7 s* t/ L // changes the heatbugs have made. The ordering here is
) d1 e2 q" R0 c' d1 a // significant!
2 p3 _( z8 L# }# d
i3 R" a5 z/ v/ n7 Z) ~ // Note also, that with the additional
* `+ S+ m/ [- X$ A7 @2 ]. G4 b4 B F- S // `randomizeHeatbugUpdateOrder' Boolean flag we can$ y$ _! G- Y8 z: Z4 P% G- ?
// randomize the order in which the bugs actually run
2 e0 R& e% J9 t // their step rule. This has the effect of removing any
. u' {! J8 A/ Z4 c1 A // systematic bias in the iteration throught the heatbug
# [/ {! N2 X! x' k) P5 J // list from timestep to timestep
, g+ X3 ?) _, A7 \; l0 O
$ K% x8 S8 W& o8 y // By default, all `createActionForEach' modelActions have' j$ q* z: P) u1 U5 x$ r0 z
// a default order of `Sequential', which means that the8 v* h9 d" C3 a
// order of iteration through the `heatbugList' will be
# R. Y% h# Z- [0 O# c // identical (assuming the list order is not changed
{ w7 A5 G$ ] // indirectly by some other process).( m2 I1 J7 b/ v5 a. T' _
' y4 ?& c/ h8 q! V modelActions = new ActionGroupImpl (getZone ());
3 Q5 C: V2 `+ \, m1 ~* y8 b% W2 m1 v2 |9 u- ]
try {
' l$ D! o: t$ {# z4 n, R modelActions.createActionTo$message; r0 }' O- A8 `1 D7 j9 _* t8 S) `! o
(heat, new Selector (heat.getClass (), "stepRule", false));" i9 P" c4 r, n7 Q& s& M' z
} catch (Exception e) {% @5 k' D( @( E, \
System.err.println ("Exception stepRule: " + e.getMessage ());9 w4 y6 Q$ r5 ~% S" a2 U7 }! P7 M
}
/ e$ T& k- F, o K7 n/ n& o$ v4 C5 A. A
try {
4 a6 ]. A' O8 B8 a Heatbug proto = (Heatbug) heatbugList.get (0);
. R7 q5 A4 t, } Selector sel =
; `% M. h& Q5 g( z7 u3 H: }, O new Selector (proto.getClass (), "heatbugStep", false);
( F; M4 T9 i' P6 n9 `6 ?/ F actionForEach =
( h1 Z; O' P5 z0 E& Z' m$ A modelActions.createFActionForEachHomogeneous$call
" [( g; w+ E# N) \. q& K, s (heatbugList,: l- q/ p7 S% o6 S5 n, ?
new FCallImpl (this, proto, sel,
( v$ x% s2 l" E5 O4 E new FArgumentsImpl (this, sel)));
+ ^, p' z8 R6 }/ ~; M. ?. D } catch (Exception e) {
: A7 D2 o1 R, s2 T7 ] a# Z e.printStackTrace (System.err);* ~8 B" q2 R# T; f& S7 d
}
( N/ P2 m/ p2 [! Q; m1 ?/ ?8 u% w + ~3 p; D$ j o, B. x; c: v' u
syncUpdateOrder ();; g4 B' ]" |% I* Z6 R3 v
" E2 X9 i$ D9 u; j try {
8 z) k ?4 N' ?' B' @ modelActions.createActionTo$message
' ~1 g2 V) d3 E: V2 F (heat, new Selector (heat.getClass (), "updateLattice", false));, u5 T; a& g9 Y3 s, i
} catch (Exception e) {
# a. @; g Q) H" M* r System.err.println("Exception updateLattice: " + e.getMessage ());" T: {; g& G6 X* Q& v* A
}
4 x$ l- K" u5 o6 h
4 w; c) v( x& r# `& k3 R$ k; e5 ` // Then we create a schedule that executes the
4 `2 g4 C4 i9 F @2 c: c ^ // modelActions. modelActions is an ActionGroup, by itself it, e' F- C( Z4 h8 d
// has no notion of time. In order to have it executed in& a5 X2 v$ k. Q
// time, we create a Schedule that says to use the
- c: R+ f3 T! q6 | p$ j6 C // modelActions ActionGroup at particular times. This" D. i* b( c9 Z4 p4 b
// schedule has a repeat interval of 1, it will loop every3 c" ?5 H; H* R, ]' r: d1 y
// time step. The action is executed at time 0 relative to$ B, G9 [/ |3 D1 M" b; T: v# I
// the beginning of the loop.
( z& l3 z. @ b; l9 H4 H a
9 Q/ e0 H- {) {" ?! u8 x' o2 _1 v+ b // This is a simple schedule, with only one action that is- Y% T. u: C: ?* ~
// just repeated every time. See jmousetrap for more# Y1 s5 Q3 c& U! N- p5 k' P
// complicated schedules.
5 t! F9 @" V8 a3 O
( p! h- D5 Z6 ]! c5 k modelSchedule = new ScheduleImpl (getZone (), 1);! h2 v9 K5 [# h7 K# n( B
modelSchedule.at$createAction (0, modelActions);
7 Y& J2 c- j+ L v: G8 B6 n 3 u6 f% T9 f8 P3 S! j) o
return this;7 z; s/ y) m, r5 r9 H
} |