HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" a, l- c' D9 u( ?' r. L3 e/ S
" E! M5 g8 Y* Z7 r% t
public Object buildActions () {0 s7 y. ]2 i7 y6 e8 O
super.buildActions();3 \3 l1 t: J, ~8 F( F4 b u; g) _
5 S4 `' `8 u( Y0 u' L! t- f
// Create the list of simulation actions. We put these in) O0 b3 n& z& \" k- a9 `5 p
// an action group, because we want these actions to be
. K- k& T' E J // executed in a specific order, but these steps should
7 J, c- h* K" s: Y* U5 K* ?3 b // take no (simulated) time. The M(foo) means "The message- s+ d" S$ I) A. n4 w z
// called <foo>". You can send a message To a particular0 C" m' K \7 k" e' O3 ^
// object, or ForEach object in a collection.0 J+ y# k/ s% m* j$ Z; a: V" x. d3 ?
9 o3 O* F8 K5 j0 B. b
// Note we update the heatspace in two phases: first run
7 j9 B/ R9 r5 k: r2 H3 R6 h2 | C // diffusion, then run "updateWorld" to actually enact the9 L) z" ?$ ?( Y2 D
// changes the heatbugs have made. The ordering here is
, @ l, c" G, ?* }6 D, S9 ` // significant!" y6 P6 w3 x5 B% X
( _6 k! K& a$ T, ~8 P
// Note also, that with the additional
9 K: g* Z3 j5 q1 J3 H0 Y' Q! b // `randomizeHeatbugUpdateOrder' Boolean flag we can" X# j( c( R; _8 ~- W2 V9 E
// randomize the order in which the bugs actually run
; w. ^, ~ x/ C$ e; ` // their step rule. This has the effect of removing any
: ?( E. D* I* S, l // systematic bias in the iteration throught the heatbug
' a8 c# B, E) \3 X // list from timestep to timestep2 y, u! T+ L1 C( B0 Z) U
' }- b0 L! [5 s) Y9 I // By default, all `createActionForEach' modelActions have
2 N- t4 s, I7 _3 s4 p# q5 F- w+ { // a default order of `Sequential', which means that the: G" C7 J6 a2 Y- m: O) \
// order of iteration through the `heatbugList' will be& o5 x G/ _4 Z- Q/ U# G0 S0 Y
// identical (assuming the list order is not changed
, u! D) U6 h" e& v$ W // indirectly by some other process).
& B2 u4 f$ ]6 X/ @
. |. U: h! k7 p* i7 [ modelActions = new ActionGroupImpl (getZone ());) O- I; ?- F# w& v L y6 w
/ E% J# t3 V; T, a; O, X try {
! ~ l' X7 c0 ~% L; Q! {, ? modelActions.createActionTo$message3 t* @1 Z/ T5 N$ _; u/ d
(heat, new Selector (heat.getClass (), "stepRule", false));
/ X! j/ W; T' V, J' k# y } catch (Exception e) {
. i1 e! b( ]" v0 P% J2 C& m System.err.println ("Exception stepRule: " + e.getMessage ());
m: N0 ^& W5 G }9 Z4 P* H$ z6 H1 z2 b3 {! G4 ^
( y7 _" `9 d! }! a
try {
4 G1 @6 D3 {6 w+ L9 b Heatbug proto = (Heatbug) heatbugList.get (0);: @7 X3 S+ @0 E" R
Selector sel =
% F- D% s2 r: U+ C( d+ u% Y; a new Selector (proto.getClass (), "heatbugStep", false);4 q6 h3 f# ?+ S/ ]6 t3 [3 W. L
actionForEach =. t$ }$ Q, n& N! X2 C1 x2 n, \
modelActions.createFActionForEachHomogeneous$call
3 i, \/ ^ h& V (heatbugList," P+ V% h+ g6 m, P4 `
new FCallImpl (this, proto, sel,
+ v/ V3 U# i% q. a( M. t new FArgumentsImpl (this, sel)));, t6 r6 L) Y" p1 C$ q+ K1 y
} catch (Exception e) { V# Z% X+ p& N, d* f
e.printStackTrace (System.err);
5 e/ s) r" ~( K( ~* b% H- r }
* _' a# K9 q5 F# S0 E% w * Q& V2 Y2 ]) h5 |% ^( p4 {; I2 F
syncUpdateOrder ();
0 M3 e$ f6 F, F9 V2 |1 X, M9 F
# M1 i, [8 w+ X! N9 V try {# F, i. G5 U7 Z' K3 k
modelActions.createActionTo$message
' m1 f( K6 `3 E, Y (heat, new Selector (heat.getClass (), "updateLattice", false));
" R! Y B2 X4 q! c T) L( Q } catch (Exception e) {
' S2 M( O2 d5 |- n2 H n System.err.println("Exception updateLattice: " + e.getMessage ());) O" o2 d2 ` C, D1 N* }
}# \2 |/ x3 l/ U7 n1 H) N
4 K' v S1 \* F3 N) i
// Then we create a schedule that executes the
) z s- }7 a( y6 `0 y // modelActions. modelActions is an ActionGroup, by itself it
4 F8 V/ f7 d$ v6 @0 [9 A8 O# U // has no notion of time. In order to have it executed in- V7 [2 v9 p, {4 M M$ S; k+ F
// time, we create a Schedule that says to use the* l2 Z: y- w/ m
// modelActions ActionGroup at particular times. This
, D1 W/ ?" _" o: g! p) a( V; B9 K5 H // schedule has a repeat interval of 1, it will loop every
6 i! ?8 x S: @$ V" m // time step. The action is executed at time 0 relative to
1 f7 L+ m! Q# w // the beginning of the loop.* q0 n9 | ~2 [
7 ?/ K: X8 R" q* D // This is a simple schedule, with only one action that is% ?, o9 ?- `4 Z5 `
// just repeated every time. See jmousetrap for more& P! ~ a$ @' {0 W
// complicated schedules.
$ n8 N0 V% c# b3 E2 a. Y2 c" x; k . Z( Q4 Y4 D9 H W4 l
modelSchedule = new ScheduleImpl (getZone (), 1);1 V5 V8 t+ q ?" t4 \, e! b! e
modelSchedule.at$createAction (0, modelActions);, t0 s6 ^8 e3 y4 R
/ P' ~7 J7 F& V0 ]& w- n) W9 y( `$ o return this;4 {, n7 z4 O" e7 P
} |