HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- t% ~) N7 z3 L( @+ V% h1 r
V# D) T% u6 ?3 ?+ [: m! ` public Object buildActions () {( H! h! x# T% ?9 n: P9 m
super.buildActions();# k1 d8 |: U7 [3 \* a
1 Z5 k6 H3 `' C/ M, o7 F // Create the list of simulation actions. We put these in5 B4 T' [ d' E& h# k
// an action group, because we want these actions to be
4 E9 e' h( o# V // executed in a specific order, but these steps should, e1 V- O3 q! |. e
// take no (simulated) time. The M(foo) means "The message: |3 A x. I' Z: O" l, y) B) I
// called <foo>". You can send a message To a particular
r6 Q m% ?& d( v: h7 i // object, or ForEach object in a collection.8 o' H( D3 p5 X5 P ~
: ^: L: I% n ]6 s // Note we update the heatspace in two phases: first run
+ X$ S/ Q4 R) `8 E O7 Z9 | // diffusion, then run "updateWorld" to actually enact the
- E1 y: D5 L, t7 G: y9 C // changes the heatbugs have made. The ordering here is
9 x$ [6 `! T5 C% _( X5 r: u // significant! @6 }1 d- J! d: p! n7 G
' ?. e% j/ o& c- G5 N r
// Note also, that with the additional- k/ {, ~' m; n
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 h1 E; O7 c9 [5 g- G
// randomize the order in which the bugs actually run
( F$ B- E! q. t" o2 a // their step rule. This has the effect of removing any+ `3 P, s0 f1 F/ a
// systematic bias in the iteration throught the heatbug# d. `' Q/ z% q$ T3 _! G/ W
// list from timestep to timestep: N# h/ K' i N
[& p% H5 ^8 y1 }
// By default, all `createActionForEach' modelActions have& M- I0 @2 ?7 t' O
// a default order of `Sequential', which means that the
3 \- U$ J, ]$ k: e; B1 S // order of iteration through the `heatbugList' will be, e5 w- y5 z5 {' G; B+ L' z
// identical (assuming the list order is not changed1 Z+ D; q- h n$ o3 ~% t; N
// indirectly by some other process).6 S* @/ x4 U+ ?
* ~. Q6 q$ t6 N- e modelActions = new ActionGroupImpl (getZone ());, C# N- d9 w! ]5 @& K
) r6 X# w' A) C5 N
try {
3 E$ G5 a6 l5 P. L4 l+ Z& D/ @: Z modelActions.createActionTo$message
# G- _! H/ f! d (heat, new Selector (heat.getClass (), "stepRule", false));
3 d" l4 ^( s0 W5 [0 @4 D$ @ } catch (Exception e) {+ Z5 h6 J, e* P; f% {) E
System.err.println ("Exception stepRule: " + e.getMessage ());' W0 ~0 L: y y3 `2 Q/ {1 t
}
1 y( S& Z4 w) R' j1 W) x2 |6 Z, D' Z) F
try {
5 ^* D. D7 x1 H* @" ]5 _# @ Heatbug proto = (Heatbug) heatbugList.get (0);
6 p9 Z+ w$ ?* ^, @8 p+ L Selector sel = 2 ~# y. _# e6 u9 h, o! |' y
new Selector (proto.getClass (), "heatbugStep", false);
; _7 n8 Y2 M6 O3 e( y( c) r actionForEach =
, u4 ?# N5 L) `+ a! p3 D9 ^ modelActions.createFActionForEachHomogeneous$call7 t! z! k, G. m( F
(heatbugList,: C7 a9 u. h- ?3 i
new FCallImpl (this, proto, sel,- f% K: Z7 |' R9 x
new FArgumentsImpl (this, sel)));" e' q3 O$ i+ K
} catch (Exception e) {) x& W; {7 a8 w8 n6 d6 Q4 w: H
e.printStackTrace (System.err);
' L- ]5 u& j- @. ^6 y; L( Y- R }* e9 R+ I i$ h$ ^0 l+ U
5 E5 Y I4 G' u
syncUpdateOrder ();" X3 d& T& O5 f9 n6 S, C- R+ W
$ A) o; y# L8 ~: ~% ?9 \; s
try {
4 m/ e( b4 d% Z modelActions.createActionTo$message ( f* c! s8 q: B# s3 j
(heat, new Selector (heat.getClass (), "updateLattice", false));' @7 \5 D4 e8 C) R
} catch (Exception e) {
6 e; v5 z! P/ h. R System.err.println("Exception updateLattice: " + e.getMessage ());
4 y& E+ U* q$ d# i" } }1 C n3 F- I4 q. x
2 D4 _$ l3 v9 o9 n // Then we create a schedule that executes the
# a o4 W3 v& o* }/ _ // modelActions. modelActions is an ActionGroup, by itself it
2 J7 a; O$ {, ~: v3 n0 [6 x6 l // has no notion of time. In order to have it executed in+ R' b% z3 W- f
// time, we create a Schedule that says to use the5 a; R+ I9 X6 H1 L1 u) w1 v# I
// modelActions ActionGroup at particular times. This
) |0 d2 C5 R3 q7 V0 A( p // schedule has a repeat interval of 1, it will loop every
" |" f" h; Q& b/ v. p+ E, Z // time step. The action is executed at time 0 relative to
2 f& M3 J9 t' G3 o$ j) [& P4 [% s+ W1 P // the beginning of the loop.
) z9 k5 e" D+ w' M) k! W/ j. ?; Q& P% H" a/ b U, n
// This is a simple schedule, with only one action that is
) S' P- U0 @% B+ S$ Q8 F+ G- G$ O // just repeated every time. See jmousetrap for more5 z$ y$ ~' N* l
// complicated schedules." Y, k& F8 Q. {/ a
9 V2 _4 B8 ^+ Z
modelSchedule = new ScheduleImpl (getZone (), 1);
$ W1 w' n5 e! g/ S modelSchedule.at$createAction (0, modelActions);
9 B' Y# G5 f* d0 t5 `/ g2 }
3 ~0 f$ c: J! ]6 q return this;
+ F/ \& Y2 ^7 `/ y } |