HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: M" J4 ]8 O! z" H, l8 s
# d: w8 W3 r/ |2 d public Object buildActions () {6 F2 Q; H% W; k q" a7 }
super.buildActions();- {1 Z! K2 u. j4 e: _2 a! r
( S) M6 Q, p+ W$ Q8 ^# y% d% X- W' k // Create the list of simulation actions. We put these in3 A% y7 T2 L* i2 Z
// an action group, because we want these actions to be8 M$ V Q- D3 c" R; q% b+ ?
// executed in a specific order, but these steps should6 D. S w) G3 t4 m' y
// take no (simulated) time. The M(foo) means "The message
1 W: O: H) e' ? // called <foo>". You can send a message To a particular
4 d3 K9 o: \- y, d // object, or ForEach object in a collection.
8 D5 X' ^0 Y" _/ ~3 E ' C) @+ U, b9 H, O
// Note we update the heatspace in two phases: first run- c% S7 I5 F& `& S) X1 l+ ^
// diffusion, then run "updateWorld" to actually enact the
/ d: j! g. @$ k+ `+ U0 }; T // changes the heatbugs have made. The ordering here is
7 ]9 Y7 ~' y0 u1 [. s2 r0 D; q/ ` // significant!1 n8 C, P! \+ K! T
+ }+ Q8 k8 h; b# [) Z# `9 E0 U) y // Note also, that with the additional# v, O4 g7 h' P8 S
// `randomizeHeatbugUpdateOrder' Boolean flag we can s1 d2 w. B) P7 i8 k9 g/ C
// randomize the order in which the bugs actually run. J* a# K# {! ]) D
// their step rule. This has the effect of removing any; \8 ]- d) j) R* N, r+ |0 A
// systematic bias in the iteration throught the heatbug
1 B( y) ~8 R- a // list from timestep to timestep
2 T4 Y2 K5 e7 m
+ u# E; Z! F# M1 U* d // By default, all `createActionForEach' modelActions have
4 C' Z m# l5 G+ t& o# { // a default order of `Sequential', which means that the
9 Y4 K$ _; x- G; \$ ^% |& E // order of iteration through the `heatbugList' will be
# u1 L; f, Z. m" S // identical (assuming the list order is not changed$ B, Z" h3 W' f( j7 q! _& i
// indirectly by some other process)., G* h) {( [1 \; \; X; J9 _7 c% _
9 K; M1 y* a7 J modelActions = new ActionGroupImpl (getZone ());# n% f3 ^: Z0 @$ D+ B `
; d0 P0 P5 O8 V* u N) ^7 o/ T' R
try {# k+ S) }7 n7 }3 D9 k3 i$ k
modelActions.createActionTo$message+ m* c/ q$ d0 K
(heat, new Selector (heat.getClass (), "stepRule", false));9 _" A: ^' i6 ^ r: O
} catch (Exception e) {
% C/ T1 a) r' U6 [ System.err.println ("Exception stepRule: " + e.getMessage ());
0 C6 I! X; P n7 d: d* m/ w }& e1 h) H' N% ~, t" Z( ]
9 T t6 ?) G! ^3 e/ y try {
9 l \7 s4 h7 J# M0 @5 G8 ~8 R V Heatbug proto = (Heatbug) heatbugList.get (0);7 B; O7 F* ^* [ p7 t' g
Selector sel = ! G0 K/ L& {. K6 h7 {3 M2 P3 n; i2 N
new Selector (proto.getClass (), "heatbugStep", false);
m* F8 I" G& U9 D+ J! x: P actionForEach =
~* N9 _9 }3 k" Y8 @ modelActions.createFActionForEachHomogeneous$call
- Y0 o8 a2 t5 J" H, u (heatbugList,
$ K5 k3 P* n9 n$ j new FCallImpl (this, proto, sel,
* }" N( v; `4 s* F% c$ T: r7 q new FArgumentsImpl (this, sel)));
% g, C8 r6 m; q( R } catch (Exception e) {
, ]! G8 R d4 X e.printStackTrace (System.err);7 b- E6 c4 n% f' @1 X
}
0 d1 i& a9 D( j! w4 f6 m/ S& g% t2 h 9 r* n& p/ {2 Z4 k* D5 W5 }! F
syncUpdateOrder ();
) j; I0 |5 o3 t& v; y0 K3 E
: I" R) ]+ n& G$ q try {
9 K: k# Y! O- a modelActions.createActionTo$message
2 `1 U6 W% W& o) ~; f% h- a" } (heat, new Selector (heat.getClass (), "updateLattice", false));
/ Y; V! [# R* V8 e+ U% y } catch (Exception e) {' D1 a. O/ N. t
System.err.println("Exception updateLattice: " + e.getMessage ());
; ]( Z( M& p7 j4 S$ M }
7 y& z7 @, a: a+ m" y7 |3 N / K1 _9 h5 W; G& z) o$ j
// Then we create a schedule that executes the
2 v3 Z+ Y% U) L# B) K5 b // modelActions. modelActions is an ActionGroup, by itself it
# Q0 V6 a" X! T$ n9 ] // has no notion of time. In order to have it executed in) _& y! K, u& L& A
// time, we create a Schedule that says to use the/ [ d& p. E x: h
// modelActions ActionGroup at particular times. This3 W, b( r) z4 Q1 ~
// schedule has a repeat interval of 1, it will loop every& J5 m G! {1 F! _6 {
// time step. The action is executed at time 0 relative to W& r5 X; J* G$ t0 H3 R/ {, c
// the beginning of the loop.+ p6 T; [2 j, @+ j. H2 r# I6 \
: Q/ l4 I3 v6 f; c6 n+ c
// This is a simple schedule, with only one action that is) M7 `. @% S" q
// just repeated every time. See jmousetrap for more( \7 P+ E( i7 k. V
// complicated schedules.
: ?+ o7 d- f3 o
/ a, a1 s4 X3 v! \+ q" O7 t' f modelSchedule = new ScheduleImpl (getZone (), 1);
2 f8 q6 |0 R/ G1 g. k- @3 s modelSchedule.at$createAction (0, modelActions);
- u2 G- S$ b/ |5 B6 W; F! [ 2 ~8 `( c' r" |! `0 C* T
return this;
) U! r W3 M9 Z' @ } |