HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% P5 J, ^1 b) Q; R# C* i5 a4 e: }' f$ P4 T+ ~
public Object buildActions () {( Y1 D. \/ z8 S( d% B; M1 }% T2 G
super.buildActions();0 f& Z) K( @9 H0 B. r9 M8 H
; b7 G# e$ \! S: x // Create the list of simulation actions. We put these in
& F9 q8 C( }( h# _, D) i# g$ f // an action group, because we want these actions to be8 }. i( p2 C( [: b0 i' X* y7 t
// executed in a specific order, but these steps should; K) n! X9 y4 A3 ~: l
// take no (simulated) time. The M(foo) means "The message
6 I8 ]8 A' }# k8 K7 H, Z6 l // called <foo>". You can send a message To a particular2 A, i/ H p0 [# a0 k% G' P
// object, or ForEach object in a collection.4 v) c1 _& g' c6 K
0 x8 F0 u' }) P$ u+ [/ c
// Note we update the heatspace in two phases: first run2 k* o" E* G* N
// diffusion, then run "updateWorld" to actually enact the( N) Y9 m5 g9 s! X: F7 y( c
// changes the heatbugs have made. The ordering here is" O. J9 t3 L$ |8 h- h. w0 W
// significant!' {3 x* N5 a8 V0 ~% e' \ s- f+ u
4 U# O C9 {9 O+ L // Note also, that with the additional, Q+ b; C$ y) b; ]# l
// `randomizeHeatbugUpdateOrder' Boolean flag we can: J; n2 J( x# Y5 K+ g
// randomize the order in which the bugs actually run
/ m: }4 c9 K# l2 T: f9 y5 W // their step rule. This has the effect of removing any1 s* M3 ?3 L, U Q% L: c
// systematic bias in the iteration throught the heatbug, a! O% n- H+ d9 _; S, B
// list from timestep to timestep
0 f* \2 D, z5 n0 V4 E+ G
e$ d; u9 k) b* P, m9 W // By default, all `createActionForEach' modelActions have
4 r# a$ W' ?% o& K0 @/ ^$ |& ^/ w // a default order of `Sequential', which means that the e# k, k# f# L( G' R7 m# S. O) `
// order of iteration through the `heatbugList' will be5 M+ I' N3 j/ f6 F- \8 ?
// identical (assuming the list order is not changed' X7 i* E7 U7 o
// indirectly by some other process).6 L4 q5 Y( O$ _ K% W
5 K' o% R/ Y3 Y4 j( H, v, Q0 X n modelActions = new ActionGroupImpl (getZone ());, ^: X( T( U0 {
& v: {5 V' v0 Q) B3 n3 I. I2 R5 Y try {
- L/ Y4 Y& O& y% \/ q2 I2 { modelActions.createActionTo$message# p' D! k( U: @; H! P
(heat, new Selector (heat.getClass (), "stepRule", false));
h" i! A' j: p0 J6 d+ T+ x } catch (Exception e) {( P% `$ n* b3 H6 w! F- F/ R) X
System.err.println ("Exception stepRule: " + e.getMessage ());
% f9 i" H( ~9 g }
4 c* F+ q% }+ M3 W2 q: y6 a8 {0 I: h- X- g% G* l8 R9 m7 V
try {. b% K! m( z/ t' s$ x" q( [: e) H/ D
Heatbug proto = (Heatbug) heatbugList.get (0);' H9 l, k8 T" u# G1 Q/ [, S* }+ P( E
Selector sel = 1 J/ a" N" _) s# l$ ~& m
new Selector (proto.getClass (), "heatbugStep", false);. \8 m7 Q8 `( F
actionForEach =' g5 E1 d+ V- Q2 ~* |
modelActions.createFActionForEachHomogeneous$call
9 W' L% r- x) I" J7 q( m/ F+ K (heatbugList,
" `% |, K1 q$ Z N* E" H new FCallImpl (this, proto, sel,) v& p( ]0 [9 ~) {+ I1 v1 @+ e, \
new FArgumentsImpl (this, sel)));3 A Q- D1 ~. T) E6 b, G2 a- O
} catch (Exception e) {
2 I& [4 N7 T1 f9 e L& j F e.printStackTrace (System.err);
9 ^# q; J& `1 o/ S/ a5 l. u/ | }2 t) v+ t/ O" X0 m
) P9 P k; b u5 _2 Z+ \# r- p4 _7 G
syncUpdateOrder ();
; [( v% a- z D9 V: o0 V; U& z+ d o
try {
1 k/ N8 j$ a5 N; W7 D3 Q modelActions.createActionTo$message
% J4 Q c+ n/ c9 E$ g (heat, new Selector (heat.getClass (), "updateLattice", false));
9 p5 F4 `* N- q; o- V } catch (Exception e) {' ^9 r# r+ q1 R. j
System.err.println("Exception updateLattice: " + e.getMessage ());0 z, W+ h# L0 \* V; T. C
}- `6 d& {3 H4 D8 L# ~
5 n( |% C& D' O M$ U
// Then we create a schedule that executes the
& Q! T; k% P: ?" @% e# m; E! w // modelActions. modelActions is an ActionGroup, by itself it
" t1 Q6 s7 c* g, {& l2 ~7 h3 O // has no notion of time. In order to have it executed in% X/ O/ B* G8 f) r/ E
// time, we create a Schedule that says to use the
: O2 }4 q9 o1 Q# x A; W N // modelActions ActionGroup at particular times. This1 c" F' h r. D
// schedule has a repeat interval of 1, it will loop every
- t& x; P9 r) X e, h- F // time step. The action is executed at time 0 relative to
; J) Y- a: c9 ]/ @/ J* G% i1 ` // the beginning of the loop.
3 `# \- F9 i+ C% b7 C" S s0 y8 I8 k9 m" L
// This is a simple schedule, with only one action that is
# n; q7 _/ ]" U4 V // just repeated every time. See jmousetrap for more" r! |6 {' x3 z6 ^
// complicated schedules.
' R/ G: Y) y R1 d" P
9 W5 \- G$ p- X6 b* x& H: Y) f modelSchedule = new ScheduleImpl (getZone (), 1);& d. ?* l! f! ~2 j
modelSchedule.at$createAction (0, modelActions);
' {$ x, Z8 }* M5 ?, p 2 `5 g+ U7 z |9 [0 ^% C
return this;7 V0 q% ? C3 Q. v: ]
} |