HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: L! P9 U4 n! P1 w# C4 z
9 j' i$ X5 C: R
public Object buildActions () {
1 y+ M* s3 O2 r: n super.buildActions(); M* Q! B2 s# Z2 s4 e/ x" ~
% A* Y9 s5 M& e+ @) x7 t
// Create the list of simulation actions. We put these in) d; X) l0 b/ g. D- p$ o
// an action group, because we want these actions to be
" Q' Q5 Q. G: Q& ?, e1 r( i // executed in a specific order, but these steps should
. [. ^4 h5 f# o) y2 I6 y' ? // take no (simulated) time. The M(foo) means "The message. ]6 n! C1 F6 W% O0 p: {
// called <foo>". You can send a message To a particular
) }' H: ?$ |- ?( a // object, or ForEach object in a collection.
! Y3 s; K, T( f# a
9 u3 `5 X* v+ b! ]: f // Note we update the heatspace in two phases: first run
$ d; t: ?: _6 m3 e // diffusion, then run "updateWorld" to actually enact the: l( X$ P! j3 s+ u% ~+ U
// changes the heatbugs have made. The ordering here is$ x( O; b6 t" Z) e0 p1 z* |/ G' T
// significant!
. {$ c$ Z9 o0 U+ M& s2 O
# y2 C2 }! L: g. s6 Z // Note also, that with the additional
, j g4 R( j0 V! o# a% X // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 ~5 W$ i1 k4 l8 a; N // randomize the order in which the bugs actually run) o' [% A! D, ?
// their step rule. This has the effect of removing any
8 Z/ T0 T) p0 k" W/ M* t // systematic bias in the iteration throught the heatbug& ]8 N' J7 }4 K9 S9 C+ |4 p# V3 o
// list from timestep to timestep
% i9 Q1 q. L; t! L ) }: c; j6 H! {& h
// By default, all `createActionForEach' modelActions have
- M- S: C# s6 F& B {3 ~& F- L0 R1 ` // a default order of `Sequential', which means that the
9 v/ x# e8 O: x9 H& \; b // order of iteration through the `heatbugList' will be
7 c9 ~) i7 D9 J ]" Y! x" z! k& c // identical (assuming the list order is not changed
8 o3 f2 u7 m0 J# q. O // indirectly by some other process).8 S; l1 g& v: {9 t( z( B
) g; V$ `$ Y! K# P
modelActions = new ActionGroupImpl (getZone ());
4 n0 J6 S: Z r7 ]2 o
& F/ n; H5 c' Z9 V1 A% s try {* }5 V( r1 O8 L
modelActions.createActionTo$message
* v" Z6 h+ Z8 r( `. E (heat, new Selector (heat.getClass (), "stepRule", false));( l/ i/ ^, Y& V' i# [
} catch (Exception e) {
6 V1 a" C* M2 r# N6 { System.err.println ("Exception stepRule: " + e.getMessage ());- w! d0 t$ L0 q1 Q8 s
}* q* R: W7 I6 [
/ F* `# a( R: _! F8 V# Z, t5 K try {% E! l: ~% t- e* y
Heatbug proto = (Heatbug) heatbugList.get (0);
5 n2 X) Z8 ^6 ?; K! f& J1 w$ }) x5 | Selector sel = ) l, g) M" L" {- i$ w
new Selector (proto.getClass (), "heatbugStep", false);8 f; g$ w7 C- P+ E
actionForEach =- S, e2 l6 a2 c) }. p
modelActions.createFActionForEachHomogeneous$call
" M# B2 R9 U$ j (heatbugList,7 s- {8 D" Z: g9 s8 t1 c) U
new FCallImpl (this, proto, sel,
8 f- l/ L. \% i7 y# b5 c. S( E new FArgumentsImpl (this, sel)));6 k$ m5 c/ `4 C
} catch (Exception e) {
8 |, f1 m. E6 R# C e.printStackTrace (System.err);
& ^6 N. ?8 M5 }) o% Z8 ~9 l }
+ Q2 h( H+ X- n: c; N % i: d' y; y3 O8 o
syncUpdateOrder ();% u! l$ L4 W) W u) ]
" N3 |7 O) S- \1 y
try {0 b5 ^# h! K g* `3 B. B
modelActions.createActionTo$message
8 |1 G- Z& e) _2 ^1 @; X (heat, new Selector (heat.getClass (), "updateLattice", false));
! q* K% k _6 q( n6 l } catch (Exception e) {
) v. g9 z6 Q2 f8 V) K, D! K System.err.println("Exception updateLattice: " + e.getMessage ());/ B7 J( J" f# @' S2 W8 x% A
}
9 Q6 @$ D& t/ `: o" u3 D: ^4 X
) ? V; @' ?6 W0 O- W3 F$ x // Then we create a schedule that executes the4 l" u2 A! z7 q; O
// modelActions. modelActions is an ActionGroup, by itself it0 J" K: W }, G% x
// has no notion of time. In order to have it executed in; F$ G- ~8 B: K8 g5 c6 J
// time, we create a Schedule that says to use the1 n1 q: @, f; \( G
// modelActions ActionGroup at particular times. This, u# D. M6 T8 z. s
// schedule has a repeat interval of 1, it will loop every8 T( z; x& E, t; y- v
// time step. The action is executed at time 0 relative to
5 g" t. m! E) y/ u: Y2 M // the beginning of the loop.& ~! m% Y: F; S$ E3 Q+ f
! R+ h6 T- `7 g1 `
// This is a simple schedule, with only one action that is
% O$ `, w1 F! \5 R; a! n% F9 q2 e // just repeated every time. See jmousetrap for more9 @7 @' @2 Z! X; |- M# ]4 e) t$ L
// complicated schedules.3 i& \' F1 {6 }, v5 U. R
/ u+ Y# J: o, {% @# _$ n
modelSchedule = new ScheduleImpl (getZone (), 1);0 z& s! H6 D) R+ M1 a
modelSchedule.at$createAction (0, modelActions);
& u# Q! n1 n F5 L1 C 3 ~! ?+ d0 r# }4 N* _5 D
return this;
; O% t6 {7 V0 H: a# i" z2 A } |