HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- j! W3 x7 c' G! [) P- E& C+ T
( O( H' Q- p, N9 B+ @/ ? public Object buildActions () {" |- ]& o- [: g- \1 |! Z I. n
super.buildActions();6 R. M% ~# `. E% ?0 S
3 N5 `' K1 f& H) ?7 @7 \ // Create the list of simulation actions. We put these in
1 O. \1 f% a' l }' { // an action group, because we want these actions to be5 X! i) H: W, |
// executed in a specific order, but these steps should
' t. v! `/ Z! x6 S- _+ Z0 t p // take no (simulated) time. The M(foo) means "The message7 _: B% w! X5 ?5 P q1 c; u4 z+ J( r
// called <foo>". You can send a message To a particular% V4 m# t5 M0 @- `3 w
// object, or ForEach object in a collection.
; @: p- e" `& ~1 m% K1 h: Q, n* A
8 T( X0 i+ g/ V* h& k // Note we update the heatspace in two phases: first run
: R3 H- S% D# e' P! u3 f // diffusion, then run "updateWorld" to actually enact the7 d" F( o' M" g1 R
// changes the heatbugs have made. The ordering here is5 c: s+ `( K- [! i! d: p% n
// significant!( h5 c* v8 ]' f% q4 s" ]+ X T
' p7 N- K/ D ?1 z* x( N& a // Note also, that with the additional+ |) y& o$ N+ l1 Y# q( Z1 [
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ g" ]/ m7 q) d7 |2 C
// randomize the order in which the bugs actually run4 }( b# H. f) Z6 C, Y0 s
// their step rule. This has the effect of removing any3 m, a! \( I/ H" i0 K V
// systematic bias in the iteration throught the heatbug0 x3 L. I, k) j# |: B
// list from timestep to timestep
, u2 Q# H! V7 u% ?" D( ~/ F
) k3 N9 ]) U# v4 J1 D // By default, all `createActionForEach' modelActions have' q( v0 u, y0 }, ~) q
// a default order of `Sequential', which means that the
7 N6 |7 ?. R/ V& z // order of iteration through the `heatbugList' will be( x8 B D( F% Z
// identical (assuming the list order is not changed
, M/ o0 `$ v6 c // indirectly by some other process).1 f2 J) C: ^- D% _3 z I
: R4 |6 j$ ]0 |6 H
modelActions = new ActionGroupImpl (getZone ());
& W# K$ U6 [9 f
0 H9 r1 V8 D" v9 s1 U try {
0 l! q' K) p# T5 s' L/ B L. I modelActions.createActionTo$message
" q: r& A/ f$ S2 N- B4 Q (heat, new Selector (heat.getClass (), "stepRule", false));
. v- u% G4 q0 C ?! v; Z } catch (Exception e) {+ o" Z, T3 J0 A5 ]) \+ B
System.err.println ("Exception stepRule: " + e.getMessage ());+ @ E8 G4 X- K( l5 l
}
7 E% h( M8 v' {" x! ^% I
1 d+ O, s& x4 A! Z7 a try {
! I. h0 ?2 _/ n; S8 m* S$ e& O D Heatbug proto = (Heatbug) heatbugList.get (0);
- A5 g/ R- H( G6 R$ n' R# v( } Selector sel =
- t& ^- ?% i9 T ^' t new Selector (proto.getClass (), "heatbugStep", false);
. e/ a0 P9 R) k, T actionForEach =
6 Z- r7 ]& R5 Z+ ~! J modelActions.createFActionForEachHomogeneous$call; i9 k- j* o* p. N! V2 G; o
(heatbugList,
! Z5 t! F3 ^$ M" q3 ~% M, ] new FCallImpl (this, proto, sel," F7 ~/ i. C4 Y T
new FArgumentsImpl (this, sel)));
% P7 p8 G6 f- J+ R' y8 o5 k } catch (Exception e) {
) ^2 V5 D, H m. y e.printStackTrace (System.err);
+ A8 {# p+ L6 l1 u; K( o: ~; j }4 x5 a' a; L4 ]
- D; m- h' ?! i$ K: Y syncUpdateOrder ();
0 i9 H- V: z H, y' D, s- Z( \9 n4 Q6 ?: B
try {# I @; C. b h2 J( ]! i- U9 S
modelActions.createActionTo$message 8 t; A" K6 m4 Z8 w
(heat, new Selector (heat.getClass (), "updateLattice", false));
2 Y; `9 L/ \, V m" i0 C } catch (Exception e) {. q8 f3 W8 Y5 H' T" H) q* |
System.err.println("Exception updateLattice: " + e.getMessage ());% i+ B7 J+ X" U
}
6 J5 A) o# H6 n% N( s0 L( I) H2 B
: j; `& o4 M% j, ` // Then we create a schedule that executes the
. c) e- X# K! e1 h4 g- Q1 s4 E // modelActions. modelActions is an ActionGroup, by itself it
5 k9 g" D" r7 k // has no notion of time. In order to have it executed in
. U9 o G" i- o3 d% ~0 @ // time, we create a Schedule that says to use the' j" t$ b: ~5 |+ D
// modelActions ActionGroup at particular times. This$ s3 N# A, Z. x9 L2 L0 y' t: t1 j
// schedule has a repeat interval of 1, it will loop every: V. v# f7 b: I1 s8 X
// time step. The action is executed at time 0 relative to
# g. ^6 c/ U6 V. k6 q // the beginning of the loop.
) Z( w5 ^/ C" ~* d! O. D5 Q7 H8 i3 L, X# @
// This is a simple schedule, with only one action that is' v9 |, N3 F J: K
// just repeated every time. See jmousetrap for more2 X/ N( _+ l2 T8 l
// complicated schedules.: I3 `" D, G3 l: l( |% `0 ?/ v
* c; H4 v# _3 i$ L/ g; t6 r6 U- ~3 N) `
modelSchedule = new ScheduleImpl (getZone (), 1);
1 R& z7 B% X+ @! O+ c modelSchedule.at$createAction (0, modelActions);
4 @$ c* t- O9 K. j
9 D. _& J/ ^: | return this;
6 s' k! f- q7 `4 d! c7 I0 d } |