HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' ?, M8 X: h6 _! ?! ?- w2 ]! _: N
7 b# M+ v r( w: ]" | public Object buildActions () {
( Q- b- P7 c; s' z& E y9 F% } super.buildActions();; c& e: L0 F4 i }
0 v% \9 ^' Y. F5 i1 [ // Create the list of simulation actions. We put these in
; v, M8 z: a7 A6 k // an action group, because we want these actions to be
- a% o4 k) ]' E4 @ // executed in a specific order, but these steps should: S2 }. |2 F0 G/ ~
// take no (simulated) time. The M(foo) means "The message
/ ?! a/ Q2 i2 ^ // called <foo>". You can send a message To a particular% |# ^% b/ U4 ], A7 _7 y0 q
// object, or ForEach object in a collection. T3 c6 ?0 i* X* Q# \
, i! l5 c. n' L9 Q$ r' G // Note we update the heatspace in two phases: first run
% ~ j9 [1 Q9 Y: r$ x2 _3 H // diffusion, then run "updateWorld" to actually enact the( s, ?0 H9 X/ r$ @
// changes the heatbugs have made. The ordering here is
7 J; W* q6 y' ]8 s3 f. @* b$ I // significant!! \' D! U9 J( s
. D: K4 k5 J0 i. H! ^
// Note also, that with the additional4 _/ e- U& e* {& W" ]* c6 G
// `randomizeHeatbugUpdateOrder' Boolean flag we can. e0 a% ?. K" T2 {, }
// randomize the order in which the bugs actually run
/ \9 O8 F r0 T( `! X+ o- } // their step rule. This has the effect of removing any
( Z+ g, F4 s8 F: ? V // systematic bias in the iteration throught the heatbug
) f; C# a1 {" w" U% W# f# G // list from timestep to timestep, a2 K" s: S, z! M! \% ]
4 T9 {0 }: M8 }7 ?$ k3 w
// By default, all `createActionForEach' modelActions have
, l, ]$ v; g, j7 p$ I // a default order of `Sequential', which means that the& e7 E% q, @8 H' F
// order of iteration through the `heatbugList' will be
# D ]/ r8 ]) _- _) g) j // identical (assuming the list order is not changed7 ^' Z2 L% ^/ z3 O3 n' r2 T p/ {& E
// indirectly by some other process).
V! _2 v5 B4 L& {/ b7 q# r, L * z& n$ H/ [2 @* b3 v. k2 E$ N8 ?6 ?5 e1 @
modelActions = new ActionGroupImpl (getZone ());' T& O5 j. b) D; x. V5 u1 k
' J& T+ k$ N, J' l2 k try {
/ T+ o7 p' ]- k$ F modelActions.createActionTo$message3 Q7 p+ i5 G) j v8 s9 m
(heat, new Selector (heat.getClass (), "stepRule", false));# X8 v+ S. l' i. B% {) i9 Q- o, z$ `
} catch (Exception e) {6 g0 w# o, n: K; A2 g3 j
System.err.println ("Exception stepRule: " + e.getMessage ());
2 N- [& u7 v$ O9 A: N$ t+ m1 ` }/ j* V" p1 S) }9 l, M
% @% O0 r. o1 i0 n' p try {
6 t6 w1 e4 _# i( S6 d Heatbug proto = (Heatbug) heatbugList.get (0);
* J6 p# {+ h. h3 F# E0 Z( Z% n Selector sel = % u$ k8 l) ?- o; }9 S" h0 c
new Selector (proto.getClass (), "heatbugStep", false);
! o- w6 d+ P$ t4 b, d8 ] actionForEach =$ P/ f8 C- I7 a
modelActions.createFActionForEachHomogeneous$call, E r5 V$ k, D/ u
(heatbugList,8 W. o& y8 Y4 c4 S
new FCallImpl (this, proto, sel,6 j5 A0 |( ]* V) t1 A# X
new FArgumentsImpl (this, sel)));
K* E0 B* x% [% g } catch (Exception e) {
7 @; B7 G* f( K' f* }5 [& Y1 Q e.printStackTrace (System.err);
6 S6 y5 Y4 _, {5 |7 N2 a# q }! Z: t% B( c! W0 U
n: [1 t( S2 ^ i+ r1 R8 q syncUpdateOrder ();% Q: a- d6 ^+ @$ f4 A. |8 w
, d, f; r5 T" N/ {. | z& V5 l6 y try {, U. u* d& l7 ~; k+ C" m
modelActions.createActionTo$message
; Q$ K2 S7 j; @& H& `4 } (heat, new Selector (heat.getClass (), "updateLattice", false));
) S, D2 Y1 O1 ]; A& r: N } catch (Exception e) {* v% q' \; {( j8 j! Q& Q7 C" A8 Z. Y
System.err.println("Exception updateLattice: " + e.getMessage ());
- F) c" x8 U6 j, M% v, C! E; I }2 n, j9 R4 G8 y( Z/ A$ {% \
+ r# I0 n2 x2 s, i# i // Then we create a schedule that executes the! n% z3 Z! p( b1 O( G" y# M5 Y7 f, M X
// modelActions. modelActions is an ActionGroup, by itself it
" U4 j# y2 K1 Z# ^9 S // has no notion of time. In order to have it executed in' q" H$ Y- m! J/ o+ d
// time, we create a Schedule that says to use the& R, \3 m% q4 M; E9 J
// modelActions ActionGroup at particular times. This, j- d: Q5 G! Y# {
// schedule has a repeat interval of 1, it will loop every
8 Z! N3 k8 l' k // time step. The action is executed at time 0 relative to4 T/ {) k$ p: s7 Y% J6 o
// the beginning of the loop.
$ H C5 b. _# E* a% j" I0 i) ^5 w5 j5 |- r) d9 X, z4 R( ~, U5 R7 M8 ~; x6 j
// This is a simple schedule, with only one action that is- g; L( X+ R+ X
// just repeated every time. See jmousetrap for more. h( M7 s: {3 p! D: }9 ` S! j
// complicated schedules.- H1 w4 x b3 F* b+ L: e( G
6 L* \! @7 V! N* z
modelSchedule = new ScheduleImpl (getZone (), 1);
: C5 ^% y( l3 Z, C2 P4 c) O6 t modelSchedule.at$createAction (0, modelActions);
; x' Z1 N6 A! y, n 9 x( @* v' d+ ?* c8 k
return this;) V- q" N0 ?, y+ h% M1 \
} |