HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# l* j+ F6 c3 \+ {/ j) I R% i% @3 w4 n- v1 U
public Object buildActions () {
8 {( _# f. {+ X2 t5 t( I super.buildActions();
0 Q8 H& @$ T2 W- r+ ^! [# o* k
# a% d) a8 h- C2 I // Create the list of simulation actions. We put these in/ q w! b7 G, m% c0 S: |( Z, A
// an action group, because we want these actions to be- ]/ R( }' t4 X7 _% c; M) ^
// executed in a specific order, but these steps should9 v( w0 q& P& i) g+ N% Y
// take no (simulated) time. The M(foo) means "The message
$ a1 Y/ k, O- w) w1 d // called <foo>". You can send a message To a particular& M9 E- I( ^, {+ p
// object, or ForEach object in a collection.+ N$ L j% @' }; ~# |( M
1 V, J0 t, }2 J! Z1 c4 d, F // Note we update the heatspace in two phases: first run! d+ j& G. G4 I* t+ H/ r E" P
// diffusion, then run "updateWorld" to actually enact the
$ }5 d' ~ _" | // changes the heatbugs have made. The ordering here is) r6 E2 x5 ^' \5 y( }' u
// significant!1 k8 I! H, ^2 ]9 _- }4 |+ y
) V& @1 f! b# Q# C( S // Note also, that with the additional5 r7 `/ z, m, G& a0 t9 m! a" P" D
// `randomizeHeatbugUpdateOrder' Boolean flag we can
- l9 E3 f* Z6 @' ^6 B! P* D* F // randomize the order in which the bugs actually run1 O6 C/ s" W/ V( N
// their step rule. This has the effect of removing any
) Z3 ?0 r/ G* j5 r. J7 g // systematic bias in the iteration throught the heatbug
7 t' Z D/ X, O* L2 t0 L& S // list from timestep to timestep8 J( Z4 a: t W
: ~& b* z8 v/ @, x0 x+ J @) n' z
// By default, all `createActionForEach' modelActions have
# F! }; o$ k2 W" B) R // a default order of `Sequential', which means that the
* g$ Q: |( _# U* f% Q! a // order of iteration through the `heatbugList' will be& j0 `* y& S, h/ z4 A# x8 d
// identical (assuming the list order is not changed4 j$ P+ B4 N9 i( @
// indirectly by some other process).* c+ S& S, F. K$ |" }; [8 F
) D& Q* D- w% ~: v
modelActions = new ActionGroupImpl (getZone ());
7 W+ O7 l) _) x+ r
7 N& P- A q) x, }1 k1 L3 B7 m1 | try {
I& F! o1 R [" u% ?+ M modelActions.createActionTo$message+ G, x5 n( e" D7 R0 Z/ V" a4 \$ s# c
(heat, new Selector (heat.getClass (), "stepRule", false));
5 L6 `) V5 U9 d: ~3 n, z, J } catch (Exception e) {
0 w2 s9 Z! R$ W) a6 U1 ?: P System.err.println ("Exception stepRule: " + e.getMessage ());
; E5 s, f; K/ S& c& ? }
0 [ F, z5 f! V V
, }; U: L' u! q try {
( a- ^* i$ v; a3 j: ] Heatbug proto = (Heatbug) heatbugList.get (0);- [% b5 b6 t+ w6 b
Selector sel = 8 x" f- [5 ` C1 T; C1 R
new Selector (proto.getClass (), "heatbugStep", false);+ O; i- S9 s4 F2 u. a! o- r6 I5 z
actionForEach =
# b+ e2 R4 e/ R9 K modelActions.createFActionForEachHomogeneous$call k: w4 g6 Z6 [8 d$ Y
(heatbugList,
# b% {. F& f9 k& h4 O6 B new FCallImpl (this, proto, sel,: }& ]8 a* a: G
new FArgumentsImpl (this, sel)));
+ s, |1 Q# L1 c* \( i' n } catch (Exception e) {
; I0 i4 I' h9 O+ N$ k e.printStackTrace (System.err);$ W9 y; j/ v M# U
}- {% C; b9 \8 ~$ j
, b) Q! R9 X0 D; m, ~9 m syncUpdateOrder ();9 N: G$ L5 Q; C, ^
" Q$ {0 H8 S8 Z4 R
try {- j2 I$ a: ^' A3 j+ V9 p
modelActions.createActionTo$message 2 G6 r2 p% M- M" O! N5 n( r
(heat, new Selector (heat.getClass (), "updateLattice", false));) m9 ` d$ R. ^2 D& s$ H, {: T
} catch (Exception e) {
' Q" a3 ?3 r3 e6 ] System.err.println("Exception updateLattice: " + e.getMessage ());( c$ V8 h% S' W2 `/ `+ N' y
}2 `- G; H; r7 A% d* `
. p2 S0 j/ V3 H, A
// Then we create a schedule that executes the$ G! ^# v2 ]; {
// modelActions. modelActions is an ActionGroup, by itself it# p: V/ `% L2 S# q, }
// has no notion of time. In order to have it executed in( l. n1 `" S- z% t; y2 l
// time, we create a Schedule that says to use the3 E- O7 @$ k2 ]! l+ A( d X3 [2 L
// modelActions ActionGroup at particular times. This$ B7 d, C% s. f5 h4 {$ o8 L
// schedule has a repeat interval of 1, it will loop every: K. {9 k" \: w1 n( A& |# S
// time step. The action is executed at time 0 relative to4 h O+ V$ i2 A$ v
// the beginning of the loop.
/ f: [. v7 p4 R1 d8 L9 y; e/ p0 j4 y1 P4 H- y4 V* B% ?4 K2 G
// This is a simple schedule, with only one action that is
- f' d5 D4 o: v L // just repeated every time. See jmousetrap for more6 c4 C: I- a0 r
// complicated schedules.. U4 o- p! d9 P) {
8 x$ h2 {+ W6 U modelSchedule = new ScheduleImpl (getZone (), 1);
, }4 C' e' c5 o& h modelSchedule.at$createAction (0, modelActions);6 N5 n, v" J6 ?" R) \; q
$ y6 x7 E) @( h( t. P
return this;9 x7 I( n1 {7 G' b* t
} |