HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: { d( L# i, p+ k5 B
; ^: I. @% ]% z. F! s
public Object buildActions () {
( g# @# t7 n3 x( _% ]2 g" h super.buildActions();
2 a/ x8 |+ M6 K+ P9 C/ n2 {- s5 v1 p @7 r2 K( F" i2 C( O# O4 {
// Create the list of simulation actions. We put these in+ g" n9 u3 s' Z0 U$ V# r; ]
// an action group, because we want these actions to be+ y j1 ]6 ^2 Y4 Y3 D, M. }
// executed in a specific order, but these steps should+ L8 k/ n; S# [7 p; x
// take no (simulated) time. The M(foo) means "The message$ L' U0 e1 X6 e( [* H
// called <foo>". You can send a message To a particular
; k! v6 n5 @" `" k0 h3 U5 a // object, or ForEach object in a collection.
$ X9 ]9 b1 ]9 r( d. C
$ `0 y- C( D$ d" p' O, `/ N! q // Note we update the heatspace in two phases: first run
& u: S: N1 y& K2 u* Q6 } // diffusion, then run "updateWorld" to actually enact the5 S+ R8 F# n7 g5 |' r" k( ?5 u; k
// changes the heatbugs have made. The ordering here is4 w# Z( T& z- k
// significant!
/ S; |5 K- V$ v$ C$ w7 p : a9 {9 v9 q. S/ A& w
// Note also, that with the additional9 d$ x8 t* w4 m+ ~$ F" a, a
// `randomizeHeatbugUpdateOrder' Boolean flag we can4 R! M" _/ @2 D7 h# q* i
// randomize the order in which the bugs actually run4 e) r/ Y; a a
// their step rule. This has the effect of removing any
( F( j7 B( D [6 z+ a // systematic bias in the iteration throught the heatbug0 b$ e6 V, R/ s
// list from timestep to timestep
6 b `2 V3 n( l- F7 `" `
8 g* }- y4 S3 A" t( w1 E1 c // By default, all `createActionForEach' modelActions have
# t7 U5 P8 }0 f& a( n/ \ // a default order of `Sequential', which means that the1 \2 U9 Y+ v( U1 J6 q9 K
// order of iteration through the `heatbugList' will be0 o" F' x5 |% R: Q1 m4 S. i
// identical (assuming the list order is not changed
# }& ~- `$ Z6 n3 _% {5 v // indirectly by some other process).
2 }! M* w' |! x; u; @' `8 S j
* V; I$ Q4 L6 ^ t# d3 b7 s3 R modelActions = new ActionGroupImpl (getZone ());8 F( T2 C. [& h" l
' z6 P+ }7 ]) ^2 s u0 _7 A try {
5 Q9 b/ T6 e* }* m9 H9 @ modelActions.createActionTo$message+ i5 C' O& D6 G( c, q1 m2 h
(heat, new Selector (heat.getClass (), "stepRule", false));
V, T" j& g$ Q1 }8 `8 [: W } catch (Exception e) {
: G. t0 [. u; y3 Z3 o/ U System.err.println ("Exception stepRule: " + e.getMessage ());
# M' [6 x- G3 s }3 N9 K) a! H' U
* r, S, z" n2 x" }: F5 \( ] Y0 P! Z4 _
try {+ ?+ h, B6 u( `: X& e+ k% G
Heatbug proto = (Heatbug) heatbugList.get (0);! {# e' l. T$ H% y2 G8 e
Selector sel =
0 R1 ]7 w$ K) C' k new Selector (proto.getClass (), "heatbugStep", false);2 v9 f2 B. s S( s
actionForEach =0 o' [: Q9 s# I7 x& X& M
modelActions.createFActionForEachHomogeneous$call
. u+ _* |( N* ]5 z2 C, A, R9 W (heatbugList,$ Z% L% p" ?7 z0 C9 M
new FCallImpl (this, proto, sel,# K9 v: D4 o" N( U; e0 i1 z
new FArgumentsImpl (this, sel)));
" t9 ]- ^* [+ T3 L- ?( ? } catch (Exception e) {
* ?' _) U0 t! `9 i e.printStackTrace (System.err);
# y, p; Z4 E! d) H2 A K6 v9 d }1 |, l+ R3 ^# x5 `! ~) o4 R
5 s. I' i& b* B5 L& d+ Q1 g syncUpdateOrder ();
2 ~) \: I# e: c
- u/ w, z0 x0 B( i try {2 q2 q& V# x( c
modelActions.createActionTo$message
3 \8 d, m9 P0 c (heat, new Selector (heat.getClass (), "updateLattice", false));
? y$ _2 G" F& q# \1 c } catch (Exception e) {
3 s) U; s4 v @ P F5 L System.err.println("Exception updateLattice: " + e.getMessage ());+ X0 W1 A7 A6 t/ k; T7 @6 S% I
}
1 C* d3 `) I7 l+ g8 A' b+ S$ Z/ U
' p3 z+ r( J* ^9 x } // Then we create a schedule that executes the
2 y( _# Y, Y( c9 a5 G // modelActions. modelActions is an ActionGroup, by itself it
" _' r& f' {" P0 P1 V // has no notion of time. In order to have it executed in8 a$ a u% ?8 c C; T) i" k2 B3 e
// time, we create a Schedule that says to use the
0 e& r7 ]4 {2 P) D% W# T, g // modelActions ActionGroup at particular times. This
5 y8 \! T1 ]& K; k. Y1 E/ l) | // schedule has a repeat interval of 1, it will loop every, K. u0 ` Z/ w/ B
// time step. The action is executed at time 0 relative to9 O; ] r9 a9 X' U
// the beginning of the loop.! L) a: ]. X: O9 K( \4 ^, o3 w% ^
) ?1 W0 f; d( E6 h
// This is a simple schedule, with only one action that is* P c/ f9 y ?- Z) b, e3 N
// just repeated every time. See jmousetrap for more
9 [& d4 W3 C! U V3 h // complicated schedules./ e& `3 V# o1 ^1 x
$ b/ q+ w1 p7 I+ p7 A# {
modelSchedule = new ScheduleImpl (getZone (), 1);4 E. L# C0 n h7 {
modelSchedule.at$createAction (0, modelActions);1 G# q/ \0 K: W/ }. Y4 \+ L8 ~
, W; R5 `$ I7 W; s: l. s return this;0 e! @, Q* N- N3 t3 W; M6 \# ]
} |