HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" U: o8 V$ ~7 w2 s4 r
5 u _9 x1 |& o3 m/ v public Object buildActions () {6 j1 i; } r ]/ w& l
super.buildActions();
* n l; I8 o' Z
( Z" I) F, t2 I' T // Create the list of simulation actions. We put these in( O2 p- X1 S5 ?
// an action group, because we want these actions to be; S$ F. {3 T* Y/ D) e7 b" f; {! B8 m
// executed in a specific order, but these steps should
% U( H9 @, g& \; b# C1 R3 q5 v7 F0 } // take no (simulated) time. The M(foo) means "The message
4 i' i3 w; C/ k0 ]) J8 F# P6 G // called <foo>". You can send a message To a particular* Q) Z+ k6 p5 \3 o
// object, or ForEach object in a collection.* k& H& _0 \& h' K; l4 G9 E: R4 @' l
( q) J* L4 \+ `, u8 A G2 k2 M. J // Note we update the heatspace in two phases: first run A2 }/ M# C! I5 C$ E4 ?
// diffusion, then run "updateWorld" to actually enact the9 n2 p* [' R. \# u3 I( B
// changes the heatbugs have made. The ordering here is
1 p; {( s: U: e5 E0 n // significant!6 u/ \, h6 S+ } C& s
Z8 u" d- Q& ~- q- {1 C
// Note also, that with the additional
1 y! A- X1 F' u8 q( w* K. c // `randomizeHeatbugUpdateOrder' Boolean flag we can
! S# t8 w+ l9 s4 q n, N* | // randomize the order in which the bugs actually run8 A; h' y% C' \( l1 o7 `
// their step rule. This has the effect of removing any: q, P! ^$ F- f7 D4 H3 s2 s" @
// systematic bias in the iteration throught the heatbug; r, ?' O0 q8 f5 o$ O
// list from timestep to timestep: s! i) F. J5 f9 N, S$ ]$ R0 M/ k
( R+ ^+ k3 b/ {9 U6 g
// By default, all `createActionForEach' modelActions have
( P) Z0 k2 A( t // a default order of `Sequential', which means that the
3 ^) C# Q( n M6 G7 m // order of iteration through the `heatbugList' will be/ f7 K- Z1 \0 F, ^5 {7 v
// identical (assuming the list order is not changed8 D$ x; r% A' t/ R5 p: ]" v) V
// indirectly by some other process).; F T! k2 X: F O8 J
5 u% f4 B% {0 M$ P9 T5 o- j0 I
modelActions = new ActionGroupImpl (getZone ());# ~. t# y# g+ p
3 R0 J0 y' F3 T+ D) a try {
6 @2 M& M* C" ` q6 h modelActions.createActionTo$message: g" Z! Y7 I5 l5 \% }' D3 X" ]
(heat, new Selector (heat.getClass (), "stepRule", false));9 I6 W: J! R& N, p: e
} catch (Exception e) { q8 s. P0 N3 Q
System.err.println ("Exception stepRule: " + e.getMessage ());
8 ~( C" L# y- A0 H0 P: u }
* z7 W# C7 B* v5 L, T) W/ k2 U8 B
0 H. O4 Y* p$ K! |+ a try {9 X, C, r7 a2 c
Heatbug proto = (Heatbug) heatbugList.get (0);
; @$ S+ `, J' k* K* _ Selector sel =
( ?! @! z7 d$ ^( ^7 X5 h$ C new Selector (proto.getClass (), "heatbugStep", false);
' j) R. ~6 ^5 B% i! ^ actionForEach =
- R# q! F+ z' q. _* P6 } modelActions.createFActionForEachHomogeneous$call4 j% ?1 d$ g: M- }0 u
(heatbugList,- r- V5 T' o, H
new FCallImpl (this, proto, sel,
- d' i' J7 ~$ J new FArgumentsImpl (this, sel)));
4 I/ ~7 \( z+ M } catch (Exception e) {
3 l2 n- |$ f, M' c* K W e. X/ E! L e.printStackTrace (System.err);: y0 s7 A, t" L5 z7 G
}
0 o% x4 z. w0 b" r/ ] ! |+ N9 j# Z, q- A
syncUpdateOrder ();# A) ^, g& X( }1 y5 y
8 ]; u: e3 Y% S, F. ?" B try {
6 W+ U2 r$ A2 j$ d0 @& x0 p modelActions.createActionTo$message
4 A9 }2 W& N. e$ }5 y! q6 m (heat, new Selector (heat.getClass (), "updateLattice", false));( p0 \5 `3 o* ~" y8 u
} catch (Exception e) {( Q- [3 t0 _8 f0 ^9 }$ G Z4 T8 v
System.err.println("Exception updateLattice: " + e.getMessage ());
- H1 a) j- X: A8 v% W }
, ?% w3 n2 n+ b4 a# g + X2 J, G( d v8 e* T6 r2 B
// Then we create a schedule that executes the! \$ f% ~7 T" s7 K' K
// modelActions. modelActions is an ActionGroup, by itself it7 M2 f7 A% d- y- m& u$ O& _) G+ v
// has no notion of time. In order to have it executed in3 ` I8 ?8 W8 E9 K9 E% }4 m
// time, we create a Schedule that says to use the: x0 |' T& Y- r% v! Y8 {& F
// modelActions ActionGroup at particular times. This
- V7 I% f. r1 c // schedule has a repeat interval of 1, it will loop every
; d4 n$ J$ G/ m // time step. The action is executed at time 0 relative to
1 w9 J& x9 s7 Q // the beginning of the loop.4 h _( M4 p$ F$ C
' n1 a/ e. q# {6 F! u& K // This is a simple schedule, with only one action that is
" ^" u3 y# _4 F; N- ^' x" t# S- d. B // just repeated every time. See jmousetrap for more# z2 k! x+ J% { w5 a) H' r6 E: m1 `
// complicated schedules.
0 V& k. x i+ H% V ( E; A- M7 p' _' r
modelSchedule = new ScheduleImpl (getZone (), 1); j4 J4 l0 Z; ]" P* j
modelSchedule.at$createAction (0, modelActions);0 L* @ [5 e0 \% i
4 K3 Y- i; V/ q( N return this;( |* o: _( L5 V, w( d/ Z+ t5 f
} |