HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 m% K5 ?6 _! i1 j! Z- w- Y/ K/ a7 i- S) X; m2 e
public Object buildActions () {* {! e3 `: N2 [1 u* G9 d
super.buildActions();0 H1 m5 s9 D7 d# C, a
8 D$ w6 C4 e8 _, P' l6 b
// Create the list of simulation actions. We put these in
1 g$ I+ z/ _* t) j) D // an action group, because we want these actions to be3 Z) t& C5 X7 q0 o. W
// executed in a specific order, but these steps should
/ N6 {6 w! N& E, c t // take no (simulated) time. The M(foo) means "The message
$ y! q$ H% C4 I; X // called <foo>". You can send a message To a particular$ S' d9 ?5 X; R+ p$ v4 w9 d
// object, or ForEach object in a collection.: t) \" s1 j: {
1 |/ D* @2 U, h* H% _4 @4 V // Note we update the heatspace in two phases: first run- y# l2 \1 L( H( n
// diffusion, then run "updateWorld" to actually enact the B3 p( m- p# D# t/ I# t: s
// changes the heatbugs have made. The ordering here is
8 l: T6 u8 G0 B0 W // significant!
8 O) v5 x0 @1 h( Y3 ?1 W ; l3 E3 I) ?8 Q( l: m4 x
// Note also, that with the additional# B4 c5 B; y+ v5 n
// `randomizeHeatbugUpdateOrder' Boolean flag we can
Y3 r! t+ U) T3 f. L) p // randomize the order in which the bugs actually run( h2 Z& x* u2 A1 m' q: j
// their step rule. This has the effect of removing any
8 H! s& H4 P& l$ ^/ Q // systematic bias in the iteration throught the heatbug. d; q% q4 T2 J, x. g3 [7 y
// list from timestep to timestep
; P( t" I& X9 b0 C% l 7 k; i. H4 l+ | N
// By default, all `createActionForEach' modelActions have
5 G7 q7 L1 k5 ~( Z& b8 I* p% h7 Q- a // a default order of `Sequential', which means that the
( g. O$ o# {0 h1 x4 [$ T/ \ // order of iteration through the `heatbugList' will be
j' ]4 b" Y( i9 H k // identical (assuming the list order is not changed
4 C8 u1 ~0 {0 [1 ]4 T" K // indirectly by some other process).
/ _; S# O9 k8 F7 B0 k
1 h! `! d& T: f' Q+ [1 p' x6 w l. ^ modelActions = new ActionGroupImpl (getZone ());
% p* y. k7 @) B* U8 J1 J p$ O; m b4 o! G+ X1 f1 X, T
try {) ^6 C. |# v, r3 p5 b! f3 n# I
modelActions.createActionTo$message
2 s; f4 b% m$ |* N% i (heat, new Selector (heat.getClass (), "stepRule", false));( ~* t7 O# b, h1 e- d) @6 m
} catch (Exception e) {
0 I8 J( b+ C! X* t) o9 Q$ G System.err.println ("Exception stepRule: " + e.getMessage ());. u [/ Y# C- A& n6 y! Q3 Z0 f+ J* ~
}
% @+ q# f& \3 L' O. D3 h0 ]! y, t5 C0 V
try {1 W# T, [" |5 |# S6 P
Heatbug proto = (Heatbug) heatbugList.get (0);
( D0 i( ^! Y( z# y Selector sel = . S( ~1 Y5 X2 q6 }' a
new Selector (proto.getClass (), "heatbugStep", false);
x% q' p# T4 |2 P; K actionForEach =
3 Z9 ^4 w- G9 U- g modelActions.createFActionForEachHomogeneous$call) C v: B; D3 p( s
(heatbugList,* ^4 y8 e, G) `! Q% r0 i8 ?/ Q
new FCallImpl (this, proto, sel,+ d/ z9 ?1 I' O0 i* t. L
new FArgumentsImpl (this, sel)));2 [; a: ]. T& V( Z3 S
} catch (Exception e) {2 h8 h p# W/ y# m+ ~
e.printStackTrace (System.err);
4 I: J2 L$ U* p( F/ r, o }
) {2 r/ B. L/ r. A0 `: T3 t2 B3 C - d! y. r% C* V; B
syncUpdateOrder ();
* \; F" u7 C% _6 Q0 c2 G: |+ Y
4 |( {5 Q* i# z( D) R try { q j; d |' g; }0 j% {
modelActions.createActionTo$message
, D. u/ P9 N0 B I" I3 [8 C7 R; [ (heat, new Selector (heat.getClass (), "updateLattice", false));; L6 H1 g* ]$ D0 x
} catch (Exception e) {3 S5 [7 \7 O! o
System.err.println("Exception updateLattice: " + e.getMessage ());
/ }% v* o. n. c# H }. E9 ?4 j% K Y
5 u5 O- q/ S$ Z, c* O/ p9 G+ K2 q
// Then we create a schedule that executes the
- M$ \7 o$ Z$ q- k! t% \* f // modelActions. modelActions is an ActionGroup, by itself it7 P7 M. D" x; B
// has no notion of time. In order to have it executed in
4 D/ M$ } y$ o7 \' S // time, we create a Schedule that says to use the
& R$ ?6 G9 @) J- a/ K8 L // modelActions ActionGroup at particular times. This
3 |% h: ?- l+ R L G7 J // schedule has a repeat interval of 1, it will loop every' k- Y& M1 y# Q9 v- }
// time step. The action is executed at time 0 relative to
3 P s+ `9 \+ l/ I, x // the beginning of the loop.5 @3 ?8 j3 w6 `1 ^9 @% K# y
" y, M1 O1 ?& {
// This is a simple schedule, with only one action that is
' {1 ^' M9 D v // just repeated every time. See jmousetrap for more, g. Y6 |" x& W' G
// complicated schedules.+ }: P! P9 y @* N7 x ^$ L$ r
/ h1 p6 C6 f. l# s8 y modelSchedule = new ScheduleImpl (getZone (), 1);
3 b, b w/ s% i modelSchedule.at$createAction (0, modelActions); F' ]; l9 l/ z! n2 x
3 X W6 `4 o( a9 n
return this;! a [. F S+ R- s) Y- l
} |