HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) ?( H& I6 S# u; N+ Z1 Q* Y6 n* o1 M$ Z- ]; D0 J4 j
public Object buildActions () {
% y# `) [* ~+ c2 p+ w1 x5 k0 ] super.buildActions();; d) r5 v- | E7 m( O8 r2 g1 ]
7 z9 M d9 k$ u* b8 J# p7 Y! P. v // Create the list of simulation actions. We put these in
5 l8 d. H4 y' n, q1 u# N // an action group, because we want these actions to be
7 _2 H. t* P. f( _) k3 J7 K // executed in a specific order, but these steps should
4 r1 X: ]; O7 ~/ o // take no (simulated) time. The M(foo) means "The message) b. N/ V7 T* y" y. K
// called <foo>". You can send a message To a particular
' x3 F% P5 a1 K2 l // object, or ForEach object in a collection.! @& f1 q' f ?' X$ Z/ E$ p
9 w9 L0 E* y0 P9 k
// Note we update the heatspace in two phases: first run5 ?+ W1 ~: d9 B. Y0 N; p: o
// diffusion, then run "updateWorld" to actually enact the6 s/ \' p5 ?6 l$ C* c; }
// changes the heatbugs have made. The ordering here is; A6 O& W7 v' {9 X( N
// significant!
+ F Q5 t% h2 [5 u. v: N 3 w6 t! g c& x2 W2 d, W$ \
// Note also, that with the additional/ Z, `: C* z$ M, H
// `randomizeHeatbugUpdateOrder' Boolean flag we can
0 L$ `9 x# t2 u9 V // randomize the order in which the bugs actually run/ k5 a. m6 q- z1 e7 R2 ~
// their step rule. This has the effect of removing any
0 {# a! f/ F( M) u# g/ ?% H // systematic bias in the iteration throught the heatbug& ^- s! c5 w8 x7 u1 K8 ]2 R
// list from timestep to timestep* S* Y( c! v9 Y' [/ [
& V" A3 C5 c4 \; z3 L" w) M6 ?( R // By default, all `createActionForEach' modelActions have7 Q! Y0 B& H# m
// a default order of `Sequential', which means that the
+ s" Z5 g) d4 j' ?# Q // order of iteration through the `heatbugList' will be
1 u' ?) Y, l+ M% I // identical (assuming the list order is not changed8 B9 I- U! @2 I0 @3 d
// indirectly by some other process).
7 R* Q4 U/ J; z$ j$ ^% p
9 e0 Z1 M' |# V. z' [$ {8 q& ]9 u$ a modelActions = new ActionGroupImpl (getZone ());
& R1 h3 p+ }) e7 N4 d
6 _9 G. [5 {$ C2 f' b try {
6 i/ A$ Y2 @/ Y4 G7 C- _: r+ |( |8 ] modelActions.createActionTo$message( a0 }$ U$ [) `& q0 j8 |; q
(heat, new Selector (heat.getClass (), "stepRule", false));: o5 H- I0 X9 k/ M' J' m5 R
} catch (Exception e) {
+ y& o* f" h# h; y% y) Z7 ^# I System.err.println ("Exception stepRule: " + e.getMessage ());+ l8 ^& p; u2 _% p) Y
}3 R; L: s, P% A7 b6 I, k
/ h# s( h9 {: H3 O" E
try {
) n% @, ^- b3 | Heatbug proto = (Heatbug) heatbugList.get (0);
( c: I# f6 |, i; j B) k Selector sel = / m3 ^* w6 e4 e2 R- M8 t4 M( k
new Selector (proto.getClass (), "heatbugStep", false);/ G! L" d) A6 ^6 v: `
actionForEach = g" [' [: M: |
modelActions.createFActionForEachHomogeneous$call; P7 a/ T6 l( }7 o" k; h$ Z5 v
(heatbugList,
* o$ T* j0 j8 u- W4 G0 R' A new FCallImpl (this, proto, sel,
2 {3 t9 C$ \# B4 U8 u new FArgumentsImpl (this, sel)));# `' X+ G+ q9 x0 L6 a6 ~9 U
} catch (Exception e) {
" ]6 z T9 j I+ t& v+ Y/ c e.printStackTrace (System.err);
1 E4 @- c: ~" _, B- V' x a5 ? }# F4 B; u* h0 N5 A) j" C
6 w1 h; E3 |6 r# f1 y* I* e
syncUpdateOrder ();
* ^, Z/ b! s5 P P6 G2 `
2 L; C6 _- f3 [* X# E U try {. J5 C$ C! O# t) s( O3 n
modelActions.createActionTo$message
9 s# M% [! P3 w" ~& R (heat, new Selector (heat.getClass (), "updateLattice", false));
( @3 M4 {7 y! g7 M4 I* n; @2 N } catch (Exception e) {- N3 V- L2 I+ |6 m' D7 }, l; M/ r
System.err.println("Exception updateLattice: " + e.getMessage ());8 b+ W: ?/ E! ]
}, ~3 X0 L1 c% T% g- O5 S
( P3 n; h& N5 w# l6 ~ // Then we create a schedule that executes the
" @/ H: i4 g6 H$ `* c7 s5 {8 t // modelActions. modelActions is an ActionGroup, by itself it( [" h+ ?4 Q8 W* O$ B, S
// has no notion of time. In order to have it executed in! b4 \) e. k+ U, d" L1 C2 J
// time, we create a Schedule that says to use the
- J# q9 r, _9 Y/ Q // modelActions ActionGroup at particular times. This
" I1 ^8 c. k+ N6 Q% {5 O7 ~! J // schedule has a repeat interval of 1, it will loop every
! N: E( I" {& X( ~6 L4 Z // time step. The action is executed at time 0 relative to- W/ ?: n) j- L8 o& v2 j
// the beginning of the loop.
8 z5 }" q! J3 d1 w: G: h( T
* o7 z0 K( g0 z5 h4 ^/ g2 E // This is a simple schedule, with only one action that is) P8 o0 U1 j# G4 s! k. Q
// just repeated every time. See jmousetrap for more2 A1 N. p+ U$ e" X/ D u
// complicated schedules.+ Z( E; S/ ^6 ~$ p. }
) z6 @/ ]9 b \5 D. Y" Z6 h9 G8 `
modelSchedule = new ScheduleImpl (getZone (), 1);! y$ J2 ?9 U/ `0 S. G6 [
modelSchedule.at$createAction (0, modelActions);1 o7 X) I9 P. r: }
* ~* b/ l5 X* Q return this;& X2 C$ _6 g0 a8 w: e& i
} |