HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 m! v3 H1 {' O/ S. r. \
( [: ?% {- {8 w( e( m# J! k5 `& a public Object buildActions () {
- x W, K* d, |4 \$ G" ^1 o super.buildActions();9 X! k/ W7 Q) r4 Z/ U+ k0 m
7 P) w/ i# v# z( O
// Create the list of simulation actions. We put these in
: P+ I3 r: {& M // an action group, because we want these actions to be! Z& r& [# g9 |) B
// executed in a specific order, but these steps should
4 ^5 k0 D. q7 ~9 C+ D2 ~ // take no (simulated) time. The M(foo) means "The message
- S a# g: _8 q2 M6 }7 }0 H // called <foo>". You can send a message To a particular
5 C3 a. C8 A2 e( e // object, or ForEach object in a collection.
% C! b: ^/ E5 ]* D0 b( F/ T- a; W
! n2 P+ b5 F* l6 a0 k1 ` // Note we update the heatspace in two phases: first run
5 |+ n0 j+ B+ L& \4 ? // diffusion, then run "updateWorld" to actually enact the$ l ~ R& f& J H4 |+ c9 o4 I. [, H( s1 y6 g
// changes the heatbugs have made. The ordering here is! h$ ~' ~; d; A* \( S' M3 [
// significant!
% s7 P6 `. \6 P) ]9 d
! Y' s# u! w0 X3 o) Q5 d // Note also, that with the additional
0 r1 ?- o0 b! s2 z9 l // `randomizeHeatbugUpdateOrder' Boolean flag we can
( e, C W* t! j9 Y // randomize the order in which the bugs actually run
2 z+ A6 t) o1 h; J5 d // their step rule. This has the effect of removing any
h6 H& u8 C: d; z3 z // systematic bias in the iteration throught the heatbug: T8 @# S3 o( y/ V; c4 f
// list from timestep to timestep7 n3 b: a2 g9 A: }$ u+ \1 w
! H; x ] c/ G% ~
// By default, all `createActionForEach' modelActions have
/ ?3 u7 {8 O. q* w2 ~: q // a default order of `Sequential', which means that the; q+ r" }5 }1 c" x
// order of iteration through the `heatbugList' will be
, E3 q1 _9 J7 e( G+ y // identical (assuming the list order is not changed( p( G+ @1 o* u
// indirectly by some other process).
# l8 x+ P3 h. S! E2 v
+ @; G8 x# D& T5 ?. T; I$ e- m2 P ? modelActions = new ActionGroupImpl (getZone ());) r) o5 v6 m: r$ j4 U
, Q- Z0 i$ f; @2 B try {( U) o# R- D3 r ~9 f- w
modelActions.createActionTo$message
" s3 S3 F6 i7 E2 P& M (heat, new Selector (heat.getClass (), "stepRule", false));
8 X, o" W0 i" \6 l } catch (Exception e) {
1 e/ z+ t) `; o. i3 i8 u3 b System.err.println ("Exception stepRule: " + e.getMessage ());0 I" N% O0 M/ }6 R5 S/ h
}
8 F9 b- w- J$ Y3 f
' w$ v; f4 i, n. w% v; n try {) h L! O5 P6 x, \
Heatbug proto = (Heatbug) heatbugList.get (0);
+ |9 ^) `1 t- s% T4 @; O Selector sel = A6 J3 D8 N! ]2 m" _
new Selector (proto.getClass (), "heatbugStep", false);0 X M5 t! P% v9 @
actionForEach =+ t# x O8 v: f" |7 B
modelActions.createFActionForEachHomogeneous$call( U1 C' D/ K \: G" q/ c E
(heatbugList,
' L7 i3 h0 T, r# |' J+ A) t* L: U new FCallImpl (this, proto, sel,% \3 i+ s' D( W* [
new FArgumentsImpl (this, sel)));8 y# K9 @8 _- |# X( A, X9 v
} catch (Exception e) {
& o' F; V' e; P) D, ~+ Z; b& r e.printStackTrace (System.err);
' n# Z; ]0 |0 [* K8 k0 }4 h }8 S1 F9 ]5 t8 l; w- c
6 H4 M8 n" B7 c) i: I" ^8 [7 O syncUpdateOrder ();
H. G$ L- n6 `8 Q2 @9 \
9 I8 T$ A* K. N/ W0 \6 X/ h$ k* P try {* z% E% b/ R) J1 x0 O
modelActions.createActionTo$message # L2 h/ B6 f2 \
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 r' c( c( B& \1 ~ M" a3 Z } catch (Exception e) {
' M) w* v( P* k8 F' A9 Z! \ System.err.println("Exception updateLattice: " + e.getMessage ());; l1 t. F" O1 f; [& j4 I% I
}6 U) }. r" a. @0 U
4 Z; g8 ]( @* Q0 z4 l" o! `, c) }6 i
// Then we create a schedule that executes the
4 U8 A) W$ s% C2 p // modelActions. modelActions is an ActionGroup, by itself it
5 |/ Z/ W" P/ D7 A9 [ // has no notion of time. In order to have it executed in# {) o6 R+ L. l
// time, we create a Schedule that says to use the7 @; G! ^# O( f+ R$ W5 H
// modelActions ActionGroup at particular times. This
2 a0 T1 \ U- L // schedule has a repeat interval of 1, it will loop every" C2 r4 {! u6 `- w
// time step. The action is executed at time 0 relative to
( O2 G' F/ ~4 P0 _+ H // the beginning of the loop.
Z+ }( p$ i2 K% u5 p; K7 E8 p
5 f% L* g0 J& ^# o7 Y // This is a simple schedule, with only one action that is
r% o3 m2 P8 S$ W! | // just repeated every time. See jmousetrap for more
) w8 P6 c1 d+ q# p // complicated schedules.# H7 O6 Z! n4 X9 R! [- C( V
5 q m1 U8 T$ S
modelSchedule = new ScheduleImpl (getZone (), 1);
8 J! _8 g1 B. Z* G modelSchedule.at$createAction (0, modelActions);- J% U+ U: `: y& X! i
6 H& R( V9 d0 J' o3 p' z+ R' ] return this;
; h% O% ?( s7 e2 v+ G* S9 x } |