HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:0 E9 S6 A) A- S0 I/ v B' g
1 y) B( Z+ q: Q+ c public Object buildActions () {
1 I- m% ^& P5 H% u" A super.buildActions();; ?3 U/ ?* `; c7 @0 N
: b1 X8 f u) ?2 C- n4 A0 }; i, ]
// Create the list of simulation actions. We put these in
7 S- e8 ~, G% P* l( ^6 H // an action group, because we want these actions to be
$ U! h m" X" x3 ] // executed in a specific order, but these steps should
5 s' X# n3 U+ d' a // take no (simulated) time. The M(foo) means "The message
' O* v* ~2 p6 M" a9 {- R // called <foo>". You can send a message To a particular
4 r9 Y0 T8 v+ w' n' ?) w8 \ // object, or ForEach object in a collection.
0 J! I' Y4 {5 |8 D: ~! Z( q
: H6 [* a! i( l- Z3 b M2 R5 E // Note we update the heatspace in two phases: first run
7 {6 C: r/ E/ K5 f' \$ A! v // diffusion, then run "updateWorld" to actually enact the
% k$ l' p/ W) e1 r // changes the heatbugs have made. The ordering here is
5 H" S+ G( J& ?$ w" Z4 p // significant!
1 R4 G9 c8 X8 A, s5 H; k" `
( L7 V" W. X/ v" W+ t6 c // Note also, that with the additional
! D% q% G8 }) V1 n9 u // `randomizeHeatbugUpdateOrder' Boolean flag we can
1 y# @4 ?% M* Z; r // randomize the order in which the bugs actually run
" r6 Y. I& e2 q0 M // their step rule. This has the effect of removing any6 P+ Q9 k$ D5 r/ Y
// systematic bias in the iteration throught the heatbug* g5 L: _5 {. Z( U
// list from timestep to timestep9 a' P0 Z8 C3 W! }, n' O& j
7 L" Y) ?9 E, m2 w! I% l+ }0 | // By default, all `createActionForEach' modelActions have
6 W0 V- ^) S( Q0 m- R& m! q9 G // a default order of `Sequential', which means that the
! W, \/ S) J. L! t/ V // order of iteration through the `heatbugList' will be% V3 i( p) V8 v1 t! C0 H6 Z% i |! N
// identical (assuming the list order is not changed
6 b* q$ c$ [1 G+ F0 }& g; C8 @ // indirectly by some other process). P/ p- l% o1 U) Y
( x. G/ s7 p5 U2 ~7 y
modelActions = new ActionGroupImpl (getZone ());4 ^- F' T4 h0 o' L% q
; e1 M) {0 I+ }
try {& \# s ^ Y, d6 o( L$ S/ N, x
modelActions.createActionTo$message9 Q" U1 i. u) j
(heat, new Selector (heat.getClass (), "stepRule", false));
6 J5 M, q# U4 y% t1 ?/ ~+ f } catch (Exception e) {
/ o6 a5 n) C5 @. |; O6 G System.err.println ("Exception stepRule: " + e.getMessage ());# A; Q- `! e& N
}7 S% |, Y( R L8 L: |: M
$ \/ Z l# x2 \9 W6 T
try {1 j! E4 O: _& E* w$ x- G4 F/ }
Heatbug proto = (Heatbug) heatbugList.get (0);
) a x0 c U7 |. E' x% z2 L Selector sel =
: U+ [) g( z) {0 ?" s# V2 z new Selector (proto.getClass (), "heatbugStep", false);
1 H6 W8 L+ W$ R; J actionForEach =, g, a; z7 ]9 T
modelActions.createFActionForEachHomogeneous$call( x& h; L2 E0 ^3 A
(heatbugList,
5 C4 [: v, ^2 S7 f7 {2 O new FCallImpl (this, proto, sel,
s- B2 g: i. X2 i- t) ^2 a$ P! ]0 S new FArgumentsImpl (this, sel)));
% w$ X/ ?; U* w: x } catch (Exception e) {
7 B0 {* f; }) H e.printStackTrace (System.err);
& ?% Q5 t$ ]; x B: v" }( J }
3 c3 I# R! ~% [" v0 V! [' X! J 4 @$ H/ f0 k a3 f$ E; U
syncUpdateOrder ();+ r0 m# s# b* c; b1 F6 ?8 _& v
- q+ E' ?5 K( k/ L6 d7 j: Z+ l
try {3 j' L. H3 B# R9 W2 p( b
modelActions.createActionTo$message
6 ^' h) S( j D O7 { (heat, new Selector (heat.getClass (), "updateLattice", false));4 \2 P# h! ?( c) q) J
} catch (Exception e) {/ U+ _% @' v; D7 Q, N
System.err.println("Exception updateLattice: " + e.getMessage ());' k% g+ R0 s5 ?3 _5 j, w# G/ u& ~5 U
}
. v/ U3 R$ T* F2 f) V o% G( r * m( i- ~) c4 b8 G: L; o1 P
// Then we create a schedule that executes the
5 b- v* p$ ^- g // modelActions. modelActions is an ActionGroup, by itself it
$ A# T9 A S0 o, Y- d0 @$ u // has no notion of time. In order to have it executed in. Q b0 s& g% I0 n% z! n1 Y# A
// time, we create a Schedule that says to use the$ N% I* q3 j+ H% U
// modelActions ActionGroup at particular times. This. K; k) {& z9 {4 I
// schedule has a repeat interval of 1, it will loop every
1 l; J" k. O2 `9 X0 @ // time step. The action is executed at time 0 relative to/ C# s @/ R* }4 t
// the beginning of the loop.' A* T( X7 ?, C; p3 \# s" V
G U( `/ X( S @$ u r; ~$ e/ S // This is a simple schedule, with only one action that is
7 f) F9 Q g& ?& Z5 O% E7 m // just repeated every time. See jmousetrap for more
6 M% m$ G) E/ b; a/ A# I' K& K // complicated schedules.
1 i+ ]2 X# |$ s* O; ]
0 X6 t/ L. F$ z modelSchedule = new ScheduleImpl (getZone (), 1);+ s% _4 w. g3 A4 Y4 M
modelSchedule.at$createAction (0, modelActions);2 v* I, r) `8 V& k" ], [: Y8 o
7 ~( c1 l2 J$ Q* W+ ?8 Q% z& g return this;0 i9 [. f6 Q* n' i3 ^
} |