HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! N* ]% `% d# u
' ]4 J1 O. I! F8 F- o public Object buildActions () {9 a5 b. p; ^, f) \( U9 s
super.buildActions();
, m/ z9 `3 Q8 k , _( L2 ~ O& r# M2 |* g
// Create the list of simulation actions. We put these in
" c" r( G: x# z // an action group, because we want these actions to be
8 m# C2 Q/ o& M% B // executed in a specific order, but these steps should
# k/ p2 I1 u- m! I; b2 g // take no (simulated) time. The M(foo) means "The message
. d. a9 N0 m. P, D // called <foo>". You can send a message To a particular5 S( n7 B& z( I, J6 I1 F
// object, or ForEach object in a collection.7 O* @) o" w, }0 n% B8 }
; M- @5 a1 { y3 ?# Q
// Note we update the heatspace in two phases: first run, R9 b! D; r9 n c. l, p7 e v, Z
// diffusion, then run "updateWorld" to actually enact the5 k& b$ y/ h9 Y& R, i, s
// changes the heatbugs have made. The ordering here is
# O/ U! K1 R9 {7 f3 b- M& w% c // significant!
7 y! ^0 L; B7 y) b# N 9 `+ r& n% Y' p. n3 c
// Note also, that with the additional$ g8 G! h0 F% z, i2 ?6 z1 m
// `randomizeHeatbugUpdateOrder' Boolean flag we can
9 s' q( a" k5 u- ?6 ^1 K // randomize the order in which the bugs actually run
, ?; B7 a8 m) `- t* q& D { I // their step rule. This has the effect of removing any! y. V1 U. [ |, G
// systematic bias in the iteration throught the heatbug9 u& ? W' G% B
// list from timestep to timestep
$ U% O0 G' x o# A
' l4 r; u; b) C+ z // By default, all `createActionForEach' modelActions have# f+ ^+ ]" P* f6 t+ w8 W
// a default order of `Sequential', which means that the5 _, x" H, d9 }) c/ t, a; T, J
// order of iteration through the `heatbugList' will be
& S/ C4 q- Q5 |3 y // identical (assuming the list order is not changed
g, w' R! v6 R9 l$ i" L // indirectly by some other process).9 f: w, e9 B/ t' H6 M
$ j$ l7 N5 w O. E modelActions = new ActionGroupImpl (getZone ());
: F) h: X. R C+ F. H3 G- [% n9 D4 w5 H
try {& E" A; b& I5 U( k; A- ^5 w
modelActions.createActionTo$message
$ b! a; @) G! c# N" N (heat, new Selector (heat.getClass (), "stepRule", false)); N" h& C5 d( U" l" o! e
} catch (Exception e) {
! S( X* I% i k: q8 } System.err.println ("Exception stepRule: " + e.getMessage ());
0 e c" |8 _$ ^5 I: P7 h$ K8 O3 P }7 F- v6 {9 _' ?( Y. P. p
6 R8 U- H* u! s6 G/ `" u try {9 i) ~# F1 v( \1 [) I: B4 w
Heatbug proto = (Heatbug) heatbugList.get (0); _ w: b' o/ B& m
Selector sel =
- q K2 f! i% @( g new Selector (proto.getClass (), "heatbugStep", false);
! {5 f( t7 G& v3 K* H. Z actionForEach =
1 f0 {8 p! X, [0 T; F7 ], p2 c" N modelActions.createFActionForEachHomogeneous$call
. d \! C" @( Z0 }/ E: ~ (heatbugList,9 _5 D8 `) a+ C
new FCallImpl (this, proto, sel,
! ]3 g) r `0 @ new FArgumentsImpl (this, sel)));+ ?/ i1 c+ @* ?9 n' u9 w1 o
} catch (Exception e) {
9 f. Y2 X! P+ w4 |6 B e.printStackTrace (System.err);
% X, G& |6 N1 E }
4 q' q* i8 A& `/ e- L4 f: x C$ j# R+ X8 K " ~, K# c, R c* D3 g
syncUpdateOrder ();' A1 R' [ ~9 o; B' a, y4 I0 z
8 a5 ^' `; J$ Y% ? try {
; f5 E+ U: l( b modelActions.createActionTo$message
* \5 Y4 v5 Z% x/ j (heat, new Selector (heat.getClass (), "updateLattice", false));) E& z, x% b" R- A; P2 m/ G
} catch (Exception e) {5 `, `% N$ P9 {. V2 E4 S
System.err.println("Exception updateLattice: " + e.getMessage ());$ E1 p+ |! ^) G3 ^: |0 ?
}! i- @" G2 g3 ?: T9 F, `1 @
( d; o, p/ z9 O3 W# K7 R7 Y // Then we create a schedule that executes the5 [) F4 K. q! r, m( F5 G9 a- t
// modelActions. modelActions is an ActionGroup, by itself it3 Q6 h: l+ X1 G2 J
// has no notion of time. In order to have it executed in
: B- l, o0 z4 e9 q, e* G // time, we create a Schedule that says to use the
- G7 v8 j/ R1 r // modelActions ActionGroup at particular times. This5 d5 D# C# _% O) y4 b9 r
// schedule has a repeat interval of 1, it will loop every ? j* r g$ [9 Q( i* {' `
// time step. The action is executed at time 0 relative to
$ y, n7 B( _: b0 ~; O( K // the beginning of the loop., {# F% r3 `; I6 ]
" b! k9 y$ K0 t% }
// This is a simple schedule, with only one action that is' S# D- C4 s! B
// just repeated every time. See jmousetrap for more
+ F: P* `* V8 V, T* |; q z // complicated schedules.4 q# N' K3 Y* q& I0 U: m: [
: |& B' E" G! A5 y* k, s
modelSchedule = new ScheduleImpl (getZone (), 1);5 \0 W. }9 l6 p1 D
modelSchedule.at$createAction (0, modelActions);
1 O% i* z2 f" V4 f# d% S. k 4 a9 ]9 ?! b# ?+ y
return this;
2 _5 M& X% C$ k0 M$ p( k0 G6 H( C& R. F } |