HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 _" i( d5 Z2 e# A% n% h/ J' {2 a4 R( U% i' C0 [
public Object buildActions () {
6 ?8 t- E7 B' A5 h' h& h super.buildActions();
9 A: C" B9 r1 a2 D
1 Y' R P) h% [1 Q // Create the list of simulation actions. We put these in
2 i$ S) a! Y# h p3 o, r7 n // an action group, because we want these actions to be# \# I8 `7 o0 h0 M/ R
// executed in a specific order, but these steps should6 z( N0 G+ T1 ]8 H7 B
// take no (simulated) time. The M(foo) means "The message
6 e( N% j1 V) n6 x- h% @ // called <foo>". You can send a message To a particular* ]! x* L. f. I
// object, or ForEach object in a collection.( L7 i3 Z$ i$ p# N' t
x. ~% U7 v6 ^3 b1 c: H. N
// Note we update the heatspace in two phases: first run8 F4 {: |) p5 V, ?( z Q
// diffusion, then run "updateWorld" to actually enact the
, l7 d7 @: v8 T0 L* F! b5 u // changes the heatbugs have made. The ordering here is. V* ]; l/ O* @
// significant!- X& v7 i. G# u1 V p
, c. T4 ]8 k; F
// Note also, that with the additional
0 [" Y& K) o# e* x' W, z2 H; p // `randomizeHeatbugUpdateOrder' Boolean flag we can
) T; r1 ?4 F2 y# A' q- N // randomize the order in which the bugs actually run2 p1 `3 ` H* m3 G
// their step rule. This has the effect of removing any
4 a3 X9 c* R7 r/ x, U // systematic bias in the iteration throught the heatbug# ?; I: L' X6 S4 m( K
// list from timestep to timestep
5 J( x$ z% n* i2 j5 E- Q. ~, d9 g
! r7 s" Y! D6 o2 _9 H; T: C8 ` // By default, all `createActionForEach' modelActions have
' W. s% Y7 A) c* t2 m; s P$ X // a default order of `Sequential', which means that the) p7 f/ a8 E' {) U5 I8 |' P
// order of iteration through the `heatbugList' will be
+ @) x8 B/ y0 T+ R // identical (assuming the list order is not changed0 I- i J7 a/ W4 f& u4 x, k- [
// indirectly by some other process).
6 X' `, W0 ]0 ~1 [, D- s9 W3 A 8 h: \4 P4 N0 } g: j0 K8 [8 P9 }
modelActions = new ActionGroupImpl (getZone ());
" Q1 M. @% n B, Y! J9 ~6 e: `' L! k+ @/ {
try {
/ t/ `/ R# U N3 r @7 A modelActions.createActionTo$message
4 d& z$ q7 T2 Q$ V( X, L (heat, new Selector (heat.getClass (), "stepRule", false));
( n; L6 e2 \/ L& u* |5 f } catch (Exception e) {) I7 V; C! S6 w" p3 p- X
System.err.println ("Exception stepRule: " + e.getMessage ());
3 ~ u/ u1 n! v+ c' F }2 m" Z( e# v5 r, \( l0 y+ \
+ ~2 `4 Q% g# _( m try {* n3 @ z& v. r P) ?" J4 v
Heatbug proto = (Heatbug) heatbugList.get (0);, ^, j$ T* w! z8 l# q5 s
Selector sel = % v* g8 T+ B( Q6 b* |
new Selector (proto.getClass (), "heatbugStep", false);+ I4 F0 j& N, M, q) {! ^
actionForEach =
0 d7 s. ]. N0 l modelActions.createFActionForEachHomogeneous$call6 R$ Q5 ], h A6 ~# p" z7 ?
(heatbugList,5 p8 t9 m0 L. x+ i! ^
new FCallImpl (this, proto, sel,
" Y# I; x( ~" w( ?) f new FArgumentsImpl (this, sel)));) c& f& o1 |; o4 }3 F
} catch (Exception e) { ?) x' v& ?2 P8 Y2 Q0 |
e.printStackTrace (System.err);. m2 |/ p4 d( Y& s: Z4 E M
}
% \9 C" H O6 ^ ' K5 P M- M3 g# r! {3 N
syncUpdateOrder ();
) A! {$ C1 j, d3 |& q$ O, ~. j Z& A
try {
7 Y* q3 ^& G5 n& f2 N modelActions.createActionTo$message $ G0 `% r; R( R$ `$ L- `& l
(heat, new Selector (heat.getClass (), "updateLattice", false));/ A& d* ^) F5 K2 V
} catch (Exception e) {
7 N1 F# H2 G- ^+ K! h System.err.println("Exception updateLattice: " + e.getMessage ());
1 ^/ I4 ^* Q2 z }+ Y! `: M% l4 h0 z( \
3 v- @& d) m2 V0 f/ d // Then we create a schedule that executes the- T% h+ }' z1 O3 ~' @5 B+ a9 u
// modelActions. modelActions is an ActionGroup, by itself it, f) d1 _- C( ~; B) C
// has no notion of time. In order to have it executed in1 I+ G+ B+ D, X6 ~
// time, we create a Schedule that says to use the
! j5 B7 t9 P1 r/ Q" I7 r: N/ i // modelActions ActionGroup at particular times. This& R/ }. q2 S6 x, n6 F) w
// schedule has a repeat interval of 1, it will loop every( T" p; \- e1 d: ^
// time step. The action is executed at time 0 relative to, S6 |. N" H9 m
// the beginning of the loop.
' v7 L: h) h% n w6 b' \# M& o E, O, N& B- z! f( F
// This is a simple schedule, with only one action that is0 T/ t9 u! B5 O# ?# g' P
// just repeated every time. See jmousetrap for more( u( a( Y( M0 O% Y
// complicated schedules.
5 S6 f+ R, K+ `3 R" L ! A/ D8 H6 u) i+ T* C
modelSchedule = new ScheduleImpl (getZone (), 1);
# |3 F/ g$ `+ G1 y6 ^/ |/ W4 s modelSchedule.at$createAction (0, modelActions);
; z! |2 e: O, w8 J4 d" t& B
- H# U% L7 r# m; j' [; D return this;0 B# P% Q* `( R$ e0 X
} |