HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 f; p# T" q9 o$ z6 N
8 m/ s) h }7 q2 j- K% s public Object buildActions () {
, f9 Q4 M/ t2 j6 H super.buildActions();
, e3 Y1 ?8 b! t4 `7 O. @+ W& W7 R6 f
2 a0 a% S! ]' A8 w! K // Create the list of simulation actions. We put these in2 F* C! f8 m! e! V7 u- I6 D
// an action group, because we want these actions to be
. T3 X! t# |* K. q2 N# u, X // executed in a specific order, but these steps should/ m3 r1 C- [7 k
// take no (simulated) time. The M(foo) means "The message
, z/ B- s6 t; z // called <foo>". You can send a message To a particular
( H C. _5 E- f& N" e // object, or ForEach object in a collection.) X/ f- [% {; D
* O- P3 m$ q8 R- u/ a
// Note we update the heatspace in two phases: first run
2 B; u) v+ ?/ w2 \ // diffusion, then run "updateWorld" to actually enact the9 k7 l$ A# n' d5 C$ {* \9 ?
// changes the heatbugs have made. The ordering here is
2 g# K7 g! q8 L& f7 H% _) } // significant!6 j/ h* X7 x# y8 K0 y3 X
( n% ?' ~/ ], E& D. J // Note also, that with the additional
" a! a: x" k$ } // `randomizeHeatbugUpdateOrder' Boolean flag we can
, n6 i* C& u# W/ b1 E8 s1 y6 P) Z // randomize the order in which the bugs actually run
5 x% A4 Z( _% d3 I // their step rule. This has the effect of removing any& j- A$ e: \+ d/ U' z- N' d+ J
// systematic bias in the iteration throught the heatbug
, a$ \& X, t; k+ q/ F8 _ // list from timestep to timestep
, e$ C$ Y0 ]$ G( \) _/ z) g
1 S) e( \. h4 H) x3 g9 N // By default, all `createActionForEach' modelActions have% G+ r5 ^ T4 W) R) C
// a default order of `Sequential', which means that the. {- r; ?; S1 j
// order of iteration through the `heatbugList' will be7 F% M7 F8 S4 j
// identical (assuming the list order is not changed
; X8 `2 ^# ~ ] // indirectly by some other process). B5 z" A. `4 I" Z) I$ A9 d, N, J1 T
/ i# F4 `' l% b* S6 }( p modelActions = new ActionGroupImpl (getZone ());' E9 W' D; V& L% v1 d7 x" h
$ M( I) n% g: C$ b
try {9 o: o/ o7 R% @( B: q: D
modelActions.createActionTo$message
0 E/ B! w0 o2 U# K (heat, new Selector (heat.getClass (), "stepRule", false));
: {: k$ i3 B' V3 b' H9 K* k } catch (Exception e) {
& A' k6 }1 F0 h6 ^% A8 {2 d System.err.println ("Exception stepRule: " + e.getMessage ());8 ?4 n0 \" d# [" N! Q3 v9 O
}
% T* x+ r5 x$ s: I* z, S0 C+ P' F
% `# V( E4 r; S9 Q! i6 B try {
$ o8 z! ?2 w8 m. x+ l Heatbug proto = (Heatbug) heatbugList.get (0);8 K5 r7 G5 Q$ w4 z0 V) r
Selector sel =
9 C7 O2 u. i: [1 V# {0 ^. L8 | new Selector (proto.getClass (), "heatbugStep", false);
" E5 L4 e/ \6 f actionForEach =
2 r1 z6 c6 s' q0 L9 A3 D modelActions.createFActionForEachHomogeneous$call4 l4 ]6 d+ F+ j/ g& l
(heatbugList,; s; A% m& n7 v8 W; p5 U" k4 x
new FCallImpl (this, proto, sel,
4 k4 ~, t. N8 Z8 \) n( ?5 L+ ~6 o( X new FArgumentsImpl (this, sel)));
& l3 D1 j) t$ d2 B% `9 ~% a7 l; N } catch (Exception e) {- d4 d& v2 C, G8 W
e.printStackTrace (System.err);6 q, m+ t; |! R4 m4 a% {# B
}
' H- ^6 |9 W; o8 j. O ' e' K+ T9 {, p4 [
syncUpdateOrder ();% x+ h k% Z, Q/ T0 n& M( q% @) o% `
; ^: p" g! |9 h
try {
6 r' I0 V7 f& |2 J. p modelActions.createActionTo$message ) X( w! [# t; l% X8 ?) _; J
(heat, new Selector (heat.getClass (), "updateLattice", false));
, ]8 V# W8 G' b2 x0 B# _ } catch (Exception e) {
' Q2 I- c0 X1 m; C. ?, X5 A: B System.err.println("Exception updateLattice: " + e.getMessage ());4 M- I7 s( n' S( a" n* A1 ]
}
$ e7 ?+ [4 v/ u8 Y" b
+ a6 r" w h( C" u/ u+ s' t // Then we create a schedule that executes the8 x( S4 F9 D; e ^" M/ `/ P( x
// modelActions. modelActions is an ActionGroup, by itself it
. a( C! J$ S4 a7 h; d // has no notion of time. In order to have it executed in* `% u u( F0 v4 R! O6 e
// time, we create a Schedule that says to use the
$ z: H$ J/ s: I/ d4 S$ P, {6 t // modelActions ActionGroup at particular times. This
, C% I# E- S: s4 K o // schedule has a repeat interval of 1, it will loop every
4 t& Y( w ?2 m7 p( [ // time step. The action is executed at time 0 relative to
5 N& n$ E! Z) ?: H7 Q& y // the beginning of the loop.! k* ?2 L4 `6 c. }) N
9 R$ D1 X- q* U5 q/ p7 W& g) W
// This is a simple schedule, with only one action that is$ t$ \9 b# R ^# Q) S
// just repeated every time. See jmousetrap for more
) j6 }" f& z8 I- Z // complicated schedules." t: p6 Z; v2 l+ X- }2 y% x
: u/ F0 k$ H+ f
modelSchedule = new ScheduleImpl (getZone (), 1);4 [3 `3 C2 F2 n/ o5 D, o' v
modelSchedule.at$createAction (0, modelActions);, a' t7 U* A% Q
8 ]( @3 s* d, A return this;( s6 C1 l; _# ^ F7 a5 \0 m% d/ U
} |