HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 C4 f5 k/ V' u
" O9 j) B, N. t- E public Object buildActions () {) K" L# ~! D: T) M4 v
super.buildActions();
% B# n- S: y: g: i) B+ b 2 l$ L; k* T: c$ G% k
// Create the list of simulation actions. We put these in& L+ ~ ]+ x# v) @% ~( J
// an action group, because we want these actions to be& }& G2 X Y7 O; p1 K" u8 y
// executed in a specific order, but these steps should
9 h# B- [. ^( ^ `- q$ y6 M+ |+ C) _ // take no (simulated) time. The M(foo) means "The message
% t; o8 O5 V* u4 ^! m0 j& m2 i // called <foo>". You can send a message To a particular
9 h0 G' v) ]) D( a/ ? // object, or ForEach object in a collection.
7 N+ Q$ Y3 D9 z3 `0 y / q, q2 C! }; C; k% y$ i" H
// Note we update the heatspace in two phases: first run
6 b l; Z+ X1 T- r- Z // diffusion, then run "updateWorld" to actually enact the
( }% a4 m- R5 ?/ I8 |* j8 G // changes the heatbugs have made. The ordering here is" H$ }. X& Z$ X8 [+ N
// significant!" F- h Z |6 h2 y6 V5 K. B! W. a
3 {; C& k- F* B, k8 v9 x! v0 b# W // Note also, that with the additional
, l/ l9 O+ Q3 X% {" W( a* M // `randomizeHeatbugUpdateOrder' Boolean flag we can1 e6 _/ \( B8 S7 H7 v. j. P
// randomize the order in which the bugs actually run, T+ c2 P: p# s* H+ N9 |& L! P
// their step rule. This has the effect of removing any
7 q" p0 x( q; ? // systematic bias in the iteration throught the heatbug
- F! n6 F) y6 x' X4 N // list from timestep to timestep F. t h" O( d
; w$ ?: @/ H- v* L3 {6 T // By default, all `createActionForEach' modelActions have
5 i) ]0 [) _6 I: H // a default order of `Sequential', which means that the
8 m9 O5 G% S% c: `, @ // order of iteration through the `heatbugList' will be4 x" h, K( D6 N: K5 m) ]9 e) R
// identical (assuming the list order is not changed
G, s0 H( {; v/ W1 |+ q, ? // indirectly by some other process).3 Q8 q7 ] P+ J: Z* e" v
$ I3 L, _8 y( B1 z
modelActions = new ActionGroupImpl (getZone ());
9 Z; r& R' p& d. `0 o7 J- `& z7 P) N% A9 ?0 s B
try {
) C# {0 k; V T+ Q: S% \ modelActions.createActionTo$message. r5 z7 G3 u* t6 Y) D; H" F
(heat, new Selector (heat.getClass (), "stepRule", false));* d s& ?( B% `$ k; b& z
} catch (Exception e) {6 h) U5 Y3 e6 t+ Z8 V" v3 x
System.err.println ("Exception stepRule: " + e.getMessage ());. d3 o+ h+ P- @& i1 @. k: m' J) y# L
}
, t) K1 m* |* g3 s& N: B1 ]8 O# ^9 C* j4 [( e- D+ r3 o7 ~, F
try {$ f- D- C/ |6 ] x5 w- [
Heatbug proto = (Heatbug) heatbugList.get (0);
; l0 G* g5 D. { B/ V' p# s Selector sel = 7 H! Y, T0 b: t6 c* t
new Selector (proto.getClass (), "heatbugStep", false);
1 o. i0 r" Q* i# e4 q actionForEach =7 G2 O& D; H7 M" S8 m' H
modelActions.createFActionForEachHomogeneous$call& b) T; f, G8 X3 O" Q" e4 G
(heatbugList,4 v- ]+ y* J9 l4 e
new FCallImpl (this, proto, sel,
) o0 h: F& s! ^ new FArgumentsImpl (this, sel)));
1 Y3 O( \/ F% X" L } catch (Exception e) {- o3 [# {( Q& B) k# c
e.printStackTrace (System.err);" e. t8 o: u5 S1 M
}
- s4 c; `& j) \- q, l* e ; W% {& p# u$ v6 P7 `' Z8 V2 z
syncUpdateOrder ();
# `& }9 t2 P& }* i) B
8 M) I/ N% K) R: }1 B* R' c, ?8 f2 r try {
7 u! p& q5 M3 f" N$ s modelActions.createActionTo$message
# T7 s, E, k# C! L (heat, new Selector (heat.getClass (), "updateLattice", false));7 H$ Q! T$ _# b
} catch (Exception e) {$ m" b7 x+ X) Z. P: s& s" Z
System.err.println("Exception updateLattice: " + e.getMessage ());
D' v6 b4 i# }- \: \. n }6 H5 ^5 e3 w& `1 L, I
8 z. L+ z1 E. I9 l. j
// Then we create a schedule that executes the
- P" H/ o2 y9 p3 E // modelActions. modelActions is an ActionGroup, by itself it
( G0 G, h" ^# S) g) |# G! O // has no notion of time. In order to have it executed in' B: d: H8 w4 G
// time, we create a Schedule that says to use the0 Q* q) O( M- B0 E- e; P/ Y
// modelActions ActionGroup at particular times. This( T8 |( Z& q4 M! H7 I/ I0 A( V
// schedule has a repeat interval of 1, it will loop every O" Q K! s5 B- \
// time step. The action is executed at time 0 relative to0 A: L q; D' k7 J/ v
// the beginning of the loop.. [6 e: Z) ^* v, M* K& X6 B
1 l$ z9 P1 i. x5 }1 C9 i9 y% e. q& n // This is a simple schedule, with only one action that is
4 j N4 w" A1 P- w! U. \5 p // just repeated every time. See jmousetrap for more
' B7 z$ B% Q8 h8 ]& R // complicated schedules.% z: y* ]& o$ X, i* M: A! q4 r
. B1 Y: [- L( F+ U3 W/ }! x
modelSchedule = new ScheduleImpl (getZone (), 1);
6 M9 t. t2 ]& i: s$ h modelSchedule.at$createAction (0, modelActions);
5 h7 W' _# R5 `1 x) f, y8 N 8 c3 _- N2 T# W" L6 B
return this;0 d7 Z& E+ r Q* O% ^; K8 L
} |