HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. u( i3 K U- n* w) }5 V& Z& U( a9 T5 a' i2 a1 h
public Object buildActions () {
- p! z2 J2 S' x0 l) j! g J) T3 { super.buildActions();
9 z; Y( \* k: P; C
) ~8 C1 ^ R! s. { // Create the list of simulation actions. We put these in0 a( b! `0 U6 t! O7 M, B* f0 U |
// an action group, because we want these actions to be
- t' ?" M$ D' d! b. E6 D // executed in a specific order, but these steps should
. q; g" p+ g1 J0 m8 C0 v // take no (simulated) time. The M(foo) means "The message' p6 n( V( h8 ~' Y6 o9 D
// called <foo>". You can send a message To a particular
) y' Z/ a, l. m9 E- M9 X5 b8 u // object, or ForEach object in a collection.& `% E3 J) F$ b) Q4 j7 T
+ N4 u6 v# u' j [ // Note we update the heatspace in two phases: first run% V6 Z7 L- k& P' v, k
// diffusion, then run "updateWorld" to actually enact the
) G. `0 q- D5 ]. z7 d( @ // changes the heatbugs have made. The ordering here is. ~8 s8 {$ u* y
// significant!
h; _9 F- L9 Y# h4 s8 | 8 _; u$ J. ]5 C# A( O
// Note also, that with the additional
' x6 r5 N4 Y# g9 { V1 S' e# ` // `randomizeHeatbugUpdateOrder' Boolean flag we can4 q1 A' K; ~! V4 k" S$ H
// randomize the order in which the bugs actually run, \1 G( e# \" p2 g0 ?
// their step rule. This has the effect of removing any
; ?, k& f7 P! R0 \8 @# i // systematic bias in the iteration throught the heatbug
) S; v% q. u1 j+ \) Y1 [# `& Y7 s9 ` // list from timestep to timestep9 T( B( a% r5 I5 A9 H& U
" K( B2 I9 I% J3 y( \, W
// By default, all `createActionForEach' modelActions have j: E3 J' X2 j' m) \$ W
// a default order of `Sequential', which means that the3 U' z' i- h" m4 C: k `" E
// order of iteration through the `heatbugList' will be/ [! _! Q9 B7 [% }6 _
// identical (assuming the list order is not changed
1 u2 M! t) x, d+ y$ e7 s4 y; T // indirectly by some other process).
- J5 g7 d1 i# S 2 g9 X* O- O7 o8 X; c# j
modelActions = new ActionGroupImpl (getZone ());
7 w# q7 j. I: O2 L6 N! e/ B3 V( `6 T/ b- m4 w
try {% Y. x+ J5 d# T
modelActions.createActionTo$message
% _! F: T9 ^9 O (heat, new Selector (heat.getClass (), "stepRule", false));
7 M7 N U4 R( R) C7 A1 `% C } catch (Exception e) {" }' B# W$ O6 S& \
System.err.println ("Exception stepRule: " + e.getMessage ());
U. M3 T' A6 p }
3 ~0 T' [" c! Y8 B: T3 N W T
. a3 J. Z* U) P+ r6 K try {
! B! p, `3 w4 m d+ P9 E Heatbug proto = (Heatbug) heatbugList.get (0);
8 x6 Q+ O( C" J! I Selector sel =
+ e, U" Q4 k/ c" |9 t7 X5 ?. f new Selector (proto.getClass (), "heatbugStep", false);" G" U+ g9 j- [
actionForEach =
' W2 b2 z% w0 u5 ?$ j- ]2 Z5 X) I modelActions.createFActionForEachHomogeneous$call5 L* u7 p9 V+ [/ r6 `2 B9 Z
(heatbugList,
/ h' S* G E, f ~! s; @# j new FCallImpl (this, proto, sel,
; v4 _0 ^/ C" Z7 {8 [" f1 M, i/ r new FArgumentsImpl (this, sel)));
" T- v+ o$ N, J5 D } catch (Exception e) {
+ I& O$ y. B4 e; U {8 d1 A e.printStackTrace (System.err);' d3 @5 b6 p& p I
}
+ W/ M( E8 S, B8 Q* T* F . }% r* n3 k4 U- d# q! a s
syncUpdateOrder ();
* c, y+ _( R/ r- B
& d9 L: R+ M8 _$ m" I try {
& v M! L# J. N& g6 P6 y$ f/ o modelActions.createActionTo$message
/ \/ g9 Z1 ~$ ~& i (heat, new Selector (heat.getClass (), "updateLattice", false));
3 L6 |+ N0 X6 ^ } catch (Exception e) {
5 N8 J m ]/ z/ D# m' T System.err.println("Exception updateLattice: " + e.getMessage ());
, P5 R( A+ X1 G+ U, M, Q; ~+ g7 i }
2 q2 Z* L, m& K) |
/ k+ G7 _: x2 n, D/ G' D& U/ e" q // Then we create a schedule that executes the
" c5 s9 e9 Q8 l$ N' T4 N // modelActions. modelActions is an ActionGroup, by itself it
, Q' G0 |9 F, Z+ `/ Z" c // has no notion of time. In order to have it executed in, y$ ~# C5 d+ W) s d, X. D$ G
// time, we create a Schedule that says to use the
% y. q" a, W% R0 W // modelActions ActionGroup at particular times. This
+ f; W( I' R, j" W- H' D3 N( L! { // schedule has a repeat interval of 1, it will loop every; z+ m; f Y- E& E
// time step. The action is executed at time 0 relative to
, O% g2 g; m6 r( V, z Y9 o // the beginning of the loop.
$ f# d# G( h& Y+ @& ~& J- y# ]! O. H; _% J
// This is a simple schedule, with only one action that is
1 [0 X2 s0 A+ V* @4 i% U // just repeated every time. See jmousetrap for more
6 j* G5 G. E4 f( v0 k // complicated schedules.8 g9 y7 X) o( X
' B" ^0 s' n* P7 u modelSchedule = new ScheduleImpl (getZone (), 1);0 T% _. G4 T0 u! L. B- r. e
modelSchedule.at$createAction (0, modelActions);
# x5 B+ o8 H T ' s$ Z- d5 \% P9 o6 J) t) _+ c4 {
return this;
! \5 z9 S/ x; x! ]5 v: }3 |# G4 n } |