HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 y' N) {$ `0 m) R
* F: y( P9 d8 G' U" D public Object buildActions () {
2 V4 n2 I7 V2 L/ G X; [ super.buildActions();# `8 I7 ^, z4 ~/ J2 O: K
* g: R, z' r4 H! }1 ~6 U5 D" |
// Create the list of simulation actions. We put these in. `+ u) C5 A8 L& ?
// an action group, because we want these actions to be. z0 Q8 @! I& D" z/ o3 k
// executed in a specific order, but these steps should
& l8 S# X( d3 l( H% G$ x // take no (simulated) time. The M(foo) means "The message: {; a4 r6 I$ T+ h2 b! b2 m C
// called <foo>". You can send a message To a particular
9 x: E; L4 h! \+ d& p // object, or ForEach object in a collection.8 E. Y8 r+ a u, p2 A. G
2 S3 G" F# M1 o1 C& Y N5 R! E
// Note we update the heatspace in two phases: first run
( U8 f1 j5 @, ~( a, A // diffusion, then run "updateWorld" to actually enact the) U) b1 Z& u8 a. H" a! u# q/ ?
// changes the heatbugs have made. The ordering here is
: Y5 c" O- ]" C' L ~( i& G% t5 j // significant!
- Q3 J& {* ^$ \2 B; s" a5 H8 ?
# J: R" f1 z. G: K9 u+ a' \% G" T4 \ // Note also, that with the additional0 n/ {& z6 ]: j# I" z
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 j+ ]8 R5 e* r // randomize the order in which the bugs actually run
. u4 R0 k' V2 {# D // their step rule. This has the effect of removing any6 y2 ~: L6 I3 @+ i
// systematic bias in the iteration throught the heatbug
) o" U$ W- @# |5 g1 I4 A' b' m // list from timestep to timestep% |# a; E5 i3 p3 \5 B C7 L
% n& X0 b S9 A# l' y // By default, all `createActionForEach' modelActions have- v. ^2 z- ^8 c2 s$ _: n
// a default order of `Sequential', which means that the Z: Y& y- M# e) f, m
// order of iteration through the `heatbugList' will be) Z, ~, k K" O" s
// identical (assuming the list order is not changed. N0 ]' }3 E3 `- {9 ?4 h$ [) n
// indirectly by some other process).
" b' \' _ G/ @+ \ * w- G6 r# Z- j3 M" n7 {" M* f" ^* E, r
modelActions = new ActionGroupImpl (getZone ());3 K, o+ b- g2 H' F% S: O
; @. ~5 N+ e- A* R0 j
try {5 b8 ]9 Y q0 O( {" r
modelActions.createActionTo$message0 ?5 Y9 N% U! g& V# ~ i% k; m/ M5 y
(heat, new Selector (heat.getClass (), "stepRule", false));/ J ]$ \4 g! v" y2 U1 L+ c
} catch (Exception e) {
" L$ k0 G; Q+ ^1 ], E) x$ g System.err.println ("Exception stepRule: " + e.getMessage ());
* A! {7 u; _& y7 b" U: l8 V }. J& T) o/ |- h8 Q: t* B
8 H+ E& l2 Y& I- J4 C0 s% K
try {8 E. u" p& J9 D4 R
Heatbug proto = (Heatbug) heatbugList.get (0);
4 G$ @: m8 ]9 ` Selector sel = " o0 N" _& o/ `4 X
new Selector (proto.getClass (), "heatbugStep", false);
$ i3 E6 i* K% b) D6 ]3 l6 O actionForEach =
" l5 x( B% [( A1 [; }5 O/ F modelActions.createFActionForEachHomogeneous$call( x9 \& e$ g, b1 W c' p( V
(heatbugList,% J* W0 n* V2 b) M/ V
new FCallImpl (this, proto, sel,+ l _3 A/ t# \6 D, d9 T
new FArgumentsImpl (this, sel)));
8 f9 |( s# m/ B7 E! q9 Y$ G* p } catch (Exception e) {
: Z9 h, T7 A* b8 ^8 {- b N e.printStackTrace (System.err);- W. b7 y2 X5 a
}! [+ c- k3 n8 ^: }
. W) T- | `2 @& z; |. l: Q2 l; F
syncUpdateOrder ();: U0 G- V: w3 U" i% m& p$ q3 _
( y4 O; Q* A. Y/ `
try {! d5 o0 [& P1 Z1 D& v
modelActions.createActionTo$message
% B. A) T# W% |9 \0 R3 d (heat, new Selector (heat.getClass (), "updateLattice", false));" l* L) i7 k, p. {' H4 Y& t
} catch (Exception e) {, W% u3 ]; V7 E) w7 A! G$ f6 ?
System.err.println("Exception updateLattice: " + e.getMessage ());' R+ z! P0 X/ g. u& k* r2 e
}( X S4 \) `* v2 C+ `8 r5 K
& o3 @. k8 G5 A8 v6 B- q // Then we create a schedule that executes the3 B6 X& r" t, j5 R. t) G
// modelActions. modelActions is an ActionGroup, by itself it2 u4 ^& j9 M) L' l
// has no notion of time. In order to have it executed in
9 @6 {7 a" m# @$ |- S8 u( c // time, we create a Schedule that says to use the
1 } n* ?8 ~7 V- w0 D // modelActions ActionGroup at particular times. This
. }0 h3 X" k8 r5 P // schedule has a repeat interval of 1, it will loop every6 K x/ [3 [- i/ y
// time step. The action is executed at time 0 relative to
" }: s% u0 \+ o% S! T! ` // the beginning of the loop. [4 s+ g5 W# G# v. r
- H) Q h3 B! k; F% Y! j4 P
// This is a simple schedule, with only one action that is5 `: ]4 ^% e/ Q
// just repeated every time. See jmousetrap for more
- N) N# i; Z3 b' y- N2 ^ // complicated schedules.
! @& w& |: M" G0 ?) m W 5 _3 {/ f) q) [: g. }. F! U% E2 \
modelSchedule = new ScheduleImpl (getZone (), 1);& `3 w; i$ k. w1 R: d
modelSchedule.at$createAction (0, modelActions);+ e$ U9 G9 p+ @( O. x( [
% v0 T; x9 r! Y5 C( @0 x& I* A
return this;. ~( m: ]8 }5 y$ p& y X
} |