HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 \. E; Q/ ]6 f. T+ k
% h5 ~8 {* B/ Q1 M% U1 d: I public Object buildActions () {3 M2 ^/ `0 L4 Y4 x0 {
super.buildActions();
h8 F. F) `# } \) u4 N 8 y- g) _! \& ~0 Q% N
// Create the list of simulation actions. We put these in
4 x* L5 S D9 ?% P7 h- q" Z& s // an action group, because we want these actions to be$ u4 x$ ?7 c7 n. C% Z2 Y
// executed in a specific order, but these steps should- e% ~8 [3 X B- p, j
// take no (simulated) time. The M(foo) means "The message7 l7 j- E# q9 U" Z; |; s/ X
// called <foo>". You can send a message To a particular
& Z8 a, ^$ i% F1 ^$ G8 l // object, or ForEach object in a collection.2 b0 p& x5 M: ~
8 G. s* I% d* c- [
// Note we update the heatspace in two phases: first run
7 r& P5 z$ D; F8 n- G8 X // diffusion, then run "updateWorld" to actually enact the
! y, X: M2 v- n" B // changes the heatbugs have made. The ordering here is# S8 A7 d1 |* B9 A# D2 O
// significant!
/ }+ U! i, E& L M# v8 Y
& M$ S; x: t+ D9 c* C% w h // Note also, that with the additional; s3 @ y/ C5 z$ @/ l: u1 C, R
// `randomizeHeatbugUpdateOrder' Boolean flag we can' Q- X9 G0 L# a X5 l/ j/ o1 {
// randomize the order in which the bugs actually run/ e' R3 [, L/ B2 i* C- N
// their step rule. This has the effect of removing any
/ C0 f M: W: ?1 U // systematic bias in the iteration throught the heatbug
4 Q5 t( E8 h7 D. Q6 Z; t% m- H+ l- b // list from timestep to timestep
7 P8 @! n/ l! s& N% Y9 ]' ~- e" g
+ ? b5 h: S, o9 O6 `7 c; c3 {" X // By default, all `createActionForEach' modelActions have+ q4 x; G+ L0 k4 [1 ?( G# }
// a default order of `Sequential', which means that the: |7 q. L3 X7 e+ W/ Q( ~2 x* g
// order of iteration through the `heatbugList' will be
+ ?7 k! p7 Z" x0 d6 U0 z/ o/ E% B // identical (assuming the list order is not changed
! F8 F, E/ `% n! F, V // indirectly by some other process).9 ?, ?2 _ C( t, c/ o: b1 R
& n5 I7 q6 g+ M9 T: i" m modelActions = new ActionGroupImpl (getZone ());" k& F0 _/ G. i9 ^5 t P
, o. E! e0 b, Y6 M% k+ ~1 }" \ try {) L! p3 k( J. J# h/ p
modelActions.createActionTo$message
% c# \- k8 V O+ h! ~4 R/ q (heat, new Selector (heat.getClass (), "stepRule", false));2 e# v1 J- F* }
} catch (Exception e) {
6 l0 {. t0 b/ X7 C, {' X System.err.println ("Exception stepRule: " + e.getMessage ());0 h; U" D f7 ^" i' T, ^' j; J
}
: [1 e% w) O* E' C& t+ m) b, J/ n# ~- U
try {5 [ j5 j8 I- D' `- N. J9 k
Heatbug proto = (Heatbug) heatbugList.get (0);
$ @( r8 @0 J- h4 R Selector sel = : |3 A7 d4 l& D( W' Y
new Selector (proto.getClass (), "heatbugStep", false);; k+ I" Z& c" }9 L J! u
actionForEach =! V0 L9 N1 w$ d1 f5 J
modelActions.createFActionForEachHomogeneous$call) @& g. |3 X7 d, F& J% K
(heatbugList, R9 S& ^/ f2 P7 d
new FCallImpl (this, proto, sel,
8 I4 N& }# A( M2 `! Z9 J new FArgumentsImpl (this, sel)));
w5 n$ R F) W. e& B) z } catch (Exception e) {
2 l% z$ E- G7 b6 Z* n; ^( r e.printStackTrace (System.err);
" d" L8 A% m7 W, O% j( G+ i9 f! y }
+ o4 X0 R* F' q9 W
. }8 ` g( @- u( O4 V syncUpdateOrder ();
1 Y4 N. }% Z/ M
0 M% v; ~/ b7 ]: N7 L# R try {
' B4 w% ^. e' [! Z. [ modelActions.createActionTo$message 9 G" |3 Q* t* z4 S6 Y
(heat, new Selector (heat.getClass (), "updateLattice", false));, B1 B, l% o6 P3 {$ I8 [
} catch (Exception e) {' b# C' v# V6 \2 _1 b' h
System.err.println("Exception updateLattice: " + e.getMessage ());
# F2 |7 C/ ]- l E J. Z }0 S7 n- g( n- Z* m2 Z$ A; v
9 c5 U, @3 h$ [1 E' w, @ // Then we create a schedule that executes the
- Q) W2 L) O) B) h // modelActions. modelActions is an ActionGroup, by itself it* d& p0 p0 ^/ U" x$ T
// has no notion of time. In order to have it executed in( _9 i/ x. U* f* b
// time, we create a Schedule that says to use the' p2 s( i, I5 O& j- G( }1 B) ?
// modelActions ActionGroup at particular times. This
' j2 a. C( U. I9 T // schedule has a repeat interval of 1, it will loop every7 q! `* i( r3 Q
// time step. The action is executed at time 0 relative to
- q- Q8 R8 E1 D/ f4 F // the beginning of the loop.% [) `1 |. f# m6 [; l% p" Y6 v
/ C2 R& `2 o. u // This is a simple schedule, with only one action that is* m, u7 t5 a6 f( |4 Y; Z
// just repeated every time. See jmousetrap for more4 `+ s; Z4 ?1 m2 g
// complicated schedules.6 K+ Y, ]$ S( b% S
1 O- `. u4 n* {6 Z
modelSchedule = new ScheduleImpl (getZone (), 1);0 W% M' K: s3 w# W8 l+ @2 ~
modelSchedule.at$createAction (0, modelActions);$ M: b3 Y% Z* ?: \+ Z( z8 x
0 O: [( l- W1 m3 u( l4 Z
return this;
, b7 _. Z, B5 E* m1 J } |