HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
+ T" X7 h6 [/ }% U/ R4 i. `; d2 C3 o* T! t1 y0 k2 L
public Object buildActions () {" V& D5 K+ E- R
super.buildActions();
8 M& p& G" w2 [
2 x: \1 t' s) I: u9 V0 c- e // Create the list of simulation actions. We put these in2 m" A6 Y ?* m( K
// an action group, because we want these actions to be) P* F* S8 P" I5 i% e S
// executed in a specific order, but these steps should
& b; N7 m4 ~, y // take no (simulated) time. The M(foo) means "The message( D( _' i- E4 l) M: d) N0 M6 }
// called <foo>". You can send a message To a particular* E% }0 m8 F6 o8 V' w
// object, or ForEach object in a collection.
2 `8 m* j$ K7 h1 P* I) M+ o) O 3 b+ p6 G' F" ~
// Note we update the heatspace in two phases: first run
" `; }4 r( g% p. d/ ~4 ^* S! S // diffusion, then run "updateWorld" to actually enact the
# f' t; H8 n0 N+ p1 j9 L" {* Q // changes the heatbugs have made. The ordering here is
5 S+ X7 k' G# X* T& f7 s // significant!; r! C+ e0 M4 m" Z5 }5 H
' c9 z: L: \! a: s* D# [ // Note also, that with the additional8 R, W$ [! i4 `; Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can& p" I. w$ \7 S x# ?) q' S4 n
// randomize the order in which the bugs actually run! _" o, f. l/ o5 ?# f
// their step rule. This has the effect of removing any
. I4 P9 O- r5 q6 ]8 l( {- I; f // systematic bias in the iteration throught the heatbug" d% f, _' o( W0 t! k# n
// list from timestep to timestep9 J4 ?8 k l% t/ I- F, O0 s" v2 H
) J4 ~/ E- g) R2 h // By default, all `createActionForEach' modelActions have
+ Q% p1 x" `4 U" h // a default order of `Sequential', which means that the
8 i( o& b" q" i // order of iteration through the `heatbugList' will be
9 Z- Z s8 |! C2 m // identical (assuming the list order is not changed9 ~8 K; b: v" }. k$ M% I9 c% x0 H
// indirectly by some other process).
9 o" ~9 d, k% e0 h$ W
* V7 Q' V, p2 B1 Q$ ?6 g3 Z modelActions = new ActionGroupImpl (getZone ());
3 U5 N @3 N. {. D+ G! a, l% l+ Z2 g4 N
try {
1 b [! G5 r D$ w8 k& Y# d5 C modelActions.createActionTo$message
9 L& G+ @2 Y8 s0 h3 J, `7 I (heat, new Selector (heat.getClass (), "stepRule", false));
: K" M; D# i Q* r7 f- A } catch (Exception e) {
0 E: ^8 A5 m; Z. ? System.err.println ("Exception stepRule: " + e.getMessage ());3 m& a/ Q+ W, O" I4 c, G/ U
}3 J' m+ [/ O1 e9 J( D4 b, b
: U4 c4 t" A# U# f% q+ X try {
6 q2 R( \0 q" \( z+ ] Heatbug proto = (Heatbug) heatbugList.get (0);% t: G- Q2 f- H8 w, _5 ~: K: M
Selector sel = 0 x7 T/ `6 p' S5 D4 d% v5 v& a
new Selector (proto.getClass (), "heatbugStep", false);, Z1 w' |8 O$ g8 z9 o
actionForEach =( X; s5 o* i1 z& E" z
modelActions.createFActionForEachHomogeneous$call7 i. o: Q4 g5 ^; i4 X* Z; O, v6 J+ H# Y
(heatbugList, ?# ~/ } B _
new FCallImpl (this, proto, sel,! C- Z& V4 L# }0 a
new FArgumentsImpl (this, sel)));
, g3 O3 J2 J H } catch (Exception e) {) O+ O7 B3 H/ K x
e.printStackTrace (System.err);; ]4 q Z+ I- W; F
}
2 z1 e2 u# q( o9 ^! j" m
. B8 X; i- L6 p syncUpdateOrder ();3 m8 Q' Q! p; \& F1 e5 D
0 O0 L' g2 ~- Q( s9 M' k( B try {0 |8 s$ V0 B, r, d
modelActions.createActionTo$message 0 |2 |* u9 R7 l2 S7 |5 s; H, | |
(heat, new Selector (heat.getClass (), "updateLattice", false));/ o+ X- [+ @% U3 u, x$ {3 G
} catch (Exception e) {
7 N8 x) B2 |& w( ?" [- h System.err.println("Exception updateLattice: " + e.getMessage ());
W" N* X: s3 t$ M) `- S3 ]3 D; p }
n7 {$ f' P* e5 G- n h' N3 | ^4 [* Z( x1 y$ c0 O5 g" d3 F% j7 e+ L, ?
// Then we create a schedule that executes the( y8 E; j4 O( I9 T, N
// modelActions. modelActions is an ActionGroup, by itself it
. ~% e1 R) W' t$ y // has no notion of time. In order to have it executed in
3 r. G5 j" K$ H1 I' J' G! N // time, we create a Schedule that says to use the$ V9 j2 |+ r" [2 c* r. b# \
// modelActions ActionGroup at particular times. This( \; C# H/ Y3 x
// schedule has a repeat interval of 1, it will loop every$ s; ~+ l6 ^7 X. K* b* n; w
// time step. The action is executed at time 0 relative to/ Y* |' l5 N( [
// the beginning of the loop.
8 M# C$ y- f$ w1 e" u d5 ]* L8 c3 p8 H. [* f1 |/ X
// This is a simple schedule, with only one action that is: L4 x3 D2 m6 T- o
// just repeated every time. See jmousetrap for more
8 ?& U8 _2 P( T1 m" s // complicated schedules.
) `9 U6 \& A# k% o' `1 h( l
; T# [$ X2 F7 _. C7 p: l modelSchedule = new ScheduleImpl (getZone (), 1);. q5 Q, X% { c7 I) z
modelSchedule.at$createAction (0, modelActions);/ u. S, Q v& ?4 j
' |( w! }8 c5 C" E0 P }- s return this;
# |3 ]& V& m( K2 ?, E3 M } |