HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" Y4 p3 c" e! k, F4 V/ ~1 @( M% A
$ I* j- d* ?& v9 @7 Q9 y d public Object buildActions () {
3 l# x, I& W1 O o. B super.buildActions();
' W' [8 I; k7 F8 n * `; A0 c# w* Z8 X
// Create the list of simulation actions. We put these in
/ e$ K$ K- R, Q0 n7 Y$ G# v // an action group, because we want these actions to be3 K/ Z) S* C$ G; l
// executed in a specific order, but these steps should
9 Z1 t- p6 U+ q: S // take no (simulated) time. The M(foo) means "The message
: ]& I" Q8 H. P! b) G // called <foo>". You can send a message To a particular
/ W5 G6 n9 c0 c6 M9 V, r // object, or ForEach object in a collection.
. x& C- c* L2 m8 u: C , e& y5 `: c5 Z }8 p3 N5 b2 q
// Note we update the heatspace in two phases: first run# b/ |1 H) ~6 s. A
// diffusion, then run "updateWorld" to actually enact the! H0 D9 ]8 d3 O+ ^# K- h
// changes the heatbugs have made. The ordering here is
0 Z/ X# P) X% V% g // significant!: Y( Y) d3 P2 m, G
; G) r/ q- [9 Q7 w* O/ I! u
// Note also, that with the additional$ }0 [" D! b& ]: H+ k4 g% j( P
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- ^2 K& d# m/ K // randomize the order in which the bugs actually run& B. m c5 a5 b0 x) c
// their step rule. This has the effect of removing any
f* D I# n8 k: e& H // systematic bias in the iteration throught the heatbug
8 n- M: B8 Z1 c* a; R9 X. Y" I, j // list from timestep to timestep
4 Z t- [, Q" j8 s, R % N2 U3 z1 r. x: ^8 Y0 E7 Z" o; J
// By default, all `createActionForEach' modelActions have9 M7 G# w" D5 u# O
// a default order of `Sequential', which means that the; n6 I: h: V$ k4 H
// order of iteration through the `heatbugList' will be
! m$ V- a3 y# _ // identical (assuming the list order is not changed+ F# R s; r$ v' D2 {, t
// indirectly by some other process).2 b3 j, `8 `1 i/ d: B" e# N( G
% ^2 n" q3 C5 r/ |2 ]8 X1 N modelActions = new ActionGroupImpl (getZone ());
, L. p7 x1 L# U* J0 V' z# m l* z7 q& v: M6 S
try {5 P4 J& O0 j" u+ y G
modelActions.createActionTo$message
. o. y6 ^. P% |% |$ Q P# h. o (heat, new Selector (heat.getClass (), "stepRule", false));
/ K& Y& l" c+ F$ @$ d' [; c } catch (Exception e) {' S: s( R. X: h' F7 a/ P' ]
System.err.println ("Exception stepRule: " + e.getMessage ());( }3 \0 C4 G' M3 S& Z$ J' h" x
} r W" c( Q; \: e& A9 h
, r. K5 ]- H% x/ ^7 [- m
try {
, A! M& @5 c; n* h/ f Heatbug proto = (Heatbug) heatbugList.get (0);3 Z3 D* }5 p' t/ b
Selector sel = $ O% ]- V' ^$ @& H4 n" c0 i
new Selector (proto.getClass (), "heatbugStep", false);3 T$ X* T- i5 ~1 \6 \* Z. l
actionForEach =
$ v1 m: W2 E# F ] modelActions.createFActionForEachHomogeneous$call! f2 W" b! c& F& k1 U5 p
(heatbugList,4 P6 {/ O5 F9 R5 y
new FCallImpl (this, proto, sel,) H9 z( k- S2 T8 n/ t" R
new FArgumentsImpl (this, sel)));
5 L1 {+ ]! i) r- [ } catch (Exception e) {
' I! ~7 m ] H0 a% D e.printStackTrace (System.err);! Z" O0 g* Y8 i7 \3 |# V
}; ]) r8 h9 Y& D3 Q
- N- V8 x6 H6 s0 W9 O+ _' _: Y% D
syncUpdateOrder ();
" a) i* L0 s3 |% |* z" c, ~
2 L/ N. v( a ^ try {
u |# L1 A7 d& M1 f s modelActions.createActionTo$message
) [( x- N% A2 l: Y3 y2 Z5 y (heat, new Selector (heat.getClass (), "updateLattice", false));" I+ r. w) r9 x+ s
} catch (Exception e) {" K9 k0 o5 [) f/ L7 E
System.err.println("Exception updateLattice: " + e.getMessage ());, p& _& B- I; q9 ~6 j1 h4 M& F
}( H- m9 Q# ] A
) L }4 k/ e; ~3 B' A% ~
// Then we create a schedule that executes the7 w! }/ }9 M2 w+ O! V6 a( K" ~
// modelActions. modelActions is an ActionGroup, by itself it1 Z% h: Y) ]% f" L4 @7 d
// has no notion of time. In order to have it executed in
" K5 s$ C0 D& R& t6 y) V! y // time, we create a Schedule that says to use the
& l8 s; }- M8 i$ g3 [. w8 c // modelActions ActionGroup at particular times. This3 Z$ Q i) w& s! t: c
// schedule has a repeat interval of 1, it will loop every
* Y; s/ x! O/ H0 C // time step. The action is executed at time 0 relative to
& W2 e( K5 p+ t( [: E- S$ t // the beginning of the loop.+ d( y: Y; b3 s( Q, |) t: X
9 R0 B3 E, ? u" p. V7 E; X
// This is a simple schedule, with only one action that is5 Q. n' `) i& l5 ~# t0 e
// just repeated every time. See jmousetrap for more. \0 M; n) I" D$ d" D
// complicated schedules. y8 Q8 |7 o5 o$ ], a. K8 j
( R: V% V3 u0 J. F! v, d
modelSchedule = new ScheduleImpl (getZone (), 1);
7 A5 M5 v2 {0 J" i' U8 P ^ modelSchedule.at$createAction (0, modelActions);
. e6 F% @& H F" c, N
) C% K' J G k1 W% m, [ return this;
% i5 @5 W6 S: E, t. q } |