HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& D3 I+ J3 t, t: P8 V4 T" J2 B2 {- v" U$ ^, k8 [# J
public Object buildActions () {
0 ^4 J" } S) |; J super.buildActions();5 G# R5 i) w8 Z+ L7 j4 t
2 `' M# ? N# U9 R9 f, h3 o& ]5 T // Create the list of simulation actions. We put these in3 V7 U1 {' d8 T2 Y9 S
// an action group, because we want these actions to be6 o: T# C ]' L! V
// executed in a specific order, but these steps should+ V& c8 S6 S1 ~9 I% \# m) W
// take no (simulated) time. The M(foo) means "The message
- ?) w' u3 R9 P# W& e" u9 e // called <foo>". You can send a message To a particular
% a3 g4 z/ P+ |8 s7 X // object, or ForEach object in a collection.
* }& \. c2 ]2 k7 h6 L
. Z2 ?* s) P) X0 Y% X // Note we update the heatspace in two phases: first run
6 d! D2 Q! l9 R- t# n& m1 e // diffusion, then run "updateWorld" to actually enact the; \" Q* T8 }& s
// changes the heatbugs have made. The ordering here is2 r& J8 D g( I6 \' Z- b( [& Y/ t
// significant!
5 w! f$ {1 }5 [ + v- Q/ h8 j- E w' ?
// Note also, that with the additional
' G0 F- s+ g) V0 ?* W. ] // `randomizeHeatbugUpdateOrder' Boolean flag we can
3 m7 J* \ r5 Q! y // randomize the order in which the bugs actually run& ^) d3 f; r% y
// their step rule. This has the effect of removing any
1 K- J! f! B/ p0 q0 f // systematic bias in the iteration throught the heatbug
9 n9 ?/ `8 B- ~ R // list from timestep to timestep" Z1 o9 M- @6 \: B+ u
& h. D: ^& {$ I7 U5 S // By default, all `createActionForEach' modelActions have4 [ P' n9 h6 z+ X3 T: S
// a default order of `Sequential', which means that the
( M$ F, ~2 x& l3 V" p) n // order of iteration through the `heatbugList' will be* V$ R9 G* X# I! c% T
// identical (assuming the list order is not changed
0 c" E- V; c. W9 E S/ E2 R // indirectly by some other process).+ E) k6 F4 N! j( f7 Z, h
% h4 O6 N' n" c1 Z" r modelActions = new ActionGroupImpl (getZone ());
6 q& v) |( c3 G% |& \$ o' u- n$ Z* S, S9 h
try {- x$ G9 J6 R4 @. n2 }9 J' O8 h
modelActions.createActionTo$message" r6 }, \2 Y" {9 L# d( g! k
(heat, new Selector (heat.getClass (), "stepRule", false));7 L; v8 E- Z2 v* n' _
} catch (Exception e) {# i# E* @/ F+ }/ o: U/ F- y5 _
System.err.println ("Exception stepRule: " + e.getMessage ());5 X3 Z0 g/ c: h/ p
}* y; d; n% O8 S
( i$ ]* i; C$ ~/ f0 d3 L' q try {
' S/ \! S0 r; r! r Heatbug proto = (Heatbug) heatbugList.get (0);6 }- V1 O. b! c
Selector sel = . N( ?1 F* D7 B2 T- U0 J
new Selector (proto.getClass (), "heatbugStep", false);
8 m3 z+ P7 u' g7 ^9 u) a7 E! V actionForEach =
) `: p( n8 w9 p) C; C modelActions.createFActionForEachHomogeneous$call3 E8 i. c( h7 x
(heatbugList,, a. Q' E: i6 L5 S
new FCallImpl (this, proto, sel,
5 H5 M) A) h6 U9 e( M/ m new FArgumentsImpl (this, sel)));3 q5 n3 l9 e8 s$ U$ k3 v
} catch (Exception e) {; h( _* m) n* x8 J. ^
e.printStackTrace (System.err);/ |0 R" Z' Q2 n
}4 v/ S2 W# C% J9 e$ i# P4 s5 }
4 m# G+ R9 | ~* L/ c syncUpdateOrder ();/ r0 c8 L2 C" i2 g' n1 y
6 @7 j) W$ V& x% x. @. V* I try {+ D- S4 Y" n9 m3 B
modelActions.createActionTo$message
% r- T! p' T! m: c (heat, new Selector (heat.getClass (), "updateLattice", false)); h( j5 M7 g* l3 ]5 A
} catch (Exception e) {! ^* @" f& t2 c+ ~8 D! z3 l
System.err.println("Exception updateLattice: " + e.getMessage ());0 ?( b8 m7 D u0 l9 I7 O6 d
}; O8 ~' Z6 d: f2 q: p3 P8 ^0 @
8 l) _4 _, y0 W5 S* Y# g
// Then we create a schedule that executes the# t! E0 }$ W/ D
// modelActions. modelActions is an ActionGroup, by itself it
7 H# ]: m" h& A( }* B // has no notion of time. In order to have it executed in- e/ G& J" g" z, o J6 Q, U! t
// time, we create a Schedule that says to use the
) a2 C7 b5 [) H6 ^6 x // modelActions ActionGroup at particular times. This! @0 V$ O( A. n& r( V
// schedule has a repeat interval of 1, it will loop every
' K6 {% z; a. v1 {8 c. v+ `! P // time step. The action is executed at time 0 relative to
9 v( N, @3 n. E% x // the beginning of the loop.
% S8 w% u. ^5 P( G' X
- h4 G" r7 t q( f, I* t! L$ a // This is a simple schedule, with only one action that is
2 D, O/ ~) Q; J! G9 z // just repeated every time. See jmousetrap for more n9 c$ E8 J# c L8 D2 Y' R8 {5 b
// complicated schedules.7 g- h: Q$ v3 H3 c) [
( _7 q$ K' H! Y, {1 a modelSchedule = new ScheduleImpl (getZone (), 1); t/ i) F* P3 ~( q% ^, _
modelSchedule.at$createAction (0, modelActions);
0 r, E7 O* l w/ K6 r
; b' G- R8 h: K5 F return this;# U1 I5 n9 o% M6 M3 [6 l3 @: _
} |