HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 `) r% b# E' y" |; z+ r ~
& \! U2 v3 g; z public Object buildActions () {2 r y: {. ~5 _
super.buildActions();
* l Y1 v5 v5 d# ]3 l 3 E9 l$ S. _& l/ B
// Create the list of simulation actions. We put these in) J1 p/ `1 r. P* @: c3 i6 `( `
// an action group, because we want these actions to be% |0 M/ T: ]5 T
// executed in a specific order, but these steps should( Z- u3 I% l% Q0 O8 u$ Q
// take no (simulated) time. The M(foo) means "The message
7 i$ B# B, g. I6 X' r" \ // called <foo>". You can send a message To a particular8 A) g- ]& W; ~& w3 Y7 L, A3 N
// object, or ForEach object in a collection.
( ~, B4 H% X e 5 m, @- R1 y G- ?8 E7 |; \
// Note we update the heatspace in two phases: first run. }+ \5 |/ x* \( P* a# H
// diffusion, then run "updateWorld" to actually enact the
7 I- w& b2 I9 i* E# b* _8 l' S: S. \ // changes the heatbugs have made. The ordering here is' S+ j& u) m: ?
// significant!
( I$ `; ]. @/ @5 C1 u
: X B, y) H6 l1 }$ w: E) I5 G ] // Note also, that with the additional
8 |9 y; n. D( c // `randomizeHeatbugUpdateOrder' Boolean flag we can4 A4 D7 P0 ]% I& c7 k0 z
// randomize the order in which the bugs actually run( \# L8 B3 b6 l4 ]4 e
// their step rule. This has the effect of removing any
) G/ R6 L) {4 {1 Q Z // systematic bias in the iteration throught the heatbug) `: l7 N% ?7 T. |
// list from timestep to timestep5 r c9 M' j/ i d( p7 K
+ W1 V! d6 q; }$ M9 I
// By default, all `createActionForEach' modelActions have
4 W6 B4 \- J/ D* Z+ s) l" ] // a default order of `Sequential', which means that the
& X. @2 r. N7 s7 B // order of iteration through the `heatbugList' will be
( N* z9 p) I! ] // identical (assuming the list order is not changed
# \8 ]$ [% b% M' ~ // indirectly by some other process).
/ |' [7 m8 l; S F
; X2 V2 O% _8 S modelActions = new ActionGroupImpl (getZone ());
+ J2 y5 u5 ?2 `6 } K' b6 @
- V5 }+ f' _3 g5 G& b* X try {/ ]# ~" f9 b' A
modelActions.createActionTo$message
- `; S$ Y& z; l Q' n- v3 F1 \1 F (heat, new Selector (heat.getClass (), "stepRule", false));8 P. T7 {# o2 M3 k+ A/ X! o7 d
} catch (Exception e) {
/ I1 k! q' k! j9 U8 F System.err.println ("Exception stepRule: " + e.getMessage ()); n0 G/ t, N+ P# e
}* F+ E" V9 }1 w# e
Y1 q6 N9 r# V2 P try {
g2 r R1 ^6 s) h; B4 W Heatbug proto = (Heatbug) heatbugList.get (0);2 e$ _. K. e$ p6 \" M2 e$ v$ g
Selector sel = ( J& G! c" q8 x" l
new Selector (proto.getClass (), "heatbugStep", false);
6 |6 x. l1 l4 t7 k; d, R actionForEach =
: S) }, B) U" {, q modelActions.createFActionForEachHomogeneous$call& W7 d9 G4 @" q7 p7 }, C
(heatbugList,
- q2 L7 g8 e6 u+ | new FCallImpl (this, proto, sel,. j' }0 [+ q$ S+ V3 S/ V
new FArgumentsImpl (this, sel)));& E2 R q6 n3 R
} catch (Exception e) {7 \' R$ s+ `8 b: p; W$ z ?
e.printStackTrace (System.err);$ K2 {* _ H) D/ p+ O
}
0 T7 G0 v! h" c. @5 b$ x6 T + T0 b; Z& d8 I! ~5 e% q& v
syncUpdateOrder ();6 q: o$ o1 r( L) M4 x* U) K8 Y
( y4 j+ I1 m8 @3 J5 w3 g+ s. w; y
try {; B1 {8 k$ ]) M) L7 Q8 f! ^- }0 @6 t
modelActions.createActionTo$message 2 f( X* X! g* h+ u& Z
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 N. u' x& c2 K3 e# V* o8 R } catch (Exception e) {
% Q* i& ~; E' J7 }5 k" O: b System.err.println("Exception updateLattice: " + e.getMessage ());
/ A! F/ d5 a& q }6 S0 J4 Y$ f9 g: W
( O5 V# }7 E2 B3 U! z# r // Then we create a schedule that executes the9 j$ v0 n Z& ~* X# X
// modelActions. modelActions is an ActionGroup, by itself it3 B2 E$ o: s1 V* t b0 N
// has no notion of time. In order to have it executed in
& `, h9 J4 f% C3 Y" _) M // time, we create a Schedule that says to use the0 y. L3 W8 m) q \- S! L9 e+ F0 ^
// modelActions ActionGroup at particular times. This
3 F# V# i4 Y) j/ H // schedule has a repeat interval of 1, it will loop every
* ?/ S8 X2 J$ \# w" v // time step. The action is executed at time 0 relative to& V2 w+ H& a; n, K0 j, \
// the beginning of the loop.
/ t( c( `" E- q5 B! a+ ]' ]' [' A7 S a
// This is a simple schedule, with only one action that is2 o: b( I2 c6 X
// just repeated every time. See jmousetrap for more1 A: ?5 v- X( R, K( U7 t
// complicated schedules.4 `* h( e( N: A0 O% G- _
, t0 L$ w* T. a3 e modelSchedule = new ScheduleImpl (getZone (), 1);
/ h" T$ c9 b: p, A3 O modelSchedule.at$createAction (0, modelActions);
6 W, d4 Q, p8 S4 T8 j
1 E; ?$ ~7 V( `8 t return this; O& C6 n9 S# T/ m7 y& h" y
} |