HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:& h s8 K! S# S6 }" O8 s; N' m
8 q/ [( K# P9 \+ F, d7 r6 ] public Object buildActions () {
$ N" E3 H+ q2 \$ h super.buildActions();; @9 H) [$ T! V/ U+ x% K) J* h( \
* X1 G4 E8 K& L // Create the list of simulation actions. We put these in
( G) j; a; U! n$ G5 V. J% o // an action group, because we want these actions to be
) C% a: S4 c& J, B1 z5 i // executed in a specific order, but these steps should; _3 l* w8 U8 {" A/ J* k
// take no (simulated) time. The M(foo) means "The message
0 z+ O3 w" o& R- x5 m // called <foo>". You can send a message To a particular: l) n6 G. H1 _
// object, or ForEach object in a collection.
6 m- X: c3 W$ \+ N6 B( R; a
" c, p2 c2 S5 k% c; ^ // Note we update the heatspace in two phases: first run
6 @5 K" Z- E" v8 P // diffusion, then run "updateWorld" to actually enact the
5 v6 R; S7 k+ t+ p% u // changes the heatbugs have made. The ordering here is
. m$ P( G w9 b" P" s // significant!2 ?- `$ X: f) c; I6 {% x
" i& t% Z# j: b2 | // Note also, that with the additional9 `# q5 \% B: @% ~ `! i
// `randomizeHeatbugUpdateOrder' Boolean flag we can% b0 `4 |: M7 Q; l$ O5 M+ L! _; C
// randomize the order in which the bugs actually run
$ Z% \* E }7 R& i+ p c // their step rule. This has the effect of removing any! E' P3 z, A' [/ s
// systematic bias in the iteration throught the heatbug# c1 c; _+ {6 B' D& S3 N
// list from timestep to timestep
3 s; ?' h" n' |# z( O! s6 G7 i # D2 a1 [5 |8 N
// By default, all `createActionForEach' modelActions have
4 Q) ~" `- b! g& J! a // a default order of `Sequential', which means that the/ U7 E$ }* G. ]' N, \$ h
// order of iteration through the `heatbugList' will be
3 ?. s* }9 l' U! L9 o7 P // identical (assuming the list order is not changed
: a2 O* V# _* \ // indirectly by some other process).) Q" H! B$ Y: K8 f, V8 n+ G
( @' L7 u! u& v# H+ ` modelActions = new ActionGroupImpl (getZone ());$ h0 \/ `9 r0 S" [/ X
: Q4 e- d& b" C3 t) L9 [" j
try {% Y- p7 J& [! W% z+ e3 ^* T& E
modelActions.createActionTo$message
$ V8 S0 h5 w, `7 r" F* k& { (heat, new Selector (heat.getClass (), "stepRule", false));
9 G/ @2 F- @9 t! N' g) ? } catch (Exception e) {$ D' \2 [! `2 d) T# i
System.err.println ("Exception stepRule: " + e.getMessage ());
, m/ t9 G& T( |! b+ s }
: y) U1 V s! _6 [
6 O9 _- }! k6 M( O try { d; B r$ k* [7 F
Heatbug proto = (Heatbug) heatbugList.get (0);
' v' q4 Q: F; G# k8 B& b: d3 \ Selector sel = p" B) w. u; u4 Q k
new Selector (proto.getClass (), "heatbugStep", false);. e4 h3 Q+ ?0 c9 V; [ v/ ]
actionForEach =
3 b' p$ ~0 ^% V! P; k' w0 `( U# ^ modelActions.createFActionForEachHomogeneous$call
+ b0 [. `* [( ^ (heatbugList,
9 @( Z- a+ I2 k; T1 L( e. p* m new FCallImpl (this, proto, sel,
$ H# Z; k) J p& u, B new FArgumentsImpl (this, sel)));0 g6 ]8 _: w/ ^
} catch (Exception e) {( h2 u/ }+ Z6 f V; ^: b: \
e.printStackTrace (System.err);
6 M: Q6 e# G: ]6 _4 @0 i }
" E( ~4 i4 k, s( V' S8 T
. s6 L- F, c8 B9 k* u5 O# k syncUpdateOrder ();/ d M' Y4 B! N
6 ?% \8 C/ g7 r0 | try {
9 K& P( e, a0 H; _' [& N$ R' T8 [- o modelActions.createActionTo$message 8 c+ ~/ @ t1 S, Y5 n4 l
(heat, new Selector (heat.getClass (), "updateLattice", false));* B' h! B1 L# R6 x/ h# W
} catch (Exception e) {! O A) n4 g/ B" r0 _8 b8 K6 V
System.err.println("Exception updateLattice: " + e.getMessage ());
" z w6 T8 `) O) v; ^2 t }& Q* l# S5 h6 \ V' z9 P! Q0 R5 O
* p& v0 k; b- ?. d, v, _1 I // Then we create a schedule that executes the
# M' k# V7 a; s: U8 d) ? // modelActions. modelActions is an ActionGroup, by itself it
# l# _; S0 A8 Y9 }0 [ // has no notion of time. In order to have it executed in! x: w f4 }; L! q( M1 P! Y2 c
// time, we create a Schedule that says to use the7 n! s/ l% S2 ?1 y& J L6 N
// modelActions ActionGroup at particular times. This
; ]; T* s8 f2 |$ j6 o" f* f // schedule has a repeat interval of 1, it will loop every
% b. ^ z- \! h // time step. The action is executed at time 0 relative to. ?# n9 J; j) G- _$ |6 L
// the beginning of the loop.
2 [& |0 z$ Z9 W, j$ `# n% m/ a# s& m7 s
// This is a simple schedule, with only one action that is
, `5 n4 _2 f, A2 p6 j) W // just repeated every time. See jmousetrap for more+ Y9 ?% O6 w8 F. j
// complicated schedules.
: W( `$ q" {% C+ m" y' u1 Y( _1 C
I3 j1 P, p, S1 e& a1 [. v; e modelSchedule = new ScheduleImpl (getZone (), 1);# b0 e: y5 q2 {8 q) v! H
modelSchedule.at$createAction (0, modelActions);& {! \9 P/ f7 z8 b& k; R
: C- s1 V* k9 {* h* ?; H
return this;+ j- ^- l" J+ P; f
} |