HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:3 J) S' C' U$ Q) y2 O! Q7 Z+ }+ E. y) a8 x
% P! O8 I" v7 K; k, H+ R3 t
public Object buildActions () {
. f4 ~6 Y, |' {& o" e3 y. o super.buildActions();
0 y7 e& s+ V+ Q B) I ) x. k0 \ o+ N' C3 Q; O* |
// Create the list of simulation actions. We put these in
* [0 R7 |- ~8 [8 ]1 b8 P // an action group, because we want these actions to be" L$ M; s3 h1 g1 A6 _9 ?( g
// executed in a specific order, but these steps should. \1 N% Z9 S5 ?& `$ c, v/ X! |
// take no (simulated) time. The M(foo) means "The message
; V, D, e% C+ b; f6 ~7 a // called <foo>". You can send a message To a particular6 w* E9 x- @; H2 M: X
// object, or ForEach object in a collection.: e l5 S& F2 e @$ P9 \7 h
! q6 D2 } c) } v" B2 w3 M6 w // Note we update the heatspace in two phases: first run& M! M" i+ c6 X2 S+ n
// diffusion, then run "updateWorld" to actually enact the
: G' I2 c& e9 K // changes the heatbugs have made. The ordering here is
+ o! C# H0 ?9 f // significant!
: d, F& t; R5 T5 i$ h' |/ P5 L & e# ] c3 q; n' h5 ^ D
// Note also, that with the additional
5 G$ n- d5 c& \ X! U; v; Y // `randomizeHeatbugUpdateOrder' Boolean flag we can
& w$ t9 G% a8 }! Z, n4 { // randomize the order in which the bugs actually run1 J. @- d1 g0 Z/ R
// their step rule. This has the effect of removing any
. y+ O/ V+ |/ f' I // systematic bias in the iteration throught the heatbug; c* u: Z# H3 M( p* E# |
// list from timestep to timestep: E U, A+ x I( R u
1 t8 L- \" ^: [6 }- z
// By default, all `createActionForEach' modelActions have
; m) z2 ^, y8 X" z; R+ c // a default order of `Sequential', which means that the
$ b+ T2 L0 Y. e! X // order of iteration through the `heatbugList' will be. N0 e4 @( @! W# H5 H
// identical (assuming the list order is not changed
6 E. _/ E8 Z# n // indirectly by some other process).
T6 y/ d6 A) O! H: A, \
; Y8 R9 A- o6 X( e, W( W) C modelActions = new ActionGroupImpl (getZone ());4 o+ W- p9 E4 ~4 ~* B
/ T4 v9 s& H5 i' ]. b
try {
+ _8 w' H5 o! K a* g modelActions.createActionTo$message
e$ H$ @; i! T3 N& c8 F% B (heat, new Selector (heat.getClass (), "stepRule", false));$ E0 q+ S) ?! e: z
} catch (Exception e) {( m9 `( Z U$ W. i% S# |
System.err.println ("Exception stepRule: " + e.getMessage ());
" l2 X2 x1 t; g% s4 e }+ B2 c0 M8 U+ W5 T
7 I/ b( \7 K2 ~, w
try {/ @. t6 G+ P4 \! ^9 S% D6 P( Z( t" d
Heatbug proto = (Heatbug) heatbugList.get (0);# F/ h: P: u U# j
Selector sel =
2 q; F( v5 b8 v8 @. W; E( f new Selector (proto.getClass (), "heatbugStep", false);9 f5 |: ?4 p6 U
actionForEach =" D- {, B0 P% U0 w: X3 O4 X
modelActions.createFActionForEachHomogeneous$call
) O a' D2 A; f* h (heatbugList,9 g: |2 b, e( Y
new FCallImpl (this, proto, sel,/ ?# H1 G8 F x6 s
new FArgumentsImpl (this, sel)));6 G$ y8 H3 i& t
} catch (Exception e) {- N8 k0 u# E$ L5 f: x1 L& g
e.printStackTrace (System.err);
4 W1 {# @- u0 P$ F! ]7 T2 y3 B( J! Q }
" v) e8 }, I8 C+ m / R$ H, \, L/ K! |
syncUpdateOrder ();$ _0 ^5 ?0 m3 R# \
* j @% p8 R3 B
try {) ?+ O- k4 U) N% D/ P& P9 k
modelActions.createActionTo$message
0 ? v, b& W0 C# m; v6 z (heat, new Selector (heat.getClass (), "updateLattice", false));$ s; H$ E+ r) ~, t0 U( a( L( l
} catch (Exception e) {$ {. V5 `8 s0 h P' c
System.err.println("Exception updateLattice: " + e.getMessage ());' o! _" x9 U% e3 g7 C# L
}
) {7 P5 F( J- L0 p% ^$ H. C ! T4 b S, I/ ^! W) ]) t9 I
// Then we create a schedule that executes the. z; ?6 C% C1 q! K3 ?
// modelActions. modelActions is an ActionGroup, by itself it- e; P, c4 v9 V) @" U
// has no notion of time. In order to have it executed in
- D& D' e+ s9 D; [ // time, we create a Schedule that says to use the& [: s( o( ~% g s# ?; a8 D6 Z. _
// modelActions ActionGroup at particular times. This2 ^, A: j& ]5 q' p2 T- _
// schedule has a repeat interval of 1, it will loop every
3 c$ u1 s, [: ~& s# i! D3 \9 R // time step. The action is executed at time 0 relative to
. v6 }5 I C5 m // the beginning of the loop.
' \4 K; |3 `5 ^. m5 u; f1 W$ Y% ?) K( p$ p! I6 {0 N/ a% {1 f3 b* J1 [. \
// This is a simple schedule, with only one action that is
8 |4 J, u+ C6 U5 D. m6 d5 L2 z. [ // just repeated every time. See jmousetrap for more* q+ i9 ?! n& w9 Q; d, o
// complicated schedules.
$ ^$ M& o; E) z& i2 x1 n# y6 G
b: ~9 s7 f3 {/ J2 J7 } H" y. X modelSchedule = new ScheduleImpl (getZone (), 1);/ m4 h/ Q4 s! H- _0 x7 ?: L
modelSchedule.at$createAction (0, modelActions);
( p; `; K2 c. e # y- T& Q* j N' Z# X
return this;* O5 O: R8 a4 o9 ~/ g3 _
} |