HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" ?. j2 i5 p, a+ p+ z6 v
8 B# H' Z3 q6 z8 }/ N9 h# C
public Object buildActions () {# H3 i1 q& d4 d1 Z6 z
super.buildActions();' T( d, h# d. y4 e, K
. E3 v# l! f: V& v$ {8 H // Create the list of simulation actions. We put these in8 ~/ f* \8 D1 }
// an action group, because we want these actions to be
. M5 d7 y$ N. l6 e // executed in a specific order, but these steps should2 Z8 F8 F8 D7 D+ p0 E
// take no (simulated) time. The M(foo) means "The message
' x# ]5 _! G. `0 o, m // called <foo>". You can send a message To a particular
A$ N, B5 V( M/ w) _ // object, or ForEach object in a collection.# j( \* c# C' q
6 L; F3 z2 x% l- E- F X
// Note we update the heatspace in two phases: first run
! Q5 ]: o/ c+ ^$ q- R // diffusion, then run "updateWorld" to actually enact the
9 r6 F* P2 c" c* W // changes the heatbugs have made. The ordering here is7 \( q+ n* c' H9 {- v
// significant!/ \ ~# i! `; K( h- k. X8 g
) ?5 y9 `6 ?$ m& p1 P9 o4 Y
// Note also, that with the additional
( \8 E- `& \* C, { // `randomizeHeatbugUpdateOrder' Boolean flag we can1 Z: Z" v$ }- A) W: |1 _$ b
// randomize the order in which the bugs actually run
. U+ E$ e* g$ r! j! M, H // their step rule. This has the effect of removing any
" n4 \" M2 W) Z0 m* F8 j! x // systematic bias in the iteration throught the heatbug9 ~& n' {8 l! |
// list from timestep to timestep
G9 W7 ~% r1 b0 g, f2 K9 N
+ ~# v( c; J7 ]9 ^4 J // By default, all `createActionForEach' modelActions have
|: w. ~. X- P4 s# v: ` // a default order of `Sequential', which means that the6 A) J5 I) |3 |; C& ]/ I U
// order of iteration through the `heatbugList' will be: b0 g! z. V) o4 e5 x: D& n
// identical (assuming the list order is not changed s9 f$ B2 q. U. W* D+ l4 o X
// indirectly by some other process).# |9 v9 F; g" I( V1 g; I1 i
+ q' m8 Z" U3 t# t- q& S4 u& z6 P modelActions = new ActionGroupImpl (getZone ());
, u' u1 W6 |* V2 C7 X: Z& y3 j: }8 G8 w. k+ i
try {
2 K- N) g0 A! S& O$ U; M9 \9 A, L- ?; E6 g modelActions.createActionTo$message9 F ^ J' j6 Z; F& n8 x: \# t
(heat, new Selector (heat.getClass (), "stepRule", false));
" F) [+ z6 H& W% |$ S } catch (Exception e) {+ R6 Y# k7 v! U
System.err.println ("Exception stepRule: " + e.getMessage ());
* { {# s, j" _$ W! { }# ?- ^7 S' s) U/ y& V; m
7 H, n5 z6 s8 Z, r
try {) C. J* `+ Q' X8 j l, p
Heatbug proto = (Heatbug) heatbugList.get (0);
1 k* L5 ?; |$ E2 n Selector sel = # @) c7 n' I* f2 X# y; b* M
new Selector (proto.getClass (), "heatbugStep", false);
2 [1 ?! ?$ T+ I/ c, F( _& [ actionForEach =
2 r& i, V: U1 f9 R. `7 U modelActions.createFActionForEachHomogeneous$call
2 ~5 l! c8 L- x (heatbugList,
; U* v7 ^5 a# Y" o new FCallImpl (this, proto, sel,
: S X) U! q5 U% ~ new FArgumentsImpl (this, sel)));9 a! I s! z1 I9 [( s
} catch (Exception e) {. U7 n% t- O7 d* R' P% U
e.printStackTrace (System.err);
0 Z5 m0 j1 |' @# r6 X0 b$ G- D }& K3 O$ p; R4 w
5 g d- ~' h$ H. f. \9 v# Q1 E! S1 C( w syncUpdateOrder ();
1 J" s1 G' k* F. B9 a' r; R& N& ?% U. i b( E7 m
try {
! T! U9 y! i" {- e modelActions.createActionTo$message ( `# ^) b9 _5 `+ u
(heat, new Selector (heat.getClass (), "updateLattice", false));7 T+ ^, @, N% g
} catch (Exception e) {
s5 z1 s( N/ z- Y& h System.err.println("Exception updateLattice: " + e.getMessage ());
/ R8 O. I% {* i P: X, q1 a }/ y6 G7 H1 {+ V) x0 \7 x0 }: |/ B
, |3 O" A# S7 A* p' R // Then we create a schedule that executes the
6 U3 |: T3 x I3 U$ U // modelActions. modelActions is an ActionGroup, by itself it' F8 f+ S' [0 k: P8 m0 @8 Q& ~; g
// has no notion of time. In order to have it executed in6 ^/ R9 l& B& f3 M
// time, we create a Schedule that says to use the, c; T9 z- d I' Q' I4 j7 @
// modelActions ActionGroup at particular times. This5 q3 |& `0 D. A' G! ^
// schedule has a repeat interval of 1, it will loop every
7 \, ^6 c3 o p) u$ F+ l // time step. The action is executed at time 0 relative to
$ ?6 l& }# O' f; e // the beginning of the loop." v" R. _5 i1 X9 {1 e \
3 U) \+ d8 O+ v! i3 h // This is a simple schedule, with only one action that is
) b+ v! q- C2 P! r% v // just repeated every time. See jmousetrap for more
; F0 l/ A$ |' w) l$ @5 F z3 G // complicated schedules.
" V7 x, }' |0 X! \ J ! t& R7 X! l. M# L5 A' i
modelSchedule = new ScheduleImpl (getZone (), 1);/ x3 n z2 w) w
modelSchedule.at$createAction (0, modelActions);5 D; j: G( n: J2 c' y e
+ p" ?% i3 P. z: J: q6 m( C return this; p0 [- ~6 f0 U; P3 Y0 c( F
} |