HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ R, F& ~7 S- F" }+ \" J8 Z
/ U8 t: O2 O4 g# A: J7 F7 a0 ? public Object buildActions () {
8 p3 L6 }6 _- i; a) _0 B# O4 [7 [ super.buildActions();
& ^$ u4 O0 q; T& \- l+ s' U$ b5 s( j
+ a1 B4 P4 Q8 g7 Y( Z- C, D // Create the list of simulation actions. We put these in0 e8 l7 y8 E. B7 A/ r( F
// an action group, because we want these actions to be; ?- N- m, _, U. b! a U: m
// executed in a specific order, but these steps should: X6 F, t6 G- p& t7 h% M% Q B
// take no (simulated) time. The M(foo) means "The message: L/ c1 e7 G, }4 u7 ]3 m
// called <foo>". You can send a message To a particular
4 N4 o Q! r, Y% T& x // object, or ForEach object in a collection.
3 C' Y" u$ F) c. i
# D% o D$ X: i: h // Note we update the heatspace in two phases: first run( Q x# K) \5 L
// diffusion, then run "updateWorld" to actually enact the
, Z' M; y; p+ { t5 j3 X4 x // changes the heatbugs have made. The ordering here is- G3 d7 V7 X$ d+ {; L
// significant!
( X9 D1 ^: A# F$ p4 x% R% L ( E( B1 I% H! i" d7 @
// Note also, that with the additional: `/ N0 @2 ~2 o* t% a
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 R! m, w0 A$ m3 O3 p // randomize the order in which the bugs actually run. C3 O9 K+ f4 |$ `+ `# v" a" P
// their step rule. This has the effect of removing any7 [, s. P |! W, o. Z& O$ c
// systematic bias in the iteration throught the heatbug* s2 P5 V- @7 c6 ^1 D
// list from timestep to timestep
# Y1 B1 V( q$ [* e9 \$ Q & R! V3 q' m+ @& ^$ ?1 |% z* T! W
// By default, all `createActionForEach' modelActions have; y8 G$ L n2 P
// a default order of `Sequential', which means that the, U4 M& J+ E! ~& \) {
// order of iteration through the `heatbugList' will be
. @& P* M$ K+ i // identical (assuming the list order is not changed
% _) [% u4 X) W& V // indirectly by some other process).
' ?( l0 |. _& Q
b& L8 @5 b/ N6 j$ d modelActions = new ActionGroupImpl (getZone ());& T$ Q; y% M; P0 `! W+ _0 }
& D E7 f! U6 v G
try {
- C/ z6 E4 j& ^8 f; J% G modelActions.createActionTo$message: S* A T- b- S, g; ^
(heat, new Selector (heat.getClass (), "stepRule", false));9 ~# @! b& `& X7 l) P' i
} catch (Exception e) {; r7 t$ L2 o' v4 s
System.err.println ("Exception stepRule: " + e.getMessage ());" Q2 C+ Z0 B7 A" w3 q
}" p( m+ W& ^( t7 F2 q, [( b* ~% H
6 [7 r) l5 g4 B0 p try {( p9 X5 u' M- ?- `
Heatbug proto = (Heatbug) heatbugList.get (0);2 ^: l7 S4 W0 e
Selector sel = % H: m6 i, R' Z. ^) Q) x: i
new Selector (proto.getClass (), "heatbugStep", false);
& ~' K/ G3 C4 q( i4 C2 }5 Y( ^2 z actionForEach =3 P! N+ b# u$ V5 J1 `
modelActions.createFActionForEachHomogeneous$call
+ q E0 x; B# W6 ? V (heatbugList,- W! A( X8 I7 \% Y2 D
new FCallImpl (this, proto, sel,
; \. H8 e- ^- C0 N new FArgumentsImpl (this, sel)));
* k* M- u# l! e7 g5 F$ H( c } catch (Exception e) {# A1 ?& J _! H; ]6 r/ x/ D5 [
e.printStackTrace (System.err);
: }* [" |, e! D }
7 m+ S; T* X# n) `
4 N! E, p; A9 r6 y, i syncUpdateOrder ();- ~& _+ f, n% W+ o8 L+ |
* Q" y0 \0 K" g1 H5 F2 q
try {$ r" t) D9 x: f1 |0 i1 U+ V Q
modelActions.createActionTo$message
6 d1 d: v0 Q& p6 ~ (heat, new Selector (heat.getClass (), "updateLattice", false));! O" R& g& M3 V. I6 q
} catch (Exception e) {6 I% Z- r' a3 p0 m8 q, A: V/ f
System.err.println("Exception updateLattice: " + e.getMessage ());
, k7 c8 T: S8 Z7 |+ E1 g }: v$ b0 p6 V1 m* Z; O
0 E, J; `. \. p. V
// Then we create a schedule that executes the; ~8 M5 \; I0 N2 D9 Q
// modelActions. modelActions is an ActionGroup, by itself it) W% S% {, D) [# ]! H( y+ c7 O7 m3 v
// has no notion of time. In order to have it executed in" F: x! P' P' w" f* m0 S$ N
// time, we create a Schedule that says to use the; U1 K% L( m7 l
// modelActions ActionGroup at particular times. This
8 ]2 o8 r& S. \2 ]% U D& m5 K // schedule has a repeat interval of 1, it will loop every( Y l G9 B. L, }( [: v: }# A
// time step. The action is executed at time 0 relative to* s# l. y% o( h' Y% M
// the beginning of the loop.
5 U; M1 Y1 N' S7 f. Q) u- o# D: o7 L( y/ a8 B. T0 V
// This is a simple schedule, with only one action that is
5 q8 r" F. l( q // just repeated every time. See jmousetrap for more% b5 n0 N8 v5 ~; ~# r' P: S
// complicated schedules.
$ e3 F% H4 q, n+ g* K% v9 y 9 @7 O( x- _% w7 B) _; H/ z" v
modelSchedule = new ScheduleImpl (getZone (), 1);! w6 C/ F/ H1 X% [0 Y
modelSchedule.at$createAction (0, modelActions);# D0 K9 K: h% x2 |) y" X
2 C% u( z% h8 o! j return this;. C/ `5 s! w; w8 s
} |