HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
8 v% L8 ^+ ^1 T( Y! E6 C, \! F J
public Object buildActions () {
4 T% f6 j4 j7 W super.buildActions();
* y A; w& j% N/ Y- M; f' m ; z0 m1 S0 ]0 Z- A6 p. B2 T
// Create the list of simulation actions. We put these in
3 Q" A3 H6 A5 p$ T // an action group, because we want these actions to be+ ]# g$ E/ G- H4 P6 Y* w7 m1 _
// executed in a specific order, but these steps should- y* D/ c5 M* a. }
// take no (simulated) time. The M(foo) means "The message
; ^* Z& Z+ i( m) x/ N // called <foo>". You can send a message To a particular/ T- E4 s/ S* ?, D- ]) r/ L# n. G
// object, or ForEach object in a collection.
: H6 s/ j4 K U & @: ~$ d$ W0 t: Q" r
// Note we update the heatspace in two phases: first run
% c" V$ x+ ]$ c" x* C- r // diffusion, then run "updateWorld" to actually enact the
7 G8 a0 x$ ^. P9 @- S, X) v# { // changes the heatbugs have made. The ordering here is, Q9 v8 d4 I9 v* p
// significant!
% J/ F% E7 m8 P4 U* ^2 @ h1 u 6 _; M$ P- m" n; h% |4 ?
// Note also, that with the additional* z5 t5 K, H: H9 x2 ~/ ?% u$ y
// `randomizeHeatbugUpdateOrder' Boolean flag we can
: S# M# ~2 A* f8 ? // randomize the order in which the bugs actually run
, ` t# j1 S) V // their step rule. This has the effect of removing any
( u; c! Z5 ` w% g6 A9 N% m // systematic bias in the iteration throught the heatbug
9 W5 H$ u, g& T: G5 G, f- ` // list from timestep to timestep
) Z' O1 \. q3 o- h+ P6 I% ^ " M7 k- ?/ E1 z+ w& g
// By default, all `createActionForEach' modelActions have
F7 s# P/ F# F6 N // a default order of `Sequential', which means that the
* S9 l+ x# o5 b. \0 o8 W // order of iteration through the `heatbugList' will be: {( q' V0 m8 `7 G" p3 G
// identical (assuming the list order is not changed) A a: k2 i5 U) M0 t5 k- K6 Y
// indirectly by some other process).
+ h6 N7 G% k& I, h! j/ f) K6 A + i( Z1 U7 u$ R0 s& f
modelActions = new ActionGroupImpl (getZone ());
6 t r& ~$ i3 E' M& n: D) {- d6 f; ^, t2 V9 x/ B; D
try {4 z% b( Y. ~/ M3 r! B# ?/ }
modelActions.createActionTo$message
' c. z' [' }3 C' m$ F, `/ |& j (heat, new Selector (heat.getClass (), "stepRule", false));
. ]% e" f; @5 z1 T9 d } catch (Exception e) {
7 Y P1 d0 \) c* Z' o# K0 o K8 T System.err.println ("Exception stepRule: " + e.getMessage ());$ E3 N% j @) h4 ^" B F
}6 @ [( |7 h9 b* b
! I0 a2 N# ?2 v+ S) U- r) T try {
2 |! M% ]/ w8 }5 Y Heatbug proto = (Heatbug) heatbugList.get (0);
( B' z* m9 d8 K$ L6 D Selector sel =
0 r L9 T9 X. R- r' D new Selector (proto.getClass (), "heatbugStep", false);
% F) a# k) ~! G' E% ]2 ~& I actionForEach =
. `7 B+ g2 ~$ r2 Y& \; f. _ modelActions.createFActionForEachHomogeneous$call, Z& I+ M- G9 K4 ~) B
(heatbugList,- r( L$ ]* m/ Z- N% P, W5 G
new FCallImpl (this, proto, sel,
6 A4 k3 S6 s! S. \9 T7 h5 S new FArgumentsImpl (this, sel)));% S! v5 O2 R- S: W- {2 C- I
} catch (Exception e) {3 W* i2 Z `+ X8 u
e.printStackTrace (System.err);
- c8 [+ n4 w& q. i1 E o1 u }
9 u. \5 _0 o8 v+ I5 E: N" d
* a% `2 g1 V4 H& z- G1 h- e syncUpdateOrder (); A0 f- j6 H- q5 ?9 V# M4 r
2 B" v; r! X( Z" T5 u7 Z' b
try {$ y! N" e. K' z: n
modelActions.createActionTo$message
6 @& j% O/ W$ C _2 Q( V; u! @ (heat, new Selector (heat.getClass (), "updateLattice", false));
" t. P8 S% h/ R) H R. Z } catch (Exception e) {
5 X0 T* g- O! U5 U/ {+ @9 [ System.err.println("Exception updateLattice: " + e.getMessage ()); B: f" b1 v& X/ s6 a2 i
}: }- }- }" x% N* b! R
: d+ \2 v& M9 E9 k- g
// Then we create a schedule that executes the9 ?& D3 F8 H) C
// modelActions. modelActions is an ActionGroup, by itself it- x$ x# W- w; ^, e# I
// has no notion of time. In order to have it executed in
+ v6 h5 Y3 `, ]+ \. } // time, we create a Schedule that says to use the
& I( t Q) Y+ d x, u5 M3 N // modelActions ActionGroup at particular times. This
4 X6 u3 c* _( J; @ // schedule has a repeat interval of 1, it will loop every
* M1 K% A _1 @5 k2 L // time step. The action is executed at time 0 relative to' x5 d I: ]( o1 Q. k2 R
// the beginning of the loop.
- `+ y" g# z* S. D6 Q- A; W) n9 D" F9 ]0 l3 ^
// This is a simple schedule, with only one action that is) i4 v6 P( q0 l; U/ k
// just repeated every time. See jmousetrap for more
# l) w* A5 l( L$ d' K5 ? // complicated schedules.
, N1 h8 Y& A0 u/ }+ R 8 w) k: E! }, I; O2 W
modelSchedule = new ScheduleImpl (getZone (), 1);
& n! A/ D0 h. X# j; l modelSchedule.at$createAction (0, modelActions);
) s& D7 K: d* n6 C3 ? : P0 H) G# A- B; N3 ?
return this;2 S) v* B. k7 T6 w; q/ N+ z) ?% T3 \
} |