HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ ]" E+ @9 f U
6 R. A1 X) h; X, d+ }: n9 o
public Object buildActions () {4 m u6 m) h9 c% A) D
super.buildActions();! B* V3 n) \! a* C* P
, W4 r v( u; D/ w // Create the list of simulation actions. We put these in
/ w3 B1 H7 h3 b; f) F. I // an action group, because we want these actions to be
" E; y9 G) D5 l' R$ W4 c$ H& ^ // executed in a specific order, but these steps should7 D( Q' E0 t' m1 ~6 I
// take no (simulated) time. The M(foo) means "The message
$ W* e& K' g& _$ {) T& m // called <foo>". You can send a message To a particular- O' e2 t3 d, [1 z, z! f0 v
// object, or ForEach object in a collection.
6 ?, f2 k* T, e# @8 S* _
! M3 b: p( x% o/ ]- P, Y: g // Note we update the heatspace in two phases: first run) Y- J5 r/ e s; u
// diffusion, then run "updateWorld" to actually enact the4 ? r1 {' a0 [' B' h
// changes the heatbugs have made. The ordering here is
* d' [6 n$ V- p# `( a1 {' D // significant!1 B3 R! o: z% `+ r; Y0 O' H0 {
1 z; e, K8 B, `9 \" x- m
// Note also, that with the additional% G* \7 `! Z& ~! {5 C* I2 m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ ^% P( ~, ?0 w. q2 f. i // randomize the order in which the bugs actually run9 Y7 W/ d! Z5 ]$ ]% Z
// their step rule. This has the effect of removing any
' h; m$ Z$ I% o' j* F) ?$ D // systematic bias in the iteration throught the heatbug
4 ^" f+ P3 n! x5 R0 x# x: l // list from timestep to timestep" ]1 \! i& U% N
/ A) w, r6 H c S8 Q) m* }3 ], f
// By default, all `createActionForEach' modelActions have
+ Y& p' p: ]' N9 a // a default order of `Sequential', which means that the
* h; ?3 x% C" [5 t9 f) W // order of iteration through the `heatbugList' will be3 J! B" a/ `. S- E$ c
// identical (assuming the list order is not changed
+ t6 i B- ?" T' ~ // indirectly by some other process).& m. J" M9 L; _( {' u0 K" d
( a$ q& l- q. U3 K, z modelActions = new ActionGroupImpl (getZone ());! A$ z! @- O, n' S/ ~. q* R
5 y+ ]* M3 a# ^ try {$ f5 Q6 Z0 Y$ V0 e, t
modelActions.createActionTo$message; } ~9 w0 _6 e! N! |& F$ q) W& s
(heat, new Selector (heat.getClass (), "stepRule", false));2 [9 e4 G& Y) ~; ?" k
} catch (Exception e) {; B9 h$ X3 @9 Q" W- ~0 H
System.err.println ("Exception stepRule: " + e.getMessage ());" I6 ] Q& b5 N% e/ c$ C8 f
}9 p! J# N/ i) K3 K4 Z
2 c1 |& h0 d" u8 S7 T2 x9 `
try {$ c( n: N* P2 Y6 y# G% H
Heatbug proto = (Heatbug) heatbugList.get (0);8 S) V& X4 j$ |4 y+ {8 E
Selector sel =
7 `& K$ V0 w e, h4 G new Selector (proto.getClass (), "heatbugStep", false);
- [: j) U& v4 C7 q actionForEach =
: y S, V, G& T& A modelActions.createFActionForEachHomogeneous$call
, d: ` u/ f! x' N% Z5 z (heatbugList,
& v7 [; z6 E4 a5 ]: J* l9 _8 { new FCallImpl (this, proto, sel,
, `. v% x9 ]3 J& K G5 v( }8 }/ ] new FArgumentsImpl (this, sel)));. A% i& N+ i- }' K( \, s% k6 j7 \
} catch (Exception e) {1 [4 ?2 I# B# t% y. ^
e.printStackTrace (System.err);
# L3 t5 ~. ?" b/ D0 h }( ?3 K; T1 R: q: e! X) L
. e, o7 @5 W! [* ?2 A: C
syncUpdateOrder ();$ r9 j( ~ t2 N% u1 x
8 u! V1 c8 q0 M9 `; T: m try {
6 h$ d+ H: g! p modelActions.createActionTo$message . H2 T* z1 F, r: z7 m( \! l
(heat, new Selector (heat.getClass (), "updateLattice", false));
- e2 C* r9 D# h } catch (Exception e) {
# m; J1 R# _2 s' z7 Z9 V System.err.println("Exception updateLattice: " + e.getMessage ());
. P f* Z W2 w. R1 `# I( d- d }: v! m8 E8 i( R, w! K" O8 t
- H) j; E7 S f+ e" ^; M // Then we create a schedule that executes the' B% _ K) v: l& y
// modelActions. modelActions is an ActionGroup, by itself it* u$ E9 v6 a6 |9 M
// has no notion of time. In order to have it executed in
6 r- ^ p+ A6 d# a/ H# W& ~ // time, we create a Schedule that says to use the5 Q' S, ~" r0 n, M3 J# _
// modelActions ActionGroup at particular times. This
' U9 J2 V. ?4 I; ? // schedule has a repeat interval of 1, it will loop every- B) ^, b9 B, m
// time step. The action is executed at time 0 relative to: k* f# S! }# L8 A+ u
// the beginning of the loop.
9 y1 l7 p- }1 K
. F. `+ u* ?4 n: ]; A' k' x // This is a simple schedule, with only one action that is8 E: j! Z0 Z" a, w% M2 y
// just repeated every time. See jmousetrap for more+ W% o! G5 Z1 ^9 u; m
// complicated schedules., M; a( Z1 z. K( P4 V8 H5 o2 P( X
9 g h( |( g- |. n! L6 ^ modelSchedule = new ScheduleImpl (getZone (), 1);9 I5 g. Y& f/ o+ n
modelSchedule.at$createAction (0, modelActions);
- [! p+ v4 g/ v2 W1 `# m4 G' ?2 D
1 o' g3 G* e& H# E1 T return this;) F# F* n: m* B4 R* Z; O
} |