HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
6 f, ]0 B! B; x* i R8 L) L. ?' A: E7 T% |! x) \
public Object buildActions () {
2 j+ M" v! d4 u& z$ w& v super.buildActions();
# e3 i2 V8 @0 W: P9 K9 c: Y 0 s; X3 y H) h2 J2 y3 z. d V3 u
// Create the list of simulation actions. We put these in+ c# q" j" a" _9 e
// an action group, because we want these actions to be
4 y# O5 O c- X& l9 ^$ p // executed in a specific order, but these steps should
* l) n5 i$ z9 c9 l7 P6 T // take no (simulated) time. The M(foo) means "The message
m1 j5 B! M- S ], i' c' q // called <foo>". You can send a message To a particular- A7 T z6 p6 `+ y
// object, or ForEach object in a collection.+ l, ^" K. ]9 G" I% r3 K
7 V' |" W0 @( @( n8 w // Note we update the heatspace in two phases: first run' o i# W ?+ e* G( J2 s; f, p+ U
// diffusion, then run "updateWorld" to actually enact the
7 }6 d2 c5 w! _9 n // changes the heatbugs have made. The ordering here is
2 U ~, v& S" t) S( b // significant!! Y: M4 }# ]: s" `0 q
9 ~8 v4 L) P" z$ F/ z' ]
// Note also, that with the additional
/ Q- z0 ~* n$ o // `randomizeHeatbugUpdateOrder' Boolean flag we can
0 U1 h5 c: e. r, q( |. X // randomize the order in which the bugs actually run/ y4 K' ?) i7 k# i& e5 q$ V
// their step rule. This has the effect of removing any9 y/ G v, N; }( T3 O- N2 o6 Q2 k
// systematic bias in the iteration throught the heatbug
1 T6 L% U1 P% _2 @$ r // list from timestep to timestep
* }( b _; e/ s- E# F/ }& o 4 L5 k- e' B5 K7 j% G7 X: U
// By default, all `createActionForEach' modelActions have% L2 W6 {8 I3 D. Z. W% z: X3 x; A+ K9 f
// a default order of `Sequential', which means that the
1 v7 r% s n! q: S2 X. s9 X# F$ ? // order of iteration through the `heatbugList' will be
8 V/ y) K6 G3 y& {& ^6 r // identical (assuming the list order is not changed# P% Y/ v4 K' e- E
// indirectly by some other process).
' M% w1 p' B0 v! z+ Y 0 }) n$ w4 N: |6 C
modelActions = new ActionGroupImpl (getZone ());
& R2 o# l# ~0 {& \4 N$ P- u8 n f* m
try {% L0 o! `0 w! V& y. X$ v
modelActions.createActionTo$message
/ _$ M# l- i) l+ I ~, o8 Y L (heat, new Selector (heat.getClass (), "stepRule", false));
1 U. z" o, i: C; y, N: s5 n } catch (Exception e) {
: P4 r# G6 W( C* A6 z% s9 r System.err.println ("Exception stepRule: " + e.getMessage ());" K# ^- r) H: r- |4 T+ L
}
5 ~, C5 L: u1 i% C% o$ s, X( o9 K, a: j/ W$ S6 w7 W! t
try {
" O/ q) C0 Y7 ]1 x6 K$ z; x Heatbug proto = (Heatbug) heatbugList.get (0);
* L! `. a0 I; f" l# { Selector sel = * y" v7 ?- P( x, Y
new Selector (proto.getClass (), "heatbugStep", false);
. T/ _# F, t6 E0 I8 j actionForEach =
0 ~- t# L1 c' D8 R+ a: o modelActions.createFActionForEachHomogeneous$call" j; L4 d: g6 {, W, G. V7 }
(heatbugList,
" Y$ @; |2 b! ^. P; z1 F new FCallImpl (this, proto, sel,
# ]' H- U6 J0 h6 J" ?/ P* l" l8 w. c new FArgumentsImpl (this, sel)));
% A5 l4 d- t8 } } catch (Exception e) {
3 ~% k2 O2 X# H e.printStackTrace (System.err);# a9 K4 ^3 U0 X3 b5 |2 W8 J
}
3 N( w& p$ c+ m, W! U6 S + T/ u/ B2 O7 {0 W: T3 H0 t
syncUpdateOrder ();; P8 X& j& j4 Z) t; K
6 b1 d& q/ S0 n4 x8 J" s' q
try {. O: s3 Z/ n7 d: s( M
modelActions.createActionTo$message 5 ]5 `( N- A- U2 c$ f7 q; |1 b$ a
(heat, new Selector (heat.getClass (), "updateLattice", false));
( z" J) @; S Z9 Q } catch (Exception e) {
; W6 n$ K- V1 v5 X System.err.println("Exception updateLattice: " + e.getMessage ());! o& w) r3 Y+ @- n9 s$ y
}
2 ~8 g& r. K+ J0 N ) ^6 W6 Q& g( I8 H w B# X* L7 L$ y' c
// Then we create a schedule that executes the" C3 F7 p7 f+ J- J( I
// modelActions. modelActions is an ActionGroup, by itself it
$ p# i6 i( J9 s+ j // has no notion of time. In order to have it executed in
) d! x1 m. Q4 u+ b1 R/ e // time, we create a Schedule that says to use the
" e) G4 j4 V# p$ R // modelActions ActionGroup at particular times. This1 \: H9 Y0 s! J5 U& }8 @
// schedule has a repeat interval of 1, it will loop every
4 q6 t# }1 N6 ?' j7 U // time step. The action is executed at time 0 relative to
- e, I) @# D5 w( V9 I& S5 m // the beginning of the loop.$ C9 t) U0 e) [' [
3 h& C! l' L& K0 E; t0 n4 c
// This is a simple schedule, with only one action that is
+ B0 A; h" X% Z; Q8 k$ l' V" T( w5 _ // just repeated every time. See jmousetrap for more) Y5 z, S, I0 k: ^8 \% v
// complicated schedules.
2 q- [ j- o( x |% @/ a. F
+ U/ ~+ i! R% c- E' [; M modelSchedule = new ScheduleImpl (getZone (), 1);
H* P& c2 _* U) U modelSchedule.at$createAction (0, modelActions);* v6 }) A3 ?% v4 X/ v
/ T1 y1 ?5 ], D# w5 z return this;/ p% Z3 D, K, B$ N
} |