HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
! s+ k. }1 K3 o/ }0 ]- C2 W; [# |, O0 T7 ?
public Object buildActions () {- F: }! r' W; g+ H8 c
super.buildActions();
' W% x* y; T! [8 m1 l
; {* Y, ~0 [2 S, g* b // Create the list of simulation actions. We put these in
, E- H( l: L. u- v9 L% C // an action group, because we want these actions to be: l/ U$ P! _# Y0 U3 g* E
// executed in a specific order, but these steps should
# g1 I& p/ j+ z, U // take no (simulated) time. The M(foo) means "The message1 R0 f7 I9 Z3 i- s# L I' A* k
// called <foo>". You can send a message To a particular
* l0 ^& S$ a" [+ C // object, or ForEach object in a collection.
4 [3 U0 `' y Z& v- S
* ?/ V; B/ g7 j) M // Note we update the heatspace in two phases: first run% g' ?9 ^ t- v% D8 T4 [. {% D
// diffusion, then run "updateWorld" to actually enact the
5 g# `7 f3 U/ a+ S5 J7 @ // changes the heatbugs have made. The ordering here is
' b+ _5 R) Z0 k% ] // significant!
( ^+ \( B+ c4 ?- B' H6 U, X. O0 l0 H F : v2 b3 _/ j" N& Z2 E' A
// Note also, that with the additional/ ]6 |* v H; a3 K9 ~0 v9 T& x1 c
// `randomizeHeatbugUpdateOrder' Boolean flag we can. T) t) w2 _1 i2 N- P
// randomize the order in which the bugs actually run. y& s) m' a3 _0 j
// their step rule. This has the effect of removing any
8 Q3 d7 Y3 z2 o+ l8 z: P // systematic bias in the iteration throught the heatbug( e0 r$ {0 V) \
// list from timestep to timestep
V8 l" }9 k6 ]' b9 _4 U/ p
1 H* ]! S) D/ z+ K( D+ v# | // By default, all `createActionForEach' modelActions have5 Z$ s F8 Y( f1 c/ ~# j- t1 {% k
// a default order of `Sequential', which means that the
- {, Y! ]% |; `/ o- i: Q // order of iteration through the `heatbugList' will be
3 k2 M6 Q% i& f. W- u, {" u0 F // identical (assuming the list order is not changed, x& ~) N" o- v( o$ C0 z+ |
// indirectly by some other process).
$ {2 r+ E' b2 W4 s2 W / q n& a! I# V
modelActions = new ActionGroupImpl (getZone ());
; s/ E, K; [! Q5 N# e# `* W \( a. [+ E+ H4 L
try {; V B/ e0 B3 y, z. L0 e/ A' r0 {3 k+ W
modelActions.createActionTo$message- g$ f2 H+ A u7 k) D9 v
(heat, new Selector (heat.getClass (), "stepRule", false));
) }$ j* J/ Z1 `- L( p+ e6 o% Q ~, c } catch (Exception e) {. y* r$ R S4 D% e
System.err.println ("Exception stepRule: " + e.getMessage ());# \5 H: H9 h( @5 x8 U: h) A1 R
}
4 t2 Z" z* ^9 J. }# ?8 A" g) A. E
' k" v3 f c' q5 q' h& |' D4 Q6 E7 Z try {
. O5 `' _: y- q Heatbug proto = (Heatbug) heatbugList.get (0);, Z: ~! {$ c- U$ M% @$ B3 R
Selector sel = $ H( r- b( N' s) M8 {
new Selector (proto.getClass (), "heatbugStep", false);
/ e/ U" j0 c2 s" k! J& W( f8 j actionForEach =
1 }( S5 n) k* i modelActions.createFActionForEachHomogeneous$call6 A, z& S) s) a( u
(heatbugList,4 [- x4 S. z$ G+ g
new FCallImpl (this, proto, sel,
4 Q' H* h# U$ m: A) M2 f new FArgumentsImpl (this, sel)));
0 ^" {7 w- J' C' I } catch (Exception e) {& i! A* `9 @6 @4 x+ u0 B; N
e.printStackTrace (System.err);) _$ N' D+ w2 z+ ^
}$ s0 z3 S# {& A# E a7 B8 s) a
! j( |0 p. D0 i0 L' v syncUpdateOrder ();$ p2 q8 r @) R" L9 Z
: a9 A5 @6 q1 b
try {
4 i, k9 Z% Q. N$ ?; y) G$ p r modelActions.createActionTo$message
" `" F8 w; ?/ N (heat, new Selector (heat.getClass (), "updateLattice", false));' N% k# H, ?: e# b# j
} catch (Exception e) {, e4 _3 j# \2 U' k2 \0 E
System.err.println("Exception updateLattice: " + e.getMessage ());
; s6 Q, ^7 p- k5 T }
; f7 P7 _/ d/ ]1 ~2 l" J) {3 X6 }
" f5 N$ Q2 k4 u0 C1 m5 u // Then we create a schedule that executes the
8 N) O. F1 a k* O, Y; T // modelActions. modelActions is an ActionGroup, by itself it1 i, r, [% m2 k$ X* l6 I, ?
// has no notion of time. In order to have it executed in4 |! ~# M7 m/ u( T- P' Q& W+ x/ D
// time, we create a Schedule that says to use the3 |& O1 ?+ \5 \- Z; s- r: g
// modelActions ActionGroup at particular times. This
. y' ~$ H# b0 p! u4 H // schedule has a repeat interval of 1, it will loop every
& ]* @+ u, O6 E: s: f // time step. The action is executed at time 0 relative to# T' Z0 A; Q9 F8 N
// the beginning of the loop.( d8 P2 e# y4 D, D8 ^& U: F& m
5 j7 c' \+ }2 u+ c" s$ Q0 [ // This is a simple schedule, with only one action that is
; {" `" F1 w! Z+ J' i% z( h // just repeated every time. See jmousetrap for more
& j2 q) }& F8 W // complicated schedules.8 @9 R9 P% V! w1 p! K1 w# W5 m
2 H3 X) B3 T, a, D. n3 M modelSchedule = new ScheduleImpl (getZone (), 1);
. R: x" o: A; N modelSchedule.at$createAction (0, modelActions);
& I7 f( f8 q b# g" i( n% Y9 h , r" j) \6 {! V: b$ K0 O0 \7 R
return this;
4 u1 V% J6 A- [ } |