HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 ^; @: v, n2 u1 u7 ^
6 m, q; B L% v+ ~6 l& Q
public Object buildActions () {
- e: Q5 z, K) } x$ y super.buildActions();
, G3 m1 ^! i" J6 a, U0 l : a4 c6 A. u7 }! G# u9 J' w
// Create the list of simulation actions. We put these in* S8 W% {: {0 C5 b# \0 R( I9 t
// an action group, because we want these actions to be/ x$ n+ O. |# ^5 D0 y
// executed in a specific order, but these steps should
5 T+ g& Q% H: K2 b6 N3 S // take no (simulated) time. The M(foo) means "The message, f" R/ p6 w2 B4 x1 y n L
// called <foo>". You can send a message To a particular! u* i. \: V% J+ H! Z
// object, or ForEach object in a collection.
+ I5 s& b3 H) {1 X; K$ k& i
/ p4 O. L7 P* p$ Q Z* \( J // Note we update the heatspace in two phases: first run
0 b" x! J, V9 D8 X" g7 ^ // diffusion, then run "updateWorld" to actually enact the: _4 @. Q+ \& `% z
// changes the heatbugs have made. The ordering here is& O4 G2 [$ V& V: e/ @
// significant!( K n7 H' |3 T5 G
+ ~5 F1 g! X% O5 L( r // Note also, that with the additional4 j" a4 b/ V, b( n/ y
// `randomizeHeatbugUpdateOrder' Boolean flag we can+ j7 J% g4 F; j2 Q2 y
// randomize the order in which the bugs actually run: [% @* n% K7 D1 b d$ k1 {
// their step rule. This has the effect of removing any; o& Y7 j) S9 \
// systematic bias in the iteration throught the heatbug
. \0 e: e9 B" M* F& U // list from timestep to timestep
, ?8 P" S8 q* [6 O " x, R, r; O9 [7 X
// By default, all `createActionForEach' modelActions have/ ]5 W) X5 w9 @9 n8 E. E
// a default order of `Sequential', which means that the
8 R/ B5 Q9 U3 R, J // order of iteration through the `heatbugList' will be/ N3 m6 H0 `! W1 |6 V" q5 B
// identical (assuming the list order is not changed8 |8 Z$ V* o# S& f
// indirectly by some other process).
# O4 W$ a* D+ k& \# S* a9 r
$ K% _+ q! l& q; k& e' e modelActions = new ActionGroupImpl (getZone ());$ Z5 h$ t0 c0 K6 i
# k0 I3 Z+ @8 c+ z try {
( k9 j6 ?5 E- Q8 s modelActions.createActionTo$message/ I, i# [ ]: |- w8 u
(heat, new Selector (heat.getClass (), "stepRule", false));
: v l" }$ z/ `9 q } catch (Exception e) { S1 q) a) j8 V
System.err.println ("Exception stepRule: " + e.getMessage ());
; S; i/ p4 S7 I2 H- ~, ~5 p0 f2 s }* S& P0 X* L- M$ ~2 A3 l! y
, {9 {- N t' Z, m try {
$ t3 y5 `! N2 J. G# U# | Heatbug proto = (Heatbug) heatbugList.get (0); C8 }% U2 _& m
Selector sel =
' T* ~/ w: Y# f& q" c8 X% e new Selector (proto.getClass (), "heatbugStep", false);3 ^9 v/ ]/ }( Z( ^. m* }) R
actionForEach =
' |" N: L- _' V0 \3 x modelActions.createFActionForEachHomogeneous$call
" L( y @& C1 t$ J" \* J (heatbugList,
% b8 U- R- |0 C3 s! | new FCallImpl (this, proto, sel,
& r* u2 ~2 m1 e9 R. W) ?9 T new FArgumentsImpl (this, sel)));8 \, r8 _3 e" ]8 Y0 p& U& I/ [: k
} catch (Exception e) {
( a9 J6 R8 C' x% V$ x& X e.printStackTrace (System.err);+ L" C# n6 Z7 h3 ^1 ^1 P+ l
}! H5 v) ` n# l9 r$ f
2 R; }/ I6 [8 v2 ~' z syncUpdateOrder ();5 N- C7 h# z/ \$ \1 I
' u; i: w; c9 E6 ?5 W8 R; f5 P
try {4 _, c9 o- m5 ?! q0 m& M0 Y$ f
modelActions.createActionTo$message / u& P" s% x; m
(heat, new Selector (heat.getClass (), "updateLattice", false));
0 l# K; m) m# W } catch (Exception e) {
; [! m Y, b4 q V) q' _ System.err.println("Exception updateLattice: " + e.getMessage ());3 P5 V' n6 w( G ^& P; |5 k
}3 F8 g% _# s, @. {3 W
8 l) z/ d6 ^9 Y+ Q3 w& d$ d, D
// Then we create a schedule that executes the
0 A7 ]6 @' l/ H // modelActions. modelActions is an ActionGroup, by itself it& t9 @+ S) ^! a, f4 A2 y
// has no notion of time. In order to have it executed in' v/ l1 {" [& p W- K( L# ^
// time, we create a Schedule that says to use the9 m3 W; g* K) z! M9 b+ n6 ^
// modelActions ActionGroup at particular times. This
- ]9 w9 K5 q3 f( i // schedule has a repeat interval of 1, it will loop every
" Y: x Z/ `/ j/ P% v, L // time step. The action is executed at time 0 relative to! q# _, B. r2 G& z( `$ {
// the beginning of the loop.9 @: f3 C1 q! x! d, o
6 k4 D, F# H- Q5 {. o
// This is a simple schedule, with only one action that is
2 ^8 ]. E2 [5 U1 l* [; [ // just repeated every time. See jmousetrap for more; V& k3 m9 R# A) M* q
// complicated schedules." m8 a0 V; w) Y9 y0 H- P4 J+ m) f
. A3 C- u8 z4 l/ M o$ w) v% y m
modelSchedule = new ScheduleImpl (getZone (), 1);/ ~* M: H0 ^% w
modelSchedule.at$createAction (0, modelActions);
" j/ d9 l" {% p3 F
6 S* @6 B& w; d' ]3 _( R- n return this;1 O% \4 y' ]3 F* [/ L
} |