HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& @$ {& R0 E8 a. _/ f' A8 }) e+ }8 @$ @9 y. @* {
public Object buildActions () {3 K1 L* ?4 Z( K
super.buildActions();
: M& b/ S. j6 y4 h* D) |
' B6 ~5 e3 B8 a6 w4 q( ^ // Create the list of simulation actions. We put these in. I2 B- Y! E; E0 k$ R2 q5 w0 x! D
// an action group, because we want these actions to be
& o) s, ^2 i' H$ i4 [ // executed in a specific order, but these steps should. t$ |" I Q/ e7 U
// take no (simulated) time. The M(foo) means "The message
' V0 `2 U% L4 I. z7 I5 \0 r4 g // called <foo>". You can send a message To a particular
2 F+ o. Z: |* J // object, or ForEach object in a collection.; U1 R9 c- T! {* l
: p5 l$ Z. l/ V: g6 Y0 x // Note we update the heatspace in two phases: first run7 k$ N1 u5 H0 h: v7 x) `: p" H
// diffusion, then run "updateWorld" to actually enact the
) f: f( l7 D N0 p* \# A( G: ]7 ]1 k6 J9 `! S // changes the heatbugs have made. The ordering here is0 w5 L3 C. _. x' M0 \
// significant!
& R' S7 b! T+ R5 W6 E% y2 j ! ~9 @' E; m( v+ W* \
// Note also, that with the additional+ _2 v0 n& l! n* H. H% Z) r7 z& x6 d
// `randomizeHeatbugUpdateOrder' Boolean flag we can
4 b/ Q! v9 f3 \ g' B8 G // randomize the order in which the bugs actually run) [+ K) b! z o3 |6 r$ k
// their step rule. This has the effect of removing any2 p. R/ |$ }, A8 K
// systematic bias in the iteration throught the heatbug1 \0 n# i4 g! R- _8 j* X1 U
// list from timestep to timestep
4 I- K$ r4 Z$ ]$ G8 I; ^8 i7 v 3 }' m, v% p/ {' h1 {
// By default, all `createActionForEach' modelActions have2 m! y; U2 T2 ^" h9 |9 l$ p7 z. F
// a default order of `Sequential', which means that the) D0 Y/ D2 ~3 y+ I( j, n8 D U
// order of iteration through the `heatbugList' will be
) e% S: k. W( n5 d2 Q; N% U // identical (assuming the list order is not changed
- Z- Y9 I9 U2 e {5 H$ O6 z // indirectly by some other process)./ E( i; w) V. U+ K
; m0 ?. A; g" A6 I3 a modelActions = new ActionGroupImpl (getZone ());
) w% ~+ y) `- T" \: w h8 u1 U7 r9 k! V: E y y# o8 ^( c6 r
try {
9 V: f) d& a9 }7 U modelActions.createActionTo$message/ y& A9 L5 k0 f5 ?6 w$ A
(heat, new Selector (heat.getClass (), "stepRule", false));
3 _3 [& v' t' B3 y } catch (Exception e) {4 } s2 k+ }3 l
System.err.println ("Exception stepRule: " + e.getMessage ());
- l# G! H1 q/ S! s }
3 Q# X* W; c& J
2 ], X; B1 {( ]6 a, G. G. }; _( ^ try {
- c- x0 }- G1 J0 d$ ^6 S Heatbug proto = (Heatbug) heatbugList.get (0);% c" r5 b- k0 i/ ?
Selector sel = 0 A2 I$ M6 z/ K/ c
new Selector (proto.getClass (), "heatbugStep", false);! A! v3 ^- A- Z- T4 s0 _, t
actionForEach =7 p( q: x% V$ ?/ Q0 y
modelActions.createFActionForEachHomogeneous$call
5 Q& n0 x3 a& D) X+ J" r+ }6 G/ t (heatbugList,
/ E! {: N; ~) f a0 k new FCallImpl (this, proto, sel,
8 N" n+ P- i3 ?! P new FArgumentsImpl (this, sel)));
+ }$ B. S' J# h } catch (Exception e) {
9 D: x9 Y( Q) m4 i" C e.printStackTrace (System.err);
" c$ e, O" B: s2 g# {- h1 I0 r; f }/ j8 L+ }% N4 t! u* A
! g0 w, _/ i y3 @ syncUpdateOrder ();
' P+ J+ X) B" Q$ Y( U0 X/ Z2 }) z; C# R/ Q. F4 K& e
try {
: k3 h1 [ ]: c2 K( E9 E# U modelActions.createActionTo$message
; F- V. ], h! O) A3 Y+ } (heat, new Selector (heat.getClass (), "updateLattice", false));
* p ?2 X2 S- ~7 C+ O% O: \6 N0 h b } catch (Exception e) {
7 T D# d8 w5 ~! l1 B5 V2 i9 k System.err.println("Exception updateLattice: " + e.getMessage ());
6 R2 d6 c/ h* B% }/ B; ?, j6 g* V }2 Z' I5 }. R: e
9 m* m. w# ], ^7 B. O // Then we create a schedule that executes the4 o' R3 j7 S& m
// modelActions. modelActions is an ActionGroup, by itself it
7 x: Q3 T+ t" h( N" z // has no notion of time. In order to have it executed in2 A9 W! m6 F q) k, ?3 N0 S5 D4 z
// time, we create a Schedule that says to use the
% @1 a3 r* M7 H2 r // modelActions ActionGroup at particular times. This
1 t3 h3 ~* Q0 z) g$ u& r8 I // schedule has a repeat interval of 1, it will loop every8 `% B2 A$ m4 w( s ]6 `
// time step. The action is executed at time 0 relative to5 p, t! v$ C+ L
// the beginning of the loop.% \7 K" i9 l) r( Q
0 P A% K5 R/ u, g/ T4 [ // This is a simple schedule, with only one action that is4 E) ^7 R5 O! R
// just repeated every time. See jmousetrap for more& c' ?6 R% B4 z
// complicated schedules.+ w: g& M7 q" m+ P9 Z9 ?9 c {. M
' R P$ r5 k: \/ U modelSchedule = new ScheduleImpl (getZone (), 1);% P7 ~# `" Y* _( U
modelSchedule.at$createAction (0, modelActions);
# K+ H1 `7 j! B+ J4 R2 q$ D9 [7 o 1 \! A+ D3 m5 r" q2 }/ Q* s
return this;$ x, d9 i f9 X4 ?# Z! ?
} |