HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# M1 x" V0 H. [" K* q, i7 [( ~- c2 S! B, n2 c% w* z2 p
public Object buildActions () {: `6 O) a: N; t ]% W
super.buildActions();
5 }+ i+ e1 Y$ c# Z
! A' c' L6 u* W/ j5 n5 {3 ?. ` // Create the list of simulation actions. We put these in0 y# i2 l6 v& p4 x" e" S/ D# k
// an action group, because we want these actions to be
W+ p/ `$ S8 ]: a // executed in a specific order, but these steps should1 ~ ~8 S/ r+ _3 W
// take no (simulated) time. The M(foo) means "The message
! }0 T% {- n% t- c // called <foo>". You can send a message To a particular/ U% U$ Z% q5 A% S
// object, or ForEach object in a collection.
) L& G( u& |* a" j' U
: y+ x! I7 z2 i! { // Note we update the heatspace in two phases: first run" h1 i7 z0 w% w( A$ Y$ I9 K, E4 B
// diffusion, then run "updateWorld" to actually enact the
& g/ T0 ^; }7 [$ c3 h; H# H // changes the heatbugs have made. The ordering here is: d1 o) `* O% N; W. _
// significant!' T& @; Z* ?( q
$ ~ p: Z$ i! g J' N% @ // Note also, that with the additional% m& ^" B) E; F; }" I
// `randomizeHeatbugUpdateOrder' Boolean flag we can* i% V, X2 ]2 h8 R
// randomize the order in which the bugs actually run0 j. x2 w0 @& a( A
// their step rule. This has the effect of removing any
j8 m3 B4 o R // systematic bias in the iteration throught the heatbug; {: { P8 a" K- o; g% O8 v
// list from timestep to timestep K# i9 C* q2 i5 R
9 q# H) R) l$ ] // By default, all `createActionForEach' modelActions have! H- w- e% w; m/ A* d Y( S
// a default order of `Sequential', which means that the
{4 J3 O& j* k$ B1 X) C // order of iteration through the `heatbugList' will be( Z# ]. M8 j- `3 ]/ f, {) t& C
// identical (assuming the list order is not changed
+ l0 j0 k- ?1 a6 N1 I Y // indirectly by some other process).
6 z3 z; g! R$ B - Y: j1 {* s: m6 P3 ~
modelActions = new ActionGroupImpl (getZone ());1 I* l8 j$ I# A! o. |
4 `0 H# S" p; Y( |% m try {# Q Z4 V6 v8 M$ q6 e5 K- V
modelActions.createActionTo$message$ i& n) u; o+ H2 B4 ^5 |
(heat, new Selector (heat.getClass (), "stepRule", false));) L% l4 e4 x! ]+ E8 L6 a, l
} catch (Exception e) {9 S# \* N) @! O B ^" w
System.err.println ("Exception stepRule: " + e.getMessage ());, ^4 F% F7 _/ o3 @3 x5 b/ @
}
& G& x1 P. `/ S, _9 V) |$ m4 @% l$ j* F @/ u
try {2 P7 Q# a1 M+ A6 p
Heatbug proto = (Heatbug) heatbugList.get (0);
- v3 G: v, }' {/ e; y# I Selector sel =
$ U8 `& e- \) o" x0 Q new Selector (proto.getClass (), "heatbugStep", false);
( m: ^% ~* N: `3 F# d8 H2 R! Q actionForEach =
# R6 ?$ _+ q$ ]) ]# } modelActions.createFActionForEachHomogeneous$call
: F h" ^ R; J5 V2 T! M (heatbugList,
* b% O4 `1 S8 s; ?8 J8 d new FCallImpl (this, proto, sel,/ p8 m3 m& Y7 `# X2 V) _
new FArgumentsImpl (this, sel)));8 _ n& O M& O, Q, z3 V
} catch (Exception e) {2 n. N- ~; U, M9 r
e.printStackTrace (System.err);$ G8 g( K: z- z }) j
}9 x, Q$ m/ C, f: v4 @$ z" ^ k( L- {. E
W. m& _! u, y3 h; R syncUpdateOrder ();1 `: q1 Q. z& U3 M9 M2 I; T' t
: M! y3 `' n4 s" M
try {
/ E% d8 i( x- S! Q% x6 I modelActions.createActionTo$message
% W: ?! g4 y1 h: K (heat, new Selector (heat.getClass (), "updateLattice", false));
$ n" m; ~% |- ^4 l) X+ Q } catch (Exception e) {# |, q) w8 ]" s" T2 q% Z$ Y
System.err.println("Exception updateLattice: " + e.getMessage ());
* N$ G, ~( |. l8 m }
: m. v0 R. w8 M- i! b
; u* K$ `6 d: w; g9 a6 Z: Q // Then we create a schedule that executes the
$ K# {, B" U6 w; Z% h* Y- H // modelActions. modelActions is an ActionGroup, by itself it
$ t2 F# \' m: d. q! n: j# A# h3 `$ R // has no notion of time. In order to have it executed in
% ?$ t8 q9 W7 K4 u // time, we create a Schedule that says to use the' o2 u2 ^# S7 `& N+ {9 f
// modelActions ActionGroup at particular times. This
j6 T/ e L& B3 C" e5 [ // schedule has a repeat interval of 1, it will loop every& t) X o: p( C
// time step. The action is executed at time 0 relative to% t. {9 o+ m O
// the beginning of the loop.
( b j- T! G5 O% w" X, B( Y T; n' g: i7 c! |4 j8 I5 @2 a
// This is a simple schedule, with only one action that is3 K* m* X+ X1 a, |
// just repeated every time. See jmousetrap for more) W- R- t- ?8 N: Y B, {( R
// complicated schedules.; T1 d$ y8 s( p' ]; v
! V9 D: {4 s" d# |. I/ J
modelSchedule = new ScheduleImpl (getZone (), 1);
6 E, w$ C( Q/ E modelSchedule.at$createAction (0, modelActions);7 {' x$ r; n; s: ]. [. h! s, d
) o' F& M# d5 I8 a2 R) K, d return this;
6 n) C3 u! Q% S0 |7 F7 K$ t } |