HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 ]1 q& F$ K, L- {7 w: r6 z" k$ I9 M/ {) Q: p2 U5 N
public Object buildActions () {
' G; ?! r) Q7 C# d8 f super.buildActions();
6 J$ ~6 X+ m& D+ r5 [8 z ) j; a9 m2 q- `- h5 h8 T! x
// Create the list of simulation actions. We put these in
7 E& B1 Z$ W+ h' O7 R6 r: g$ ]! Q // an action group, because we want these actions to be
( d! h# T/ A/ ]" w( R // executed in a specific order, but these steps should
4 Z7 b% r9 L* p5 n* e // take no (simulated) time. The M(foo) means "The message& C" Z h0 X4 x$ T4 m5 z! D' W
// called <foo>". You can send a message To a particular! P: `7 L0 V2 O) ?1 S
// object, or ForEach object in a collection.5 E% b$ J) i+ ]( p d
- K# ]: {4 M# P: a" ^" U. c/ s9 W
// Note we update the heatspace in two phases: first run( h5 f$ s7 ?$ Z+ p+ T
// diffusion, then run "updateWorld" to actually enact the
$ A% _/ d/ N5 h0 D% d5 Q4 C5 k // changes the heatbugs have made. The ordering here is9 }* W8 A# x; F, F
// significant!
( I/ e5 u: b- Z( b/ l- k# ^
2 j. Z: d7 f" g( M2 f! b // Note also, that with the additional7 n, o+ Y% P" ^6 `( d$ b
// `randomizeHeatbugUpdateOrder' Boolean flag we can
# H. n: o" I3 ~# y // randomize the order in which the bugs actually run
( b9 I. N- Y5 W) S# {% ~8 F // their step rule. This has the effect of removing any
8 e1 N* f1 D7 N7 |% L // systematic bias in the iteration throught the heatbug* N5 ^% e% y: H* g2 S5 U
// list from timestep to timestep
* h# [5 b0 h4 d8 P) K+ s 9 X! O' A; r4 @. H. _
// By default, all `createActionForEach' modelActions have7 f' X9 j& \3 Q: T: h
// a default order of `Sequential', which means that the
# @) _5 b. w3 }* \2 J // order of iteration through the `heatbugList' will be
1 H. N9 i5 [9 H" r // identical (assuming the list order is not changed* n: x$ o) B1 t5 E6 I% d
// indirectly by some other process).
7 i4 Y4 v0 w2 c( v5 L* X3 k2 H' O3 [
2 F8 {$ y( _# x: R. Y3 V4 h& c modelActions = new ActionGroupImpl (getZone ());, T. k& T) ~- R+ J/ l& n
3 N, C# z3 e ?. x
try {: J& b1 [! k% }9 {$ a& H, z
modelActions.createActionTo$message. \: A/ q. L8 s$ E
(heat, new Selector (heat.getClass (), "stepRule", false));
$ L* n: ~; S+ b4 N5 v, z' Q } catch (Exception e) {
! w l" ~1 y& r( r0 ]2 e; y System.err.println ("Exception stepRule: " + e.getMessage ());! q! r) ~+ G5 R
}1 Y3 R( u5 Q! b2 L
4 J/ D0 [$ Y$ G
try {: P1 I! R9 n: X* M5 j
Heatbug proto = (Heatbug) heatbugList.get (0);4 [/ R4 A0 H$ u: ^
Selector sel = % D* N* V( `% d
new Selector (proto.getClass (), "heatbugStep", false);
4 X, P9 x& B$ V9 N* Z actionForEach =, k2 D/ j8 M( v& e( [
modelActions.createFActionForEachHomogeneous$call$ @0 Z% q6 X8 ]9 p& c4 ]: \' a
(heatbugList,
6 p& ?9 w/ k; v) b% ` new FCallImpl (this, proto, sel," |: E) E- j( o+ k5 w# x6 w
new FArgumentsImpl (this, sel)));* Z$ m0 g- _, y2 ^1 e6 b
} catch (Exception e) {
- a4 C2 s R3 S3 p) n- G% F+ d e.printStackTrace (System.err);
0 f0 W- W, a# _! w% H$ T }
) {. t0 H* H* p+ G
( D3 ~' z! [2 r& l2 T syncUpdateOrder ();
/ m; j4 A$ l: m7 V- {% u0 }( ?5 e$ n! u8 o- y% P; `
try {
$ y$ C) E9 R: s+ F modelActions.createActionTo$message
. S, l9 a+ J( D5 X1 s+ d! ]" d (heat, new Selector (heat.getClass (), "updateLattice", false));
b9 d) u D. K% } } catch (Exception e) {4 S8 t' T" l5 m4 t5 D
System.err.println("Exception updateLattice: " + e.getMessage ());
$ t8 t W6 @/ X p8 T5 u }
1 C& H. }# L4 ? % L1 I& h$ x2 p+ d+ U7 `, v
// Then we create a schedule that executes the
4 |6 \+ P4 U9 K5 ]8 a# |& B6 X // modelActions. modelActions is an ActionGroup, by itself it
& ]1 N( u. z2 c; B; @ // has no notion of time. In order to have it executed in0 X. N k/ F1 I+ {6 ~/ m
// time, we create a Schedule that says to use the
d c7 P+ {& ]0 h // modelActions ActionGroup at particular times. This1 a5 C% o9 P' O" t+ u& V9 S
// schedule has a repeat interval of 1, it will loop every
' `0 g& c+ {& M9 z4 S Z2 {7 N // time step. The action is executed at time 0 relative to
+ u3 E5 a. H9 E8 w# y( x' { // the beginning of the loop.. m3 n F" t2 B' K7 C4 `
5 F/ N9 y# K/ |0 k* `9 u+ m Q
// This is a simple schedule, with only one action that is- K4 H$ `/ B' H* _# c2 B, R( R+ f5 ?
// just repeated every time. See jmousetrap for more" f$ f+ F8 v/ S6 u9 a4 C: d3 k
// complicated schedules.% |6 n2 V X3 T! H5 e
. R$ u" D/ `9 V4 j; i2 D, G
modelSchedule = new ScheduleImpl (getZone (), 1);6 H- ?; ]. O0 b
modelSchedule.at$createAction (0, modelActions);2 ^4 j- k! Z/ J4 \6 _
8 X; v0 f, R- U5 ?
return this;& I) N6 ~9 }; e5 S9 g
} |