HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:+ q9 e/ [; z8 X7 ]/ j
$ W2 m) O' C$ `
public Object buildActions () {- Z& Q4 D4 k1 t7 U
super.buildActions();3 u' k( L/ X6 s; b) K* e
) @, V6 _7 _- ]( Y6 E. K& V. g
// Create the list of simulation actions. We put these in
+ P1 ^: O, Z$ b' G3 `3 S- W7 R // an action group, because we want these actions to be: n9 I0 F) X2 v
// executed in a specific order, but these steps should
+ R$ U- w3 x% @* Z6 x // take no (simulated) time. The M(foo) means "The message/ ~" S" I3 l2 @% U+ C! I
// called <foo>". You can send a message To a particular
- i: M5 y) @# I, P. G) ?- ^ // object, or ForEach object in a collection.
9 C% v/ y4 |& j
, f! B+ i% E! o" B // Note we update the heatspace in two phases: first run" J* w, v* M: |1 v: I
// diffusion, then run "updateWorld" to actually enact the" M6 I& ^* E: C+ }% e
// changes the heatbugs have made. The ordering here is3 E! \/ u, K' z8 J
// significant!
; y8 Z( s/ E2 W6 A8 N
: K+ H4 @/ k9 e* X // Note also, that with the additional
) D5 b8 {7 e, E9 d& ~$ Q ] // `randomizeHeatbugUpdateOrder' Boolean flag we can0 T% f9 a4 N8 B5 N( l' ~. {. c
// randomize the order in which the bugs actually run8 ~/ j- V3 Z r3 d- U
// their step rule. This has the effect of removing any
; ?, @6 k# d' f$ x // systematic bias in the iteration throught the heatbug% l. _+ A# |% ~8 [& R; E' t# z
// list from timestep to timestep
2 h. C; a3 L5 T7 ?* q7 Z7 s 0 m0 D5 p* Q8 Q6 n: T
// By default, all `createActionForEach' modelActions have+ N1 | M! e4 p5 X* u3 M' {) R
// a default order of `Sequential', which means that the
, M6 u, _6 M% Q( m Z$ E // order of iteration through the `heatbugList' will be
9 y4 L% ~( m \) ^; d. K // identical (assuming the list order is not changed" M9 c7 Q! c. E* A9 R
// indirectly by some other process).
$ P. p8 L& ]% i( d: D1 |+ d
& q3 H* u9 G7 l0 i5 I) u modelActions = new ActionGroupImpl (getZone ());$ a- S, e) H6 h% q b) ?
$ K$ F. l0 Y+ z: X8 M0 g) p% q try {+ n5 e% ?' s) `/ K
modelActions.createActionTo$message
# V, ?% g; e. Q/ P (heat, new Selector (heat.getClass (), "stepRule", false));8 a1 z7 ]1 Q$ j! _
} catch (Exception e) {9 F2 W) W8 u7 A/ z
System.err.println ("Exception stepRule: " + e.getMessage ());
. o9 K O& t' ]* T2 u }& m- b2 U& t, }" l9 ~) d5 I/ e
0 m+ H, q+ Z; v# C5 ~0 N8 J
try {
7 B) @! Q) L+ D- t) \) J- y: c Heatbug proto = (Heatbug) heatbugList.get (0);
1 H: }7 }) |2 d) Q Selector sel =
# I2 g% e$ d" t; R! P new Selector (proto.getClass (), "heatbugStep", false);
2 G7 f9 _! ~3 k; A) v; m: j actionForEach =# {% _0 I/ e9 Y$ E9 Y) L: S% Z
modelActions.createFActionForEachHomogeneous$call/ X. {) k* b8 @( ]& h8 n
(heatbugList,# c/ M. |& [0 b, h0 d& ?
new FCallImpl (this, proto, sel,
x* U- h" _# s new FArgumentsImpl (this, sel)));
7 V. y' Z" Y7 I* Z1 A } catch (Exception e) {9 @0 n) z' ]4 d& n3 d
e.printStackTrace (System.err);! ] Z/ S6 b0 @/ w& s" ^) ?' s0 V
}, X; f( W: D ^* ?( y/ i4 C; y3 ~: e
9 j$ f: j. U9 x9 l! {, R
syncUpdateOrder ();
1 C7 k' X& A% i2 G! |. ]7 N: \0 x! G& h4 {4 I6 Q' F$ D( f$ ~
try {$ g- U, P" X+ ~4 i( f
modelActions.createActionTo$message
, m4 d- ~: r( E" B8 ^* b6 U (heat, new Selector (heat.getClass (), "updateLattice", false));
& e/ ?( J) q2 K, Z- a/ Z } catch (Exception e) {0 a* g& N) P- m. {
System.err.println("Exception updateLattice: " + e.getMessage ());
- F) Q9 T# X b3 t" R" A a }: _: {0 ]: E( `, P
. V# G' ^4 Z2 m+ S% {; _1 T( Q
// Then we create a schedule that executes the8 i0 b( S5 n" J& G6 R6 n* c
// modelActions. modelActions is an ActionGroup, by itself it1 s2 [8 o; V }# h' Z7 e7 P' ~) C
// has no notion of time. In order to have it executed in
: E7 z6 Z3 ~4 `0 q- n: Y& c. U // time, we create a Schedule that says to use the
9 s* F. f [5 x% t( y& F- f // modelActions ActionGroup at particular times. This
4 _, o* j+ {* B# s! n% S // schedule has a repeat interval of 1, it will loop every
, A9 H! i8 e' E6 D: R // time step. The action is executed at time 0 relative to
& U( m! ] k6 ~* G5 Y+ G" s% w // the beginning of the loop.
' l; G, e4 k5 Q$ A6 X) E; _4 y9 {6 W. ?% Z% Z' L! r+ L$ A3 ~
// This is a simple schedule, with only one action that is2 Y Q$ A p5 a/ k. X
// just repeated every time. See jmousetrap for more0 J1 P* Y: a3 b- \
// complicated schedules.$ @4 [" m9 W. D" k7 u: a
, y7 N! K3 D4 {/ N( D8 b' ?# B modelSchedule = new ScheduleImpl (getZone (), 1);
* X5 X! J9 \6 {9 K# S3 D% h3 U' ~ modelSchedule.at$createAction (0, modelActions);
* d) X' U9 _ l: R; i* Q" K5 E 8 ?. g: a3 t. \$ K+ ]
return this;
0 ^ O, I+ v0 E+ v7 F* N } |