HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( C$ x* x& [# N: G* Y, W; ]$ Q C! y5 L, }1 K
public Object buildActions () {
* ?% o# w* s4 V5 \ super.buildActions();
) s$ D8 o s' }5 F$ Q 8 B1 o) D* H( V
// Create the list of simulation actions. We put these in7 k. X: |% \) y* {
// an action group, because we want these actions to be
' s" |( S J/ m; m7 z" \3 \ // executed in a specific order, but these steps should' L* ]7 ]5 _8 Z: ?+ i8 @5 m6 e0 u
// take no (simulated) time. The M(foo) means "The message
, K0 ]+ v3 [+ [( V! G // called <foo>". You can send a message To a particular
, r+ Y( a8 y. q // object, or ForEach object in a collection. J# E$ I( J+ E% B& q4 ^! q+ U0 ]; P
3 U: y7 ]& b" ?4 f( i$ E
// Note we update the heatspace in two phases: first run
. o# ?% S6 S/ s+ U: J w! K3 Z // diffusion, then run "updateWorld" to actually enact the- K" l6 _( i) L: _% q9 ^
// changes the heatbugs have made. The ordering here is2 [& L( M, T5 i3 o. `* s5 c9 _
// significant!
" Q, d( w3 B* o
u5 L8 r {/ g7 o1 j // Note also, that with the additional
, w& q' L& o, g4 `3 s5 W4 | // `randomizeHeatbugUpdateOrder' Boolean flag we can3 y4 Z. k4 ~8 R8 y0 E& J
// randomize the order in which the bugs actually run/ a: l9 _; j U7 ~
// their step rule. This has the effect of removing any1 j2 K; O. f i2 G; W7 p
// systematic bias in the iteration throught the heatbug" Z9 B: y6 D3 R9 T
// list from timestep to timestep
E( G: W. H' w8 v+ z# @5 Z $ B' L/ }7 C* k5 T6 U. s
// By default, all `createActionForEach' modelActions have
( M o- t- w! B" @, L0 C" S // a default order of `Sequential', which means that the
7 P$ h) ^! u& G0 C4 G @ // order of iteration through the `heatbugList' will be
3 I2 _% W5 q, W; f( g // identical (assuming the list order is not changed% K, F q7 {; L8 u" u" V
// indirectly by some other process).8 Y4 A' q( W, }6 b9 x i
2 G6 s: R. N! Y4 \# D9 y
modelActions = new ActionGroupImpl (getZone ());7 ^( O7 T( u6 i9 n! P5 ~0 ^
% Y$ V& c' L# A4 L6 O9 e try { U3 R/ {5 H# h! }# l: y7 F9 M
modelActions.createActionTo$message
$ F( O+ z) v$ i# ]$ R# }/ N- \ (heat, new Selector (heat.getClass (), "stepRule", false));1 S. I8 S q; P( g6 s
} catch (Exception e) {+ @2 z; `' X+ o4 X5 D/ Q
System.err.println ("Exception stepRule: " + e.getMessage ());
/ D0 u! u+ L& A% }! `$ d }; _: }/ E) I4 d) W
1 E2 K8 x* B6 A5 q: A
try {
& q# `8 Z G" g Heatbug proto = (Heatbug) heatbugList.get (0);
4 x8 p$ e$ _1 y, Q8 k s: y' J" K. W* I Selector sel = / ?5 U& i: p0 p- v' T/ @
new Selector (proto.getClass (), "heatbugStep", false);
/ W, H3 ^: G( `( ]: z0 ? actionForEach =
# x7 d: ?2 i) f% {; L modelActions.createFActionForEachHomogeneous$call5 L5 O1 l3 j: f) i% i& O- h
(heatbugList,
I! g7 N7 G0 E ?: J' L, R: L new FCallImpl (this, proto, sel,/ Q. N) s0 U0 h9 S& G1 V. c; e4 j
new FArgumentsImpl (this, sel)));
F1 @& z. t# P8 d* f3 q } catch (Exception e) {
" d2 n+ [% O/ K# ~2 z e.printStackTrace (System.err);0 p1 r1 v( I+ `9 R" G! H$ R
}0 v2 S# ?- y. W0 F9 t& N+ E1 \. y
6 ^( e( O o+ [- E
syncUpdateOrder (); ^1 s' ~0 A' `8 o4 r. G! j
$ t7 M6 u" O, D Q" Z
try {
* s0 Y1 c) F% ?1 S5 M6 @4 F/ U modelActions.createActionTo$message
) Q+ k. o% |$ J- s H' U4 o (heat, new Selector (heat.getClass (), "updateLattice", false));5 A- D7 h2 z1 p. j( Y6 c
} catch (Exception e) {
, A- D Q3 V" r0 R( G, l System.err.println("Exception updateLattice: " + e.getMessage ());: p4 k! _6 N7 D6 {
}
9 y8 K9 P2 C, }0 L% {
* z r; N$ z% m0 s! D // Then we create a schedule that executes the0 A" c( `; a# F+ K
// modelActions. modelActions is an ActionGroup, by itself it/ t) V' B! M. J
// has no notion of time. In order to have it executed in' d( [. r) M$ J* b0 L+ Z
// time, we create a Schedule that says to use the" S/ U( p* z0 x" {
// modelActions ActionGroup at particular times. This9 C. Q7 ?( A) ~
// schedule has a repeat interval of 1, it will loop every3 L+ {4 C( J9 D0 s/ a
// time step. The action is executed at time 0 relative to
' G; l# C9 I* @. q // the beginning of the loop.: j [; M2 D/ q4 T
. L& x- T( X* ` e! J
// This is a simple schedule, with only one action that is
) y/ M- Q' ?% G. L7 b" u+ q // just repeated every time. See jmousetrap for more ~* f6 V I! ~7 W1 U
// complicated schedules.5 W2 L' q2 \ s5 ~
) C6 h- m+ e9 j' q, H
modelSchedule = new ScheduleImpl (getZone (), 1);' d j, k; V0 f$ |
modelSchedule.at$createAction (0, modelActions);
8 w3 O ?6 ^6 c/ c8 A2 E6 A
. r6 j& o8 I4 y& C) B return this;
& m# P/ O! o$ u1 z- m } |