HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( D) `/ J7 t2 t* ]" c1 W) r* g" ^2 z$ s* }/ @
public Object buildActions () {
) g9 D: w, z8 @ super.buildActions();- A0 V" h5 k/ g; ~ R/ B) }
" q- w0 l' N& n. G% N# g5 j // Create the list of simulation actions. We put these in
- }9 A2 S- \9 u% {6 p // an action group, because we want these actions to be
& a% B1 _$ f3 ]/ _+ G3 E // executed in a specific order, but these steps should# i2 X( [- }6 B% C
// take no (simulated) time. The M(foo) means "The message
% n5 N) Q7 U* O9 `0 H I u5 H // called <foo>". You can send a message To a particular
7 D K" _& b% \9 l, _ // object, or ForEach object in a collection.& r0 w% J5 {1 [
) f5 Q+ x" b/ O, H& L // Note we update the heatspace in two phases: first run
* u4 r. T- b0 Z* N' g1 P5 T // diffusion, then run "updateWorld" to actually enact the
2 s+ E: m1 C( d) a // changes the heatbugs have made. The ordering here is
- t% z( R6 B; Y" ^& b // significant!3 Z1 Z. U: p( L4 M' _) v! Q
( F! W" T- C: g7 Y3 r // Note also, that with the additional
& K2 T% y3 N6 ]5 D" u // `randomizeHeatbugUpdateOrder' Boolean flag we can
8 r2 a: y8 v$ {" T; N3 t4 M // randomize the order in which the bugs actually run
( o$ j0 [ x) {- e0 T& g" R) M0 g // their step rule. This has the effect of removing any# \( x1 |3 F0 H- E
// systematic bias in the iteration throught the heatbug
. M, Q7 ]% f& L6 W2 o // list from timestep to timestep
9 M' h& F. F0 ~& u % M6 D$ @; p9 s- v" D
// By default, all `createActionForEach' modelActions have+ L, s, p4 a7 ^ u9 ?) l
// a default order of `Sequential', which means that the
4 A9 F- h9 |6 T7 C/ a // order of iteration through the `heatbugList' will be
A# L1 ^$ Z0 y // identical (assuming the list order is not changed1 W9 w+ d$ f) |5 K( g! B
// indirectly by some other process).
7 S7 \1 g) Z! Y" {. E5 ^ $ M' [9 {/ F: n4 e0 X
modelActions = new ActionGroupImpl (getZone ());
# ~" z6 ?) W. o1 h! {2 Y) m7 I# k8 Y1 W& k
try {
5 ^8 S/ |- t6 z+ o8 g- c modelActions.createActionTo$message
' c' o" {7 M, P; ` (heat, new Selector (heat.getClass (), "stepRule", false));: O* x* f7 L! B% h/ y
} catch (Exception e) {
6 }, w$ Z. k/ y7 V" L) v1 Y* Y8 ?3 y System.err.println ("Exception stepRule: " + e.getMessage ());
" M8 f* k6 x1 E3 W }
. `4 R& T$ K8 Q( G! x' H3 _, F3 n1 N7 v9 G
try {
& ~3 t- _) t/ [ Heatbug proto = (Heatbug) heatbugList.get (0);
# ?! z! G. k& q: u Selector sel = & I+ w5 {/ h/ l; J9 f$ o' u8 p
new Selector (proto.getClass (), "heatbugStep", false);3 {+ I5 S- l% E1 t2 F3 a
actionForEach =+ k% h6 A, ?9 E3 S' }% ?
modelActions.createFActionForEachHomogeneous$call
: [, o6 N( p" D3 b0 w/ u5 ` (heatbugList,# o* {8 H5 F& _% |$ k$ r1 [
new FCallImpl (this, proto, sel,0 h& @# D4 F l$ X( F: B
new FArgumentsImpl (this, sel)));
- i& w& y9 |4 c- V9 W } catch (Exception e) {0 y- R% h+ `, U9 Z/ P) r) |- r
e.printStackTrace (System.err);
& i4 }* c( L- c$ u0 {5 |3 h" ~ }0 h. W) b8 Y% M5 }; {
! P$ |! r0 v6 Z9 m
syncUpdateOrder ();, ]/ c- w2 i1 [5 D7 }- U; ^9 _- y
* |/ F, C! V1 ~$ I$ |9 R: [
try {. r6 i2 W* Y, _, G/ L: k
modelActions.createActionTo$message
; @5 V( L- K7 x8 n: y (heat, new Selector (heat.getClass (), "updateLattice", false));
* S3 i; ~- l1 e: ]$ e: e+ H } catch (Exception e) {
' I \3 \6 H/ e7 Q4 d( v) y3 Z/ @ System.err.println("Exception updateLattice: " + e.getMessage ());$ z; k6 r6 X6 d% g# N, @1 W7 B# i
}
; u s- F3 n0 m) T& W- y% P
U: Z1 s9 j( c$ h, }- d1 ]- K7 B // Then we create a schedule that executes the8 u2 ~! R' N$ k& r; g
// modelActions. modelActions is an ActionGroup, by itself it
' z; M, K1 N1 z; d" D // has no notion of time. In order to have it executed in7 j n; H, {4 ]. a4 g. F& Q$ F
// time, we create a Schedule that says to use the
( ^" l. W5 X% b/ ?* @5 u // modelActions ActionGroup at particular times. This: `, D9 B, o: L9 _. m* X9 o, G
// schedule has a repeat interval of 1, it will loop every
* `% f3 v) g% l // time step. The action is executed at time 0 relative to# e6 k4 F, R1 R, u/ r# E8 R
// the beginning of the loop.% a$ R1 }+ F E ~( @3 H# L6 s
) c1 J4 J' m6 o3 y1 u5 X // This is a simple schedule, with only one action that is
/ z, R$ s. t- E // just repeated every time. See jmousetrap for more4 F1 }! d6 a6 i& i8 _, P
// complicated schedules.: I) m# }+ B! V* C2 \
1 h9 M3 z, t" o9 a' j, b modelSchedule = new ScheduleImpl (getZone (), 1);
8 f x/ Z' {3 R% G, D' m modelSchedule.at$createAction (0, modelActions);
1 A" h1 X/ g& `3 e: Y" | 6 [2 J. m) ^3 M0 K
return this;
# S. q1 Y4 i, J% K3 A } |