HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:! }% @0 w, i) n
7 C$ `$ e& {7 s$ a" j( g public Object buildActions () {
) a' d& Z0 X1 n5 f c* G" p super.buildActions();
/ X9 J6 V3 L! k. f, A! U( @ & L! |1 n8 ?) @ V9 W
// Create the list of simulation actions. We put these in c5 [9 T. i2 t5 u' r& h
// an action group, because we want these actions to be L. ?4 ^+ a- d& S$ j2 h
// executed in a specific order, but these steps should
$ n$ X3 r) N5 p1 {7 F5 ] // take no (simulated) time. The M(foo) means "The message
7 l2 w+ T3 w) p4 @' }. S // called <foo>". You can send a message To a particular* B+ w: {2 x# T: f
// object, or ForEach object in a collection.5 N: K7 [! _) N# @! b7 m) C$ f/ O- I
/ D/ K+ ?. J, |: c- I/ Z
// Note we update the heatspace in two phases: first run
; n: t8 N+ m- f9 r // diffusion, then run "updateWorld" to actually enact the
6 W' \6 S% q7 z9 F3 m) y! d8 a& t l // changes the heatbugs have made. The ordering here is
% f& G- T/ c+ \4 S0 f // significant!4 w/ q$ c! b4 p
0 G( H7 g! Z* S1 }6 k // Note also, that with the additional& s$ v) G/ u' m* B0 N
// `randomizeHeatbugUpdateOrder' Boolean flag we can
$ `/ U/ n7 c3 m% N. [6 _ // randomize the order in which the bugs actually run
a; H. L2 m1 h // their step rule. This has the effect of removing any
' h9 c1 n N: F" k8 o8 M // systematic bias in the iteration throught the heatbug
4 W& W! F, z( z/ s; u* U // list from timestep to timestep
! r3 V4 R3 t) ?7 j; t
8 J1 h7 `0 X7 S! Q+ k& ~- q // By default, all `createActionForEach' modelActions have# t! C4 E2 I( z- K, N
// a default order of `Sequential', which means that the
( _9 w7 H7 Z) w! t: K: Y' x // order of iteration through the `heatbugList' will be7 i/ e3 y ~( `; l2 x+ r# O) N$ b/ v
// identical (assuming the list order is not changed5 f1 @8 N2 k9 Z* o
// indirectly by some other process).
/ y4 w+ h. w- g( O t5 f* q6 ^/ a9 h
modelActions = new ActionGroupImpl (getZone ());
) ~7 Q% Y% K5 Q) y% Y; _. f7 V% E; C8 W
try {- ~% V3 v7 C3 d9 j4 V" p8 ? i
modelActions.createActionTo$message
: j6 u9 z8 ~0 I6 x( N (heat, new Selector (heat.getClass (), "stepRule", false));2 E3 w, t* p% I/ D& T+ q
} catch (Exception e) {# w5 D/ ~# x- V( E1 t
System.err.println ("Exception stepRule: " + e.getMessage ());- J" T0 w- @# r6 D8 R `
}
- ]- u, A1 C/ g3 U! }- y
, v) [5 `' [1 d& S; q* } try { W) {! d% [6 f2 ^$ b7 W/ X8 r
Heatbug proto = (Heatbug) heatbugList.get (0);6 J ?& b+ G: ?8 \7 Z
Selector sel =
+ C V/ C2 K$ P7 X new Selector (proto.getClass (), "heatbugStep", false);& R% z: c( B' D: _) ~; |1 T* G
actionForEach =
) s% f- P4 M1 s: k% `; h modelActions.createFActionForEachHomogeneous$call
3 {# p M5 @- w( g2 U. m( ^ (heatbugList,3 ~, l) N, A& v. T! y
new FCallImpl (this, proto, sel,
( |/ E& d9 x' s" i9 C8 l& y new FArgumentsImpl (this, sel)));
! F5 O* b: f# C- D' Y } catch (Exception e) {
5 G5 k. i1 J' c, J9 t8 K: ^# { e.printStackTrace (System.err);
3 Q3 R! c ?4 G( p% D7 ~ }
2 u& \, l# r% Q, @3 ] 8 ]+ r6 P! B3 k" H" @
syncUpdateOrder ();
8 I+ i2 m$ m! \! J- }/ }2 W8 J+ e6 L: f$ V( z
try {
. J6 b! C* p$ ~* g% Z* u modelActions.createActionTo$message # z' Q+ S. u# v4 f
(heat, new Selector (heat.getClass (), "updateLattice", false));
. l# c% T5 S9 [1 s } catch (Exception e) {* V/ h$ Y0 O6 m& `" Q. g+ R
System.err.println("Exception updateLattice: " + e.getMessage ());
w. j) q& o: A' A0 l+ x$ s4 s {- t }
0 ^" c; }% b$ {6 G5 ?- {
- F4 d: H: d' {6 V // Then we create a schedule that executes the3 y% E" @8 u& o' K4 {/ b( @
// modelActions. modelActions is an ActionGroup, by itself it
% d5 w5 l! e$ m" d% Z% p5 s1 t$ M) v // has no notion of time. In order to have it executed in
- }; g1 v8 p/ x // time, we create a Schedule that says to use the
2 C1 _& }- l8 S& E // modelActions ActionGroup at particular times. This
$ d0 n3 U. V% t0 p% N/ ?4 S( G# H // schedule has a repeat interval of 1, it will loop every7 \1 Z( o" q+ u A
// time step. The action is executed at time 0 relative to# k, O+ M; z) V7 y. G) M1 _. n6 _
// the beginning of the loop.
5 @" c- f1 ~) s( B% b1 I& e
# y& f( N: N' P2 X+ K" a" H: ^ // This is a simple schedule, with only one action that is
( L0 R. `4 E. V- A. ^* s2 { // just repeated every time. See jmousetrap for more f( t" h( [# F) i
// complicated schedules.6 ?, i# S8 l9 B1 v3 o0 |
- {) w. r6 R1 F' c! r5 E$ e modelSchedule = new ScheduleImpl (getZone (), 1);! C0 N9 p" K, I2 T2 o- E4 F/ v
modelSchedule.at$createAction (0, modelActions);/ L: L/ e7 S( m8 Q5 X
) I. y% \0 U/ c. R
return this;
# o1 O& _; Y9 Q- |4 W7 y } |