HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; \3 a9 a+ Z7 R7 D2 v" K) e
. ?' g+ M" N0 M' R) ~: r public Object buildActions () {, T" s" f ^9 ~' T+ ~- Y
super.buildActions();
) m9 E, T; c1 R( v$ N
* X+ c; D& E/ Q, ]& u$ M // Create the list of simulation actions. We put these in' K5 C U. I. ^0 o0 | ?& V
// an action group, because we want these actions to be0 C& K+ M/ I# W- x Z, W5 H
// executed in a specific order, but these steps should
4 e$ C; [/ g5 W // take no (simulated) time. The M(foo) means "The message5 N, v5 N8 w5 d$ K
// called <foo>". You can send a message To a particular& Q) b: @; k( l9 a4 |- G
// object, or ForEach object in a collection.1 `* C* w" O. b% |- M' g
( e1 w# Z0 [- S% {3 t6 ` // Note we update the heatspace in two phases: first run' n6 q3 u' `. \9 v
// diffusion, then run "updateWorld" to actually enact the
- x/ g/ l9 Y5 z: F7 x: [ // changes the heatbugs have made. The ordering here is
3 N, K: k4 }7 |* ~ // significant!4 L" d6 t+ X! ~
6 `) D% ?2 _: }0 }8 Z // Note also, that with the additional
. X( i4 A; D# n& o+ r // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 `7 ^+ g6 H; p6 Z% ?, S // randomize the order in which the bugs actually run
9 S8 d8 F! g' f // their step rule. This has the effect of removing any
: P+ U' r! N/ x // systematic bias in the iteration throught the heatbug
4 P0 p/ ~" e) n- I6 L // list from timestep to timestep7 W6 n! a3 i* X @! r/ h
) S j) \1 `, t // By default, all `createActionForEach' modelActions have6 ^3 j+ b( ^7 _" B9 ?
// a default order of `Sequential', which means that the
% K1 K2 H/ G: \ // order of iteration through the `heatbugList' will be
( J* B" f: J0 ?$ B6 L) x // identical (assuming the list order is not changed
2 D7 T# {: c& X) h1 j! ] // indirectly by some other process).
' B* Z/ \7 k+ W% Z6 ^- @9 s7 Y p1 f8 U, g$ [7 U( E8 ]* w) g6 V
modelActions = new ActionGroupImpl (getZone ());
8 P8 d- B) O9 {* u3 N J+ Z( L8 F4 ~! t5 N8 g! N% D5 [
try {
8 _ K0 V, \# X modelActions.createActionTo$message
J2 J( t; E" h5 w3 y) k. c (heat, new Selector (heat.getClass (), "stepRule", false));: `5 R( i j7 C- g- h) D
} catch (Exception e) {
) \9 f0 g) T; l! ]; E System.err.println ("Exception stepRule: " + e.getMessage ());
3 N m9 }- h6 m; y; Z7 g }
) v S# R0 M X5 Z
! e1 ^1 d3 I! r! z1 k try {
4 o4 w! a9 Z% \: Z+ N5 V- F& [ Heatbug proto = (Heatbug) heatbugList.get (0);& U) w. N$ J; g+ F6 v. r
Selector sel =
7 m; H) [7 e( ^2 P! ~ new Selector (proto.getClass (), "heatbugStep", false);
2 h2 v* D& I' v7 U& H" w actionForEach =+ N% X4 c* S1 `+ f" t1 Q2 l( x) l( S
modelActions.createFActionForEachHomogeneous$call
; g" `0 J- a+ w6 D, a. [8 v (heatbugList,9 U2 ^$ @2 l6 S5 }7 U) ?! S
new FCallImpl (this, proto, sel,
, Y0 l4 l1 S2 P new FArgumentsImpl (this, sel)));
: j& l! [$ }. r } catch (Exception e) {
! g5 y' w5 B3 r/ m1 R m. ?' { e.printStackTrace (System.err);" p. S. @, W% `1 n, |+ [' }4 N
}5 ? ^+ j/ g" p! I6 [
% r" e' M2 H1 x. i! l syncUpdateOrder ();% h! ]8 K4 ]/ o' i0 N
1 {( P1 E. _0 ^) ~1 E: w
try {( Y$ z7 I& k7 H
modelActions.createActionTo$message
% F( u+ h% j5 k+ W* u (heat, new Selector (heat.getClass (), "updateLattice", false));2 y4 u3 V0 f; k8 k
} catch (Exception e) {- ~, z7 N! _) y) B ?& i" w: x0 H
System.err.println("Exception updateLattice: " + e.getMessage ());0 C) P+ c z1 e8 c6 S
}6 o @* S1 C& K. p5 M
# Z) S) u+ E" O7 c* |3 p
// Then we create a schedule that executes the
9 ]/ ?+ J" V8 Y4 ~$ m+ j // modelActions. modelActions is an ActionGroup, by itself it M0 v8 P! ~8 }5 I/ M& Y7 M0 c$ r, F
// has no notion of time. In order to have it executed in4 E4 Z4 h0 y3 {# V3 _0 u& L
// time, we create a Schedule that says to use the- d& a1 ]) d/ i/ S
// modelActions ActionGroup at particular times. This
/ ? H& X. i; g+ s% Q' h; \( V // schedule has a repeat interval of 1, it will loop every
$ g) }% T, G8 B: p3 M, x // time step. The action is executed at time 0 relative to8 ~2 C# @; W6 N" s
// the beginning of the loop.
% @" l' b/ M/ g S) j/ f0 v" { d7 t4 j q/ r& ~/ a
// This is a simple schedule, with only one action that is1 D4 q, R- ~( r* N! t
// just repeated every time. See jmousetrap for more* p+ ^' [" T5 [% o8 ^. G
// complicated schedules." Y, s v; m: b* B
( t3 ?7 D1 u7 {8 |# h+ C& ~' z
modelSchedule = new ScheduleImpl (getZone (), 1);
$ i5 W& w$ v# k) [ modelSchedule.at$createAction (0, modelActions);7 ^8 Q& C# r, y! W
) S% X6 B2 J+ G: R) [' p
return this;7 p- W0 q t" t6 T
} |