HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 U4 N6 s/ H) _9 O
+ e! F" h3 K5 j2 s. s
public Object buildActions () {; {. T3 f5 C3 a* [! u n
super.buildActions();
- ?; W) l5 ]9 }% i% J $ M" R9 q4 H# ]) `7 H1 N6 }
// Create the list of simulation actions. We put these in; d) f$ D! b& O2 d3 g) i# |
// an action group, because we want these actions to be# [* t6 S$ P2 _' [1 {8 n7 A
// executed in a specific order, but these steps should
' P5 j9 D5 R7 F1 d- } // take no (simulated) time. The M(foo) means "The message' i# e. F `1 Q% Y
// called <foo>". You can send a message To a particular" n9 J2 n, P0 {
// object, or ForEach object in a collection.6 O- G2 q8 }9 H2 _
5 E9 `, E5 e! `3 z
// Note we update the heatspace in two phases: first run! K9 |3 B, R- L" T _8 n
// diffusion, then run "updateWorld" to actually enact the
7 T, |7 K7 @* {: F$ c) E) E6 h // changes the heatbugs have made. The ordering here is
/ u8 s5 p' G. @* @. N- G // significant!3 R5 G# J% g9 P4 z9 \
) ? l8 V7 ]( W/ `$ C v
// Note also, that with the additional6 t/ i' P6 a/ G7 a/ [, ^+ |
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 Y" A. U! @# A1 d
// randomize the order in which the bugs actually run8 x3 S. W4 c0 A0 n; \7 V% [: V' n
// their step rule. This has the effect of removing any5 _: M; G' ]* b+ J
// systematic bias in the iteration throught the heatbug
: D; ~9 y; L W9 q) t2 ]: g // list from timestep to timestep
. c- y( ^& k$ ]( A2 }
, C p: W5 u9 M" v- y // By default, all `createActionForEach' modelActions have! B0 u& {0 t0 I Z" N7 }
// a default order of `Sequential', which means that the
$ o: O( {4 s6 d // order of iteration through the `heatbugList' will be
8 T" Z5 s: p# i/ H // identical (assuming the list order is not changed& v/ x% i! Y8 k, T W
// indirectly by some other process).5 o ?! \. q4 X9 x& i( O
1 v `8 J: v3 q4 ^* x modelActions = new ActionGroupImpl (getZone ()); Q8 c4 T' j1 v
% z2 s% D1 f h try {
8 t$ b$ o# b% Q3 e* y modelActions.createActionTo$message7 G5 N$ U. ]; N+ [
(heat, new Selector (heat.getClass (), "stepRule", false));' h: `& m& t( ^! S
} catch (Exception e) {
1 h" {4 ~' Q! X1 |) V3 i# P8 ]7 | System.err.println ("Exception stepRule: " + e.getMessage ());8 z$ Z. w1 S# e7 t8 T1 Z
}
0 `# ~3 W! Q* w; _2 ?: D' S
X, {! o$ `$ I( h! D6 L) o try {) ` T" @9 \: l3 |( u: R+ L4 x
Heatbug proto = (Heatbug) heatbugList.get (0);
, G1 b; `3 R) `5 c Selector sel =
# z: {: J& o8 {3 p new Selector (proto.getClass (), "heatbugStep", false);. a' s5 V" p* k. R3 S. w# o& t
actionForEach =& J% s* a3 w6 [, c( q. |
modelActions.createFActionForEachHomogeneous$call5 _$ |7 c. C/ p/ n/ `% u$ |, W
(heatbugList,- T' A6 i, Q4 \4 K u% G" K
new FCallImpl (this, proto, sel,
1 V# S( l* k: a- s7 m new FArgumentsImpl (this, sel)));. e8 O0 I' D* ~7 H3 ]: u
} catch (Exception e) {
1 J$ T h0 m1 f! |$ A" v e.printStackTrace (System.err);: z+ F9 o$ V3 y
}
$ f1 ^. W* r5 J+ V9 U, T A3 \ ' G3 [% i6 p# D( C6 u
syncUpdateOrder ();1 J7 ?1 s/ K$ L) L
" d) k$ {/ O6 m, W$ `# y try {
$ `8 u2 a' w Y- y' v; y( _ modelActions.createActionTo$message
+ i& r' H& n$ h/ ^6 L (heat, new Selector (heat.getClass (), "updateLattice", false));& E! y- J$ J8 t; B, c! K- p
} catch (Exception e) {
b% l" a2 T; {/ ?. g* l& X System.err.println("Exception updateLattice: " + e.getMessage ());+ z* w- o7 t" J! Y* }0 s. w2 q
}3 Y. N, O* @. u
2 {- l* v' K/ }. D5 ^* R4 | // Then we create a schedule that executes the; X' i( _$ a; L% J
// modelActions. modelActions is an ActionGroup, by itself it5 b4 Q4 k0 w; B. B! s$ l
// has no notion of time. In order to have it executed in9 L+ h$ @* K0 Y/ o# n9 ]
// time, we create a Schedule that says to use the H! M0 k( n" X; P! J' b* k
// modelActions ActionGroup at particular times. This, U) c4 s! q3 j g. P" P
// schedule has a repeat interval of 1, it will loop every3 I4 P! x" d( f, u6 R' a% ]
// time step. The action is executed at time 0 relative to
3 `# k0 t- z: T( l4 z( Y9 W$ k // the beginning of the loop.! d9 L) O) p9 M# M
1 ?" D. X1 ?7 a* A: q* m. N // This is a simple schedule, with only one action that is( B0 ]5 X8 [$ d8 }8 o2 `- ?
// just repeated every time. See jmousetrap for more+ p% ~: j; u6 l+ l# ~: ?* [
// complicated schedules.9 S- |4 \. t0 W
( M8 ]3 e2 h u8 s2 U; G9 X. f modelSchedule = new ScheduleImpl (getZone (), 1);
/ I) d& \; P8 [# G8 j; I; Y- L modelSchedule.at$createAction (0, modelActions);
7 i& ?/ z( a% U$ B
# c3 @( A o+ R7 R: |1 e; y return this;
- e. r. ]7 k3 u. q } |