HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
( c ~% {" \- F+ G
; a# S+ P5 D2 n1 h3 v public Object buildActions () {
" ]4 B% O* p6 }! H6 F9 e) m4 j super.buildActions(); Z- r$ d. u$ v
" W$ A' j7 b3 ]0 j8 O // Create the list of simulation actions. We put these in
' T* a. i, c, E' V8 a1 w1 e // an action group, because we want these actions to be% Z0 S8 ]/ u/ i" U8 y, W2 p3 v
// executed in a specific order, but these steps should; V7 ^7 p* P" l- l) L$ K5 E
// take no (simulated) time. The M(foo) means "The message0 ~) T/ v: ^: h( H/ E
// called <foo>". You can send a message To a particular, }, `& M; O/ R g
// object, or ForEach object in a collection.
# f$ A% @6 n3 q) C7 n" H N$ j' @ ) q9 A' r# |9 f4 g! }
// Note we update the heatspace in two phases: first run
; X, R2 V+ X/ ?! l: b5 e8 B // diffusion, then run "updateWorld" to actually enact the
% k9 W! e. e! b6 q, G // changes the heatbugs have made. The ordering here is1 }# i5 k1 b8 j) R9 G
// significant!
0 |" e; r7 l( G
* f4 `4 i* D& N9 g' }6 |; Z // Note also, that with the additional7 \$ e' A8 O' p6 {* m# Q; N4 e- Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 ^4 M( K) T# V! k9 z6 D# ^) O
// randomize the order in which the bugs actually run
" Z7 y0 Z2 @* ^8 ~3 b // their step rule. This has the effect of removing any
5 P& J7 [- e L; m& ~3 y s // systematic bias in the iteration throught the heatbug
2 t7 [0 \! i } // list from timestep to timestep5 [1 j8 x; p1 Y7 e8 K
6 J9 h' p7 o) ]0 c5 K# u6 i // By default, all `createActionForEach' modelActions have% j! g& F8 f9 W1 l& a8 M1 L
// a default order of `Sequential', which means that the+ V1 [1 p0 o9 D3 [3 j7 R$ s, K
// order of iteration through the `heatbugList' will be
7 o1 x1 b1 H* z* D q // identical (assuming the list order is not changed
9 U- Q" u; l( x$ P; o; R5 ^ // indirectly by some other process).
( r; S( R7 ~+ [: z8 ?% G7 X6 o
- e0 s; _/ T4 x! N- ^. R modelActions = new ActionGroupImpl (getZone ());
2 f. ^1 c0 v( Y3 z
0 u8 E$ O: B9 a6 ~% u; _ @4 |. a try {
9 s# O2 c2 \+ N- _ W" C7 B modelActions.createActionTo$message! N; f u6 L; g) t$ _
(heat, new Selector (heat.getClass (), "stepRule", false));
$ a( J' `1 {* S+ p6 W( o } catch (Exception e) {& q7 V' ?" i1 m* M- i9 D
System.err.println ("Exception stepRule: " + e.getMessage ());
8 r( }9 j* w8 z0 n }
- k- C4 z T, i% Q
9 p1 o* `6 y! i3 t try {: R3 b7 H' H6 Z9 t4 n- l
Heatbug proto = (Heatbug) heatbugList.get (0);; p4 u6 l! w( l$ g4 c7 g% z
Selector sel = ( m4 n2 h8 E! {) p/ k3 `" Q
new Selector (proto.getClass (), "heatbugStep", false);
- u. e8 I+ Y& r T actionForEach =& E% m1 ]0 O8 h. A
modelActions.createFActionForEachHomogeneous$call# n7 d. U9 f4 P/ g% G9 L& W1 K" x, |
(heatbugList,
1 W7 C4 L9 |4 g5 o new FCallImpl (this, proto, sel,
$ P6 H, [/ ]9 P. @, e; _8 p) t new FArgumentsImpl (this, sel)));
# Z+ q9 s$ v- V } catch (Exception e) {" o+ t, G0 Z* V6 G& a
e.printStackTrace (System.err);2 C( r# R9 n) I* J: J/ _1 o# b
}
5 B6 g0 S& z; I; w! F 8 S7 ?, x2 d$ C
syncUpdateOrder ();' U5 _6 Q, c' X3 O8 Q# {: M* Y
$ F6 M9 ~1 R% q5 O+ f( R4 o; j9 [ try {+ E9 I9 z+ r7 \( p6 N& \- x
modelActions.createActionTo$message
! b2 K* E" _$ a1 M, u* ~+ O1 y (heat, new Selector (heat.getClass (), "updateLattice", false));
8 { R, e5 E7 |: z } catch (Exception e) {
1 Y9 t) F) b& {( t: u1 H System.err.println("Exception updateLattice: " + e.getMessage ());
7 \- W. c. [- s }9 m4 J. J Y/ E7 ^) R% ^0 o
( j( \6 _3 z9 q // Then we create a schedule that executes the. j) V& b! j F: I
// modelActions. modelActions is an ActionGroup, by itself it
' P8 r3 |( U. h. T+ K0 K // has no notion of time. In order to have it executed in
4 m& o L" D' Q4 l* g5 n- O // time, we create a Schedule that says to use the
% I9 G* j6 y% @2 v9 P // modelActions ActionGroup at particular times. This& w* @: [8 [* K
// schedule has a repeat interval of 1, it will loop every
6 I) a# c- N0 `; |/ w% s // time step. The action is executed at time 0 relative to2 Q- I }; |7 t0 u
// the beginning of the loop.: R( D* L( u* B9 p0 k. v1 C) Y
4 O3 G6 `1 C, v) k6 ^. M
// This is a simple schedule, with only one action that is
" X' l+ a o5 Z2 _9 u // just repeated every time. See jmousetrap for more
' ]: M$ J" W; G6 T( h8 O // complicated schedules.
' d0 n$ P: c0 l3 {6 b7 N
8 A6 D8 H& n& q+ `+ H- t+ J/ k; d modelSchedule = new ScheduleImpl (getZone (), 1);: j A8 ]( s( Z0 W
modelSchedule.at$createAction (0, modelActions);' T T. g, e; ?1 U2 F
. B$ n, B* J3 }7 G1 Q6 {% t return this;; u' P3 y+ I" s/ S, }
} |