HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 n6 _9 p1 J% }. R- L4 p: N# G5 h8 g _$ D1 p
public Object buildActions () {5 r+ ]* U. d+ o8 h3 Z. t
super.buildActions();
! _) {# r; A* J6 L 1 j5 G N' ]# ]. V: a- B% R
// Create the list of simulation actions. We put these in/ a5 C& M" ~: M* V) i! R! H
// an action group, because we want these actions to be
* t( ~, v, Z2 a0 l // executed in a specific order, but these steps should$ i. J6 e" ?6 B! x8 \
// take no (simulated) time. The M(foo) means "The message7 N! ]6 u7 Q: k1 w# s
// called <foo>". You can send a message To a particular# d, C/ f9 V$ I
// object, or ForEach object in a collection.. h: m; }! T7 ]/ a9 Z
' P2 j8 e! y; j" q3 F$ w6 |
// Note we update the heatspace in two phases: first run; ?2 l5 O; o9 n$ O3 t" s
// diffusion, then run "updateWorld" to actually enact the
9 ]3 O% c0 Y( y // changes the heatbugs have made. The ordering here is+ I. c6 ]" a7 b: w5 p
// significant!
1 Z5 j+ P4 f) f/ o& _4 N9 m( z5 Z $ l8 ]2 z) R2 y" s i- R
// Note also, that with the additional
' x) h4 ]( H: y; Y // `randomizeHeatbugUpdateOrder' Boolean flag we can" h7 b0 ], o: k
// randomize the order in which the bugs actually run3 c5 q: ]9 n1 t) b
// their step rule. This has the effect of removing any2 m+ D' c' N8 Y6 ]! m- J5 U% Y
// systematic bias in the iteration throught the heatbug
* U% Z' u; v9 j7 q2 g* O4 n // list from timestep to timestep5 @! f0 a: H9 \3 A, f
" c! i4 c. S3 O( s9 } // By default, all `createActionForEach' modelActions have
/ s+ ?. i9 @ M" c# ~* A // a default order of `Sequential', which means that the4 \; J! t8 K- A0 B; N
// order of iteration through the `heatbugList' will be
1 g8 p1 G# f! |6 z. _2 G; y // identical (assuming the list order is not changed2 _/ s8 p3 \% K# @1 |/ b
// indirectly by some other process).# p/ h/ G# s! S8 e6 F0 q
# E7 H& a; a1 c$ |9 |& `
modelActions = new ActionGroupImpl (getZone ());
" ]; d9 U! {) Q# I! G+ @3 _9 P7 f- T! n( V" J
try {3 N9 U( ]) Q6 G3 x* ?
modelActions.createActionTo$message8 d' h3 R: }0 x/ r
(heat, new Selector (heat.getClass (), "stepRule", false));
$ o9 D c' t9 |- k } catch (Exception e) {
; T2 _# \4 y% H& W' c System.err.println ("Exception stepRule: " + e.getMessage ());# n& ~# _# f7 X) b+ Z, x J
}
3 E/ i- ?( {* E d! G9 ] W
' U; M6 c3 e: R. j! @5 w try {1 z! K" i* F2 N; ^9 x- c
Heatbug proto = (Heatbug) heatbugList.get (0);2 v7 F1 M% ~ W, X
Selector sel = ) N! _9 j& M1 Q, o/ P* I" z: J' Q' c
new Selector (proto.getClass (), "heatbugStep", false);; d) D* s9 V0 u0 S
actionForEach =9 s- w% d6 _' @6 s, I
modelActions.createFActionForEachHomogeneous$call
z5 E; T8 h& K- }0 q; z (heatbugList,
K1 {4 K2 M! y# L# Q( t new FCallImpl (this, proto, sel,; S$ r/ [) F0 E
new FArgumentsImpl (this, sel)));
2 [5 `& ~- L X7 o D; w } catch (Exception e) {
% A( s0 b3 L$ N/ k$ s B) i7 c e.printStackTrace (System.err);
, M; z0 N8 W! I# g) p }; G) L3 K8 @- M6 v. ~& q
8 G+ F. j7 d9 } i9 T
syncUpdateOrder ();
) V9 H8 G/ Z# p% B
3 g9 `. Q4 O2 j# I7 o try {
7 |" d L3 Z, K7 F: } modelActions.createActionTo$message
3 e, y( E6 [# h( S' l3 R (heat, new Selector (heat.getClass (), "updateLattice", false));
5 V# u# `8 I: @ } catch (Exception e) {$ ^3 \/ A# z( s# P, k, m
System.err.println("Exception updateLattice: " + e.getMessage ());
0 n+ ~8 e0 A6 _; f }
9 n9 ?1 v; Q9 ~, W * ?; d( J. K! T! S2 C1 l
// Then we create a schedule that executes the
6 x5 g) G# w/ O' }: D5 I6 i3 K/ ~& E // modelActions. modelActions is an ActionGroup, by itself it: r+ E6 ?/ N4 @, _5 t* E0 j
// has no notion of time. In order to have it executed in
5 Y3 w, U6 U& K! S5 ?6 v // time, we create a Schedule that says to use the& Z) W7 ~5 a4 C$ E9 t, f6 p8 g- P
// modelActions ActionGroup at particular times. This
* ^3 f9 V2 \9 \1 W/ Z# P // schedule has a repeat interval of 1, it will loop every9 ^+ f$ d# ^ @- h6 O: k$ I
// time step. The action is executed at time 0 relative to1 Z8 R3 l+ F# `% H4 m& T
// the beginning of the loop.
& t- w5 I; @; J1 E6 g! l3 e" y1 X" D& U
// This is a simple schedule, with only one action that is
; }& ]# Y$ j8 J- O // just repeated every time. See jmousetrap for more% y& ~) e$ J( r2 {; k+ p2 |- M8 U' {
// complicated schedules.& q/ p' ]3 [) }# {1 O7 Z& }
) V. W2 X" w: V( x modelSchedule = new ScheduleImpl (getZone (), 1);
: F$ s+ J7 i+ l& k modelSchedule.at$createAction (0, modelActions);( X: }$ Q1 J1 C
. f6 w' h$ m g
return this;* E! U( z {3 Z% v$ {: B- Y" n. C" r
} |