HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* C' J$ X3 `" N
2 {, w. R/ E% U- y. { public Object buildActions () {* S2 f$ f/ U' \' H+ K
super.buildActions();; ~2 l, Z1 o D: i9 b% ^ J
' [0 L/ n% c5 x' Z // Create the list of simulation actions. We put these in" I. N: e9 q k5 B0 ], P
// an action group, because we want these actions to be
$ Q! O5 v( p0 p8 r4 B& U3 P9 o" _ // executed in a specific order, but these steps should0 j) f& C, G5 ?; e0 h# y# o
// take no (simulated) time. The M(foo) means "The message) P3 Z0 E" j* u+ l* A+ {0 I
// called <foo>". You can send a message To a particular9 [8 Q5 c+ Y6 _ q7 P4 D( V* j
// object, or ForEach object in a collection.
/ A p" } ^4 y2 ^1 A2 P ( u" L+ S/ s7 C. o
// Note we update the heatspace in two phases: first run
& V) f0 P$ s9 g // diffusion, then run "updateWorld" to actually enact the' B, H/ U o( Q7 `* P$ q- f
// changes the heatbugs have made. The ordering here is$ J8 {. z W! H* t0 X
// significant!; ^$ @. h+ Y7 m- |& {
& F# J$ `; i: o4 u
// Note also, that with the additional
& E6 ?& x8 m0 m0 }9 u // `randomizeHeatbugUpdateOrder' Boolean flag we can
" Q2 L' T4 ~6 L$ C* b3 s // randomize the order in which the bugs actually run
+ g# i- i+ D c' ?6 V" ? // their step rule. This has the effect of removing any! Z9 w- I# Q3 b+ C
// systematic bias in the iteration throught the heatbug% L) @4 Z$ R, {" Q) E
// list from timestep to timestep
W( _( z' z- f: v% B4 E# [6 a% x
4 ?1 Z, q; [/ x) }! X- r // By default, all `createActionForEach' modelActions have: g$ |( w! M$ w$ w- C5 i2 l9 |
// a default order of `Sequential', which means that the# h% J* C, o- V: h4 C
// order of iteration through the `heatbugList' will be8 O$ s! `! f P. ?
// identical (assuming the list order is not changed! b- l1 j+ P- B% u
// indirectly by some other process).5 t% k1 h5 W( ^9 }( H5 F
[, o3 W, h. r. s& @
modelActions = new ActionGroupImpl (getZone ());" D9 d8 _- @5 S+ U! s: x r, L& C
! l/ M* K- l5 q) l1 D$ u2 W+ ]
try {
- l0 f6 h. J% |" r modelActions.createActionTo$message a8 V) X) u& u& C
(heat, new Selector (heat.getClass (), "stepRule", false));3 Z& j) F/ u$ i% q
} catch (Exception e) {7 L- P% H$ g# K. B! U O: I
System.err.println ("Exception stepRule: " + e.getMessage ());8 G5 @+ a) ?$ O+ z8 Y5 V( F+ W
}
( \2 U6 l9 w( L% E
, B0 k& Y. s* g7 y! Y: L try {. n3 P1 ?, i5 T! f k; E
Heatbug proto = (Heatbug) heatbugList.get (0);
H% T: G7 h+ {2 J Selector sel = 6 Y+ t# j: z8 C, U8 g
new Selector (proto.getClass (), "heatbugStep", false);8 \+ p$ Q0 c9 f
actionForEach =
! L% L( Q. X; q1 H/ L6 N% Q) k) x modelActions.createFActionForEachHomogeneous$call$ @4 z* k1 u9 A* ^
(heatbugList,
8 K' m2 ~, T' p. G4 Z9 _ new FCallImpl (this, proto, sel,
7 g) h& F! h, i. U5 v new FArgumentsImpl (this, sel)));* c9 B* y$ y; v$ a, z7 R
} catch (Exception e) {
7 Q. R) \ B- j: E- @9 w+ M; t, { e.printStackTrace (System.err);
6 {" o' R1 L5 e9 V4 I A! _9 G3 o }! Z7 T' a# y; _3 _5 e* w7 p7 C
) q( v; H8 ~. v! I9 p
syncUpdateOrder ();
; E' Y' [) J0 x+ L A# c7 u1 n- D8 H7 |4 j- t; ?. \" x
try {
% a: @/ w: _# Y; R modelActions.createActionTo$message , {8 P0 ^9 R+ s+ o9 Z2 F \
(heat, new Selector (heat.getClass (), "updateLattice", false));4 a0 X; a) W; Q* O
} catch (Exception e) {
% q1 @ V m4 ^4 c, t System.err.println("Exception updateLattice: " + e.getMessage ());
) F, S) s1 ~" Z7 u2 ]7 J }
: F8 N8 I0 R5 [3 [ % `. e( c9 {7 i2 C% a
// Then we create a schedule that executes the
$ u p$ e# {; i% ~, f" b // modelActions. modelActions is an ActionGroup, by itself it5 M$ X" N, w2 b- F1 v% G
// has no notion of time. In order to have it executed in
# `" y/ m1 B3 f5 Z. J) U" Y+ X // time, we create a Schedule that says to use the1 e$ `7 e, S w9 S! H
// modelActions ActionGroup at particular times. This
4 b8 w9 _& u+ }) r: S6 n- F& t // schedule has a repeat interval of 1, it will loop every1 y$ X6 r& ?$ r& M% U
// time step. The action is executed at time 0 relative to
; V, t( S1 t1 Q0 B y0 `% y // the beginning of the loop.! D, W+ m% _6 O8 I+ M' p* I
1 {/ ]8 {2 ^ U w
// This is a simple schedule, with only one action that is
( w4 r0 G4 P4 R8 l/ E1 S // just repeated every time. See jmousetrap for more
6 Y+ L4 o! @+ p) }6 j // complicated schedules.' R; g$ ?! `5 k3 }2 G; B
* }. A1 i( F* v1 Z0 L8 z modelSchedule = new ScheduleImpl (getZone (), 1); A) Y- _9 j$ e1 m1 G' N. K
modelSchedule.at$createAction (0, modelActions);; u# D4 v8 q5 l; i) s- M
* E7 `1 G2 s+ Y8 l0 Q
return this;
4 l P$ Q r$ I0 N } |