HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 h& _; f7 W& i2 a, [( p
" Y4 J: R1 O6 k( y
public Object buildActions () {
# a" A; u% Z3 K9 ]3 [* v& h+ ^ super.buildActions();
5 n: m D! g: z S9 n' x8 {! P : m: V2 j- ?0 Y$ @7 E5 \% E
// Create the list of simulation actions. We put these in% i! S5 R$ F, ^1 d K
// an action group, because we want these actions to be
! l! I8 Z4 V: O/ K* k3 D // executed in a specific order, but these steps should
$ h9 Z0 B8 w! p // take no (simulated) time. The M(foo) means "The message1 A- H! J, L% u
// called <foo>". You can send a message To a particular
- M7 ?/ B o; A! t/ v // object, or ForEach object in a collection.
3 ^& z: a3 q9 s
* N2 X H0 Q5 p# d" Q# n+ N6 H3 a // Note we update the heatspace in two phases: first run
& I$ J" e/ t1 l. b8 | // diffusion, then run "updateWorld" to actually enact the
/ f+ z, p: `4 H" [" A // changes the heatbugs have made. The ordering here is
$ Z; V3 @9 d; y) @8 { // significant!
/ L% {, j7 q! v2 a' \: v' X" k 6 u- l3 S$ I, c
// Note also, that with the additional6 f! d1 w7 {6 J6 S& q& s% D" c
// `randomizeHeatbugUpdateOrder' Boolean flag we can" j% F4 |; V& ~2 o
// randomize the order in which the bugs actually run# A z+ ?% B4 d- V4 T0 I# Z
// their step rule. This has the effect of removing any
2 f$ }3 E# s, K& k' b3 ?; d // systematic bias in the iteration throught the heatbug0 ]5 y2 z. n# c: d
// list from timestep to timestep
- F, r; V( r+ Y6 E. t 0 {6 Q- S8 a, p4 ^# v+ j
// By default, all `createActionForEach' modelActions have4 s5 ]. ^ i3 F
// a default order of `Sequential', which means that the
7 Q" j- h8 h- h* @! R! U // order of iteration through the `heatbugList' will be
2 c5 {" N) A7 s- l3 V o1 C# q // identical (assuming the list order is not changed
$ l& S& f* y( ?7 K" H8 y/ B // indirectly by some other process).. l, v6 h/ a$ b1 N, B
c" t0 G' Q+ q$ Y2 e- ]7 c
modelActions = new ActionGroupImpl (getZone ());& H) x; w2 m3 i, _& @+ D
6 M$ w" [! d, `7 {9 H
try {
: L, z9 G; r% p, U( {2 \9 u modelActions.createActionTo$message
4 J4 J9 s( w4 n; U (heat, new Selector (heat.getClass (), "stepRule", false));
* [4 F" \5 h0 o1 M5 [/ T } catch (Exception e) {8 p" S# W+ B8 s/ `4 l0 h
System.err.println ("Exception stepRule: " + e.getMessage ());( l7 t( K3 L: v* k6 ]5 S
}
( C* I5 K- m$ R: p8 u" C/ c. h7 Z
try {. p! x1 \3 h3 K5 a
Heatbug proto = (Heatbug) heatbugList.get (0);
9 U% Z1 j2 C7 p& z Selector sel =
; @# u& ]* C; K, R2 \) `1 u new Selector (proto.getClass (), "heatbugStep", false);, ?4 ]" E& k) K- {9 V
actionForEach =
. i7 }2 }8 h p; ]2 Y% { modelActions.createFActionForEachHomogeneous$call0 X4 B( M/ x+ y$ M3 m" }
(heatbugList,# p! H! A$ E8 W( g* e0 [
new FCallImpl (this, proto, sel,
$ C0 v% T- n9 I# a6 |6 O new FArgumentsImpl (this, sel)));5 }4 f9 S- S2 f i: W; q
} catch (Exception e) {
6 n. Q l6 v0 W6 B6 A' W+ { e.printStackTrace (System.err);( q: d- r, `- [+ F
}& F2 Q/ q: B# W$ R; D4 h
5 ^6 P2 m+ _( }+ \+ {9 g' ~
syncUpdateOrder ();3 ?7 @6 Y, v* X! w9 ~, X6 E
6 J/ f" i+ ^! k$ C" Y& b" z7 G( }
try {
9 o. R/ ^/ i" x9 A modelActions.createActionTo$message
* d8 E! ~; U" I( B0 z (heat, new Selector (heat.getClass (), "updateLattice", false));' _) R1 z w7 T
} catch (Exception e) {6 @& T% b1 |( ^) M6 x" Q
System.err.println("Exception updateLattice: " + e.getMessage ());
; @6 }6 H) o# T3 {0 c }
t+ g+ v8 r0 g$ V2 g 6 B6 L" H% @- n' k4 T
// Then we create a schedule that executes the& {8 p" f/ @ w) s: C2 Z! F
// modelActions. modelActions is an ActionGroup, by itself it
* r9 O* U- ?3 d# o7 s* w) j // has no notion of time. In order to have it executed in" l3 A/ H K1 I+ h5 v; W
// time, we create a Schedule that says to use the
; y+ y; Y9 }4 C `5 ?7 P( x5 t // modelActions ActionGroup at particular times. This. f7 u* q) T7 L" a1 G/ u4 p* v0 }
// schedule has a repeat interval of 1, it will loop every
4 B0 i0 s) s( s5 ^5 C // time step. The action is executed at time 0 relative to
: B9 K- m' E3 y" s; T, @2 H // the beginning of the loop.
# x6 o: D/ ]& F; l& c M# M" b) i% \- b1 ~# _9 }
// This is a simple schedule, with only one action that is
, v1 i2 F4 `& S, t // just repeated every time. See jmousetrap for more) ?0 [* }# J& F2 K
// complicated schedules.' E/ U% S* S& d
. y* T" i# X/ U" h8 T modelSchedule = new ScheduleImpl (getZone (), 1);: d& Y. I- D4 i) V; `
modelSchedule.at$createAction (0, modelActions);! ~$ a+ {% t( F' g- w
& V, D. f* Z) Q5 I% P4 @
return this;7 h! c' ^( p5 [1 K5 @+ K7 ^( E7 n
} |