HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 O( `9 v1 J Q5 n) i2 ?3 e* y& h0 ]4 i) V6 i
public Object buildActions () {* G* w. B5 Q' T
super.buildActions();
. v9 |: `* g7 g: H2 [! a # g+ ?3 k4 R1 M& S1 ?' i, K4 _5 E
// Create the list of simulation actions. We put these in
$ @) W6 j# T, ?1 v8 E // an action group, because we want these actions to be/ _5 _/ V# ^7 y, o$ h! e
// executed in a specific order, but these steps should
( B) A8 h1 i6 k' R. t5 H // take no (simulated) time. The M(foo) means "The message
5 v; r$ T) f5 } // called <foo>". You can send a message To a particular
# |' s# O& l0 L2 x5 i3 N' S8 u% @ // object, or ForEach object in a collection.: |0 N8 P' I5 c" ^1 {9 Y( m
, B3 |" S1 B/ J0 ^$ j // Note we update the heatspace in two phases: first run
1 f2 }# \+ C% x. Z // diffusion, then run "updateWorld" to actually enact the- h- P; m5 c, U
// changes the heatbugs have made. The ordering here is
! u* A9 J; V. [. E& M* l3 G! g // significant!, s) E) c: ]; M9 B# H
# ^1 ]) Y2 b/ M( [5 K! h+ u
// Note also, that with the additional7 u. C5 X4 A( m2 h) q+ |/ g
// `randomizeHeatbugUpdateOrder' Boolean flag we can$ i+ `8 P/ @$ B) Q, u9 q/ g+ E
// randomize the order in which the bugs actually run; D! n/ _) i6 D, ^
// their step rule. This has the effect of removing any5 ^/ n5 _/ Z. e( n/ ^: p5 L
// systematic bias in the iteration throught the heatbug
; ^7 f6 W9 C: [2 h; J- E // list from timestep to timestep! g7 t( M& T2 q: M7 ?5 K: N
5 S4 S+ I* r, s$ X
// By default, all `createActionForEach' modelActions have
- J* `' q9 F6 q* J V9 o: a // a default order of `Sequential', which means that the$ Q8 l$ Q) V: ^) [
// order of iteration through the `heatbugList' will be n% {( }& A" o" D p" f, D1 ~% n
// identical (assuming the list order is not changed
% {0 b; Z2 @& J4 H! m2 K5 B // indirectly by some other process).+ J' y+ ^% z9 v, I! P1 k
" ]2 a a2 `$ w$ e r
modelActions = new ActionGroupImpl (getZone ()); J" a, D3 z7 e, {) X& i
0 z5 h9 q2 E( z try {
* Y/ M) b6 |+ @! h/ \, B modelActions.createActionTo$message
0 W: f. F: Z" k! M: Y B7 C (heat, new Selector (heat.getClass (), "stepRule", false));
1 X7 ~) m3 N- m% w4 O } catch (Exception e) {2 l( ^" c$ P' i3 \9 g: A* p
System.err.println ("Exception stepRule: " + e.getMessage ());
9 {) B8 @% W" q, [+ _ }; n& l2 o) \6 Z6 p( D- C6 ]' w
$ j& }5 ]2 k, b! R try {/ |3 U4 i: j$ A
Heatbug proto = (Heatbug) heatbugList.get (0);" `$ c3 j4 X! m; L1 {+ F% r
Selector sel = / P2 W* ^4 ~# A7 B( `' n
new Selector (proto.getClass (), "heatbugStep", false);) k2 V4 [5 ^0 V6 R( {2 ?
actionForEach =
! h, |( j! t+ v' Z; n" n modelActions.createFActionForEachHomogeneous$call% p; h& e' S9 ^; S! H7 e8 D5 x2 Q
(heatbugList,8 A. N/ [, m9 A G( j$ [% U
new FCallImpl (this, proto, sel,
8 n, q. {3 a0 `0 C4 r8 z/ q* J new FArgumentsImpl (this, sel)));
- {* H' l- \5 H9 B2 ?5 B } catch (Exception e) {
+ z1 O/ S$ k" }! M2 w3 u K e.printStackTrace (System.err);
3 b0 q V1 _/ p9 l4 O3 n L }* r4 M& p# C0 ~7 ^% l/ Z. i/ {- Z' p
; @$ x' P) p! z8 P! {& z9 L+ H
syncUpdateOrder ();
. T8 \1 V4 d I; _( t- H
- u0 |+ f1 `! E try {
4 b! U0 R% Z, d; D modelActions.createActionTo$message
- P1 C" }/ _4 S8 N/ G. a# } (heat, new Selector (heat.getClass (), "updateLattice", false));. P: a) r& l- q1 R! X
} catch (Exception e) {
3 R( U, W6 n& @+ m/ l0 }2 d System.err.println("Exception updateLattice: " + e.getMessage ());
, M7 [* m( V8 M* }: ~2 X$ y }
! g: i. b! n1 E5 ? 6 P2 S" j- k/ Q4 L/ v, o
// Then we create a schedule that executes the
8 F9 w/ N, \" H* _0 {: e0 C // modelActions. modelActions is an ActionGroup, by itself it5 q7 p$ ` G. A# Y5 v- r4 B
// has no notion of time. In order to have it executed in* Y( W0 r1 x0 o# x! q. f S
// time, we create a Schedule that says to use the6 T4 {9 t9 ~$ x0 n6 ~
// modelActions ActionGroup at particular times. This
[3 m" u- m" z5 } // schedule has a repeat interval of 1, it will loop every
# R/ {$ v! v( m& j& K9 S // time step. The action is executed at time 0 relative to3 d a9 g8 e! Z; d0 Z& W
// the beginning of the loop.
" @$ q* @3 j2 f% N* s8 N+ `/ T. s ]7 @( J' d6 V5 M8 Q; E
// This is a simple schedule, with only one action that is( X2 e4 h+ i" [ W! v
// just repeated every time. See jmousetrap for more. R$ Z2 T- e$ G/ \' T
// complicated schedules.
/ y- w: X2 J) s5 J
6 x9 R( L6 a, }1 D' }* X1 Q! g# q) L% f modelSchedule = new ScheduleImpl (getZone (), 1);5 z) N1 b3 k8 E: U; U+ C/ ]
modelSchedule.at$createAction (0, modelActions);" v. b& y6 a* `+ B( _7 ^$ A: C
; _- J4 i, H' v: s- d4 A. W
return this;2 r* ?$ H V+ o8 t
} |