HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
: ^+ n# m7 d( h& x5 B* G/ o3 q* g6 [( h5 S) F
public Object buildActions () {" r7 {+ i6 I. A' f( |# p b* p
super.buildActions();
6 ~# o/ J n; m5 g
) a+ ]# M: v8 D8 K# f // Create the list of simulation actions. We put these in' c. ` \+ ~$ C: @8 j y( e
// an action group, because we want these actions to be7 Q2 M: x8 n& F
// executed in a specific order, but these steps should
% z4 V7 @- R! O1 d& P: V5 W% A // take no (simulated) time. The M(foo) means "The message" A. m2 V6 o4 l/ E; B9 `
// called <foo>". You can send a message To a particular+ [. @' _* Z7 E8 n
// object, or ForEach object in a collection.
+ X" J u% G7 n- P : i6 H1 z3 U' M; J: }
// Note we update the heatspace in two phases: first run+ J; S6 S# T/ r S6 S
// diffusion, then run "updateWorld" to actually enact the
4 x1 {1 i8 N; Z- Q# M // changes the heatbugs have made. The ordering here is
% A( B) R m) n+ n* i: ^/ m$ ? // significant!* j! y6 e0 l# Q \9 z
9 ?* i4 ~& T4 J. |: \7 R // Note also, that with the additional, y3 o, [* ^1 ~7 c% p! \
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 I. s2 N) R+ b' P // randomize the order in which the bugs actually run
4 x' b. T0 F" @% R. x8 f // their step rule. This has the effect of removing any
( L! E. K5 y9 j9 i9 {; p3 o6 u+ ? // systematic bias in the iteration throught the heatbug/ _ H. z1 e( R0 v( d3 u5 u
// list from timestep to timestep
& p" @ x8 S+ ?2 k! x* O' o% s* R4 h& H2 [
1 r9 O: f! A" e4 h( Y( T // By default, all `createActionForEach' modelActions have
6 P2 i! q! D- w8 s# \- o5 F9 R7 V // a default order of `Sequential', which means that the
- M) }$ g h& Z1 w N2 u // order of iteration through the `heatbugList' will be) B2 i' u, j" V
// identical (assuming the list order is not changed
+ |7 F/ O9 E. B! F // indirectly by some other process).
3 U0 M# ^6 q1 V! A x6 O; ^ " Z- j/ d. p6 n# F
modelActions = new ActionGroupImpl (getZone ());
( P: f' W. G, `. @7 M. C6 a2 n3 e$ m {9 g
try {
I* b4 I& E) t: A modelActions.createActionTo$message
' g# }, n! K4 l1 v# ~ (heat, new Selector (heat.getClass (), "stepRule", false));4 w! i3 l1 s7 w/ P
} catch (Exception e) {
" U' U/ w/ i; V' A \% y System.err.println ("Exception stepRule: " + e.getMessage ());( }" X( p+ M8 |9 K
}' M; w1 Z3 w) {8 Q# {
9 N/ l- W+ m$ c1 H3 `- S4 O try {! S$ i5 e# a; x; L/ d- y! T
Heatbug proto = (Heatbug) heatbugList.get (0);
7 @& _& O. K4 w- T+ I' B( P% z Selector sel = # u: G+ K5 z4 X$ I# b6 m _
new Selector (proto.getClass (), "heatbugStep", false);
3 P: |9 A4 G8 W& F actionForEach =
; R2 Q5 |6 d3 R9 S/ y modelActions.createFActionForEachHomogeneous$call
6 l% t8 F8 w& j/ ~& ?, Q+ J+ z (heatbugList,! T$ v+ @; f7 D) W1 L# N @
new FCallImpl (this, proto, sel,) f, Y+ P, G7 I, i& `
new FArgumentsImpl (this, sel)));8 t. X' G* J; G+ v
} catch (Exception e) {0 O6 F7 A: k8 N
e.printStackTrace (System.err);, X6 e) l: e. J) F3 i' c* F6 H
}; a7 B$ k3 v2 A0 f
P* {; o# k; u. x, ^ syncUpdateOrder ();
0 O) p. Q6 H. h8 @/ j
# e" s9 M: P/ g( n2 z5 b3 { try {9 m, `# c' d2 T/ o: p4 k, J) b
modelActions.createActionTo$message + k+ h7 b0 v. f4 y4 g) \
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 p* C7 ~6 a/ S# ?$ d } catch (Exception e) {
; D7 t' N, [0 [$ P System.err.println("Exception updateLattice: " + e.getMessage ());
- n" Z. T, |2 a, D }( B9 K( S* C" R& K: B$ s- |
8 \! S0 m, N s- T( `" f6 T- s5 b
// Then we create a schedule that executes the
( @, F- o& f# V* V7 ^6 I // modelActions. modelActions is an ActionGroup, by itself it% K5 a0 H6 E, k1 Q3 O% ]
// has no notion of time. In order to have it executed in
' q7 r3 T! {0 l$ ?* }6 t v' D // time, we create a Schedule that says to use the
" ?5 W4 `5 f. {; t // modelActions ActionGroup at particular times. This! z% F+ H, _ l6 i% B. L1 J
// schedule has a repeat interval of 1, it will loop every
, e1 ]' U) m) e4 [ // time step. The action is executed at time 0 relative to/ E' l6 y! V% |, d( T" O! [5 ]1 p) r
// the beginning of the loop.; |/ X* |: H, [) }8 K% H8 k
2 K! b9 V7 L; P6 L" O8 o3 `/ l // This is a simple schedule, with only one action that is6 C' V2 r: X- V: ]7 u# c" J
// just repeated every time. See jmousetrap for more" b: A, T% T% f3 W* ~7 l9 d5 {
// complicated schedules.) e$ J7 B0 \; ]2 h8 V& \/ s
2 V9 x" Q' U' H5 ? modelSchedule = new ScheduleImpl (getZone (), 1);! w8 w* Z# [7 W5 y; f0 b. B
modelSchedule.at$createAction (0, modelActions);5 }1 ~7 j2 S6 t$ T# p. {) M) E, j
5 K/ p5 _; x3 k+ \, v6 s return this;& c. b" n0 S" T0 ?; r
} |