HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 p; l/ w7 \" y# ?6 s$ W
5 J W$ z9 q, s; S* Z5 a0 e9 v, L public Object buildActions () {8 B r+ m" b+ j* S5 b" e8 X7 T* c
super.buildActions();
5 u" }! j- _) W0 z
2 y" Y+ B. w3 g5 D2 K& S& v // Create the list of simulation actions. We put these in. L7 X! m& ]! \3 m
// an action group, because we want these actions to be0 S8 c$ T: b, L0 o
// executed in a specific order, but these steps should
: w, ? w! `3 p h0 }2 D // take no (simulated) time. The M(foo) means "The message, d9 a' `- o0 F: t
// called <foo>". You can send a message To a particular/ i+ d9 A) n: R+ s8 R; p
// object, or ForEach object in a collection.
. ^! w! F Z2 i
6 @- `. ~' K7 z; w( W // Note we update the heatspace in two phases: first run$ K/ u) |, M* Q; r* ?
// diffusion, then run "updateWorld" to actually enact the
' ^4 D+ h6 v; ?, q, \' Z* K // changes the heatbugs have made. The ordering here is
: a! j; a9 p& G6 G/ z // significant!
+ k8 q+ h: O8 Z* W* N
7 u8 \9 y% }, B. b p( p( U // Note also, that with the additional2 v, e. j( H2 n, q' c
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 K2 o" f8 i+ q- K // randomize the order in which the bugs actually run
+ s5 l; W+ K) h; M // their step rule. This has the effect of removing any
9 m5 G. N' n/ A) x) D8 l( e // systematic bias in the iteration throught the heatbug
1 F7 ~$ F W& u) d( c // list from timestep to timestep U2 K5 |) `# ?2 j+ u4 d0 x6 ?
$ U( W4 O5 q0 ?& @) Q( F7 P9 X' k // By default, all `createActionForEach' modelActions have1 q2 f! J5 Z3 |7 P( k
// a default order of `Sequential', which means that the
: V8 ^" f9 @. q5 ?8 D // order of iteration through the `heatbugList' will be
3 O- {# A& ]- M/ a7 p* T // identical (assuming the list order is not changed+ e7 f. T q4 _
// indirectly by some other process)., }7 @$ D- M5 |9 ?) |
, v2 E$ a: D! Z1 Q2 k modelActions = new ActionGroupImpl (getZone ());) Q( [# _' v2 Q& D
/ C3 [. G) W5 i try {
7 X; z* Q9 ]" N/ v0 Y9 d3 P modelActions.createActionTo$message
; ?& P Y/ _. K; | (heat, new Selector (heat.getClass (), "stepRule", false)); i% D+ x% ^9 V' R# C2 i0 b
} catch (Exception e) {$ f, B1 J5 Y& z8 b* g C
System.err.println ("Exception stepRule: " + e.getMessage ());
( K/ S _1 G' i& i4 m/ u( c" P }. B- `' J, O9 \7 b
& W g/ I0 |, y" @ {7 q8 g try {+ S# b I9 m( i( q" b/ @0 Z4 ~8 {
Heatbug proto = (Heatbug) heatbugList.get (0);0 M+ [* C" Y L+ i
Selector sel = - z1 c4 n+ t" D
new Selector (proto.getClass (), "heatbugStep", false);
/ }/ U4 ~) g- W# \7 V actionForEach =" w8 G( N; K& e4 L
modelActions.createFActionForEachHomogeneous$call
4 Y8 v! a, o5 _8 V) p3 H, f (heatbugList,+ C2 ]: s. u7 A) l
new FCallImpl (this, proto, sel,
1 k9 X* o1 `! d& v! b& x! r, k new FArgumentsImpl (this, sel)));2 y% S A/ p* b7 `9 s
} catch (Exception e) {
5 ?. G! S$ V7 s- _7 W% {* N e.printStackTrace (System.err);" s2 w% l9 T9 u @. I+ T
}; b* c% F, G' ^7 Q
/ n9 }$ V! d- J) ^- k' t1 K
syncUpdateOrder ();8 D! H0 W; Z& q6 i1 ]
/ X4 S1 J9 n7 A5 K6 N try {( T" g. ~' W: y
modelActions.createActionTo$message
% k# |: G* W" z, b (heat, new Selector (heat.getClass (), "updateLattice", false));
7 ]: ~5 \# c- H } catch (Exception e) {
' Q! H9 q Q, ?3 z8 T: H+ y System.err.println("Exception updateLattice: " + e.getMessage ());
9 ^/ w0 V% x2 [: |- M& a }
% k2 U5 y- _7 |9 K ' N- C/ @ a D$ F
// Then we create a schedule that executes the, N9 f X3 C& t) o( M
// modelActions. modelActions is an ActionGroup, by itself it
0 U6 ?- T5 z, {$ @$ U // has no notion of time. In order to have it executed in' L8 s# X' h" a% h" c* ^
// time, we create a Schedule that says to use the4 F3 k5 A4 I2 P( P E2 n$ |9 J
// modelActions ActionGroup at particular times. This$ y( S3 O' d# A3 E* G
// schedule has a repeat interval of 1, it will loop every2 T+ v) E6 R1 u; E0 A' q- C
// time step. The action is executed at time 0 relative to
2 m1 O3 u6 ]" V; C* J+ n // the beginning of the loop.
1 M$ k+ n; n4 n( h& n% P V! K5 X( O$ ~9 S2 ?4 [8 x( I9 Z: l2 C H
// This is a simple schedule, with only one action that is
V) f; f' b6 D/ I4 W6 Q; _- X // just repeated every time. See jmousetrap for more
$ I4 t! J1 {- `% y/ X' @& A' d( u // complicated schedules.
0 }4 P& t4 v7 i6 m- R1 \4 E: d
; d1 n& j. l0 a' o modelSchedule = new ScheduleImpl (getZone (), 1);
) O- T3 `2 E: @9 \: ] modelSchedule.at$createAction (0, modelActions);
% ^' q* \3 P @% S( I0 p% g , F: b% L% J2 }' S# f
return this;
3 E+ c) j6 S" o3 a: j8 q } |