HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 J l& U e5 h# L6 j
) w2 c. I! i0 w0 }/ l* Q$ C( C
public Object buildActions () {. e& g$ M9 F3 Y; K7 G" Q! _
super.buildActions();
7 c6 Y. E1 H- O3 z) ?+ L
6 J3 P8 O% I9 u# @ // Create the list of simulation actions. We put these in; e% M$ v0 r6 Q
// an action group, because we want these actions to be
' q% z! x ~6 ~ I // executed in a specific order, but these steps should
7 x& r' w" t y, X! S a2 H // take no (simulated) time. The M(foo) means "The message0 m/ x3 E N% e: L: p
// called <foo>". You can send a message To a particular
6 H. z6 r K4 e8 L. g // object, or ForEach object in a collection.. j- P/ a4 ^2 s; [8 ]! o$ ]) Z
% ?' L8 D# N# |& `2 `
// Note we update the heatspace in two phases: first run% D/ R# {2 l* [0 p# D
// diffusion, then run "updateWorld" to actually enact the
. T6 n. e7 X' a8 m) N8 `0 N5 Y // changes the heatbugs have made. The ordering here is
9 t1 x# f! L7 x+ T% Z" R // significant!
9 R8 J7 w$ m8 \& W! p; x
3 L' |6 h7 x/ }, j7 k // Note also, that with the additional
' Y Q6 z1 g) W // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 J. L6 [$ q8 S# V // randomize the order in which the bugs actually run/ v6 o/ i% |# f( o- F# W" L: Q
// their step rule. This has the effect of removing any& ?, r' w# q: v
// systematic bias in the iteration throught the heatbug& N2 h _) A; w/ J' k
// list from timestep to timestep& Y9 U! y( T! X& b; s
2 M1 A: I d( o/ a+ R# y C2 k // By default, all `createActionForEach' modelActions have
5 ]! Y( I# Y6 B // a default order of `Sequential', which means that the
2 c2 A$ d% k F3 o, c2 c // order of iteration through the `heatbugList' will be
3 V0 }$ `$ V# {7 f // identical (assuming the list order is not changed
2 r9 g8 d" m( J. {- @4 ?" t* y // indirectly by some other process).
8 @3 A# J' k4 ?( A# C d6 h% L
% ^5 ^9 U) g/ f) Y5 C* p4 I modelActions = new ActionGroupImpl (getZone ());+ n/ O. A) L; [( d; E x
# e5 v; B. T- K, I4 i try {5 v& n4 }& k! ~1 _; Q3 v
modelActions.createActionTo$message
5 |2 C& `6 y; ]0 O7 l# ]: p (heat, new Selector (heat.getClass (), "stepRule", false));
$ _ }) W! s5 Q1 Q0 i: U } catch (Exception e) {# \0 f6 L6 S0 W
System.err.println ("Exception stepRule: " + e.getMessage ());
( I$ A1 ~% b$ k2 w- _8 T+ T }
6 U; x& b0 f1 b3 I+ i: w
) p: O- m) {# r5 ^, Z) D1 u" u% O try {
& t8 i7 d7 ]2 p, u$ D Heatbug proto = (Heatbug) heatbugList.get (0);
+ B& j# L u( @ Selector sel =
$ T% b! L! ]3 @8 k. }* j new Selector (proto.getClass (), "heatbugStep", false); Y& f2 a6 F; v. O+ M: M
actionForEach =
: l% |& k# V% Y& [6 w+ U$ E' F- f modelActions.createFActionForEachHomogeneous$call8 ?( H# \& b& X; ~
(heatbugList,6 ~. E3 d$ S0 d* X! S- P/ e0 D2 v
new FCallImpl (this, proto, sel,) ?: G7 W; t* k2 S1 A
new FArgumentsImpl (this, sel)));
; Y+ }% b& ]$ B3 F. w0 h& C } catch (Exception e) {
8 ` u5 K7 \8 k, L e.printStackTrace (System.err);
9 ~! D) B1 H! g }2 K+ B- z! ?( W( V3 u/ P
; k$ N+ B; k1 Y" }" h' t
syncUpdateOrder ();
5 o; {6 n! `4 v9 g' j2 Q0 i! P6 R* c! z' B( c ~0 {6 F. D
try {
/ A u( H7 _' C( @( [9 D modelActions.createActionTo$message
' r5 y6 U7 ~% n) M3 ~1 B (heat, new Selector (heat.getClass (), "updateLattice", false));' n! x( m2 j, z; N; P3 M2 x) P8 _
} catch (Exception e) {
/ j( u. ]5 j3 g$ P4 R6 C System.err.println("Exception updateLattice: " + e.getMessage ());
6 _$ z' | s2 o& Q, P6 f4 |2 f v0 {3 k }# h) P1 j; k( ]3 [
8 K3 k! K% a9 W2 _, K4 }
// Then we create a schedule that executes the
, C: b6 r) R7 @$ @3 c: V% \ // modelActions. modelActions is an ActionGroup, by itself it
/ }( w7 o5 u; U4 `' R // has no notion of time. In order to have it executed in
: Y W0 z5 P' c* L- F& n' Q K // time, we create a Schedule that says to use the
1 f8 r. i, b, d+ a // modelActions ActionGroup at particular times. This4 g% B& `9 s) Q+ E9 Z- x2 S% D
// schedule has a repeat interval of 1, it will loop every6 W7 R& B! |7 a! z6 V
// time step. The action is executed at time 0 relative to
C& b$ k; W( Y // the beginning of the loop.6 O; Q: R- l T% i t2 l
' T* z2 K. u$ a+ ?& a
// This is a simple schedule, with only one action that is
1 Z! I4 R1 Z1 P // just repeated every time. See jmousetrap for more
- f0 {, B" L3 R: N // complicated schedules.7 O) v5 C9 q+ P6 A4 E; |% y
% F3 B' x+ r, |" b7 ?7 l! o! j6 X modelSchedule = new ScheduleImpl (getZone (), 1);
6 _! o3 Z9 g. K1 s9 {- Y3 U' q+ D0 q modelSchedule.at$createAction (0, modelActions);# i3 s! K: B1 J8 O9 x
7 }" |* \- u' m( F( Z- Z
return this;0 c G7 x1 T) N q1 K7 J% g9 W& m) z
} |