HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 d& X; X2 w( b1 z0 g! ~0 ?, C- ~/ d& r( ^) E/ S. ~( N$ r2 F/ h% C
public Object buildActions () {
8 c4 i3 D% K* K: D' z { super.buildActions();' z i1 s+ S9 {! w( G4 V9 j
U* y. |3 C/ |9 b: l N
// Create the list of simulation actions. We put these in- t9 p# }0 i7 Z8 T8 R5 n% {
// an action group, because we want these actions to be+ h0 H. ^( i* p# P3 ?
// executed in a specific order, but these steps should
7 ]" N0 T* M* f% h# {% t. v5 Z' Y6 A // take no (simulated) time. The M(foo) means "The message
) r C D4 r Y; j8 _ // called <foo>". You can send a message To a particular
/ E* A0 {! F/ N) Q% C, ? // object, or ForEach object in a collection.
+ \) w6 V! j( H6 p# m# W
/ s- r# y1 `0 V9 c0 ?2 O* [2 _ // Note we update the heatspace in two phases: first run) v" X; V# l+ ~5 U( c2 U$ y" }; n. [
// diffusion, then run "updateWorld" to actually enact the5 i" j. w* x" i2 F
// changes the heatbugs have made. The ordering here is5 q1 X& b* t6 k* d
// significant!4 |5 l% u. m! U# A n' w( E- H! s
) r4 h9 a* ]) x& n; t s. \
// Note also, that with the additional
/ N- d2 p; `; H6 Z4 c, Y' u // `randomizeHeatbugUpdateOrder' Boolean flag we can
6 G/ N1 [# @5 ?% x- q" e- \ // randomize the order in which the bugs actually run3 P6 o! a: f' R
// their step rule. This has the effect of removing any
2 _- O( }0 q2 z // systematic bias in the iteration throught the heatbug
0 O- K% S% H$ P // list from timestep to timestep! Z& |4 s9 w5 a3 a# t1 O" a( C$ ]
' l, u; E; R# x; l% x // By default, all `createActionForEach' modelActions have
# W1 C% Y/ m) S# t // a default order of `Sequential', which means that the
0 A# A- j5 G, H9 i' E0 f; [% { // order of iteration through the `heatbugList' will be! H: ^. L- H1 F: H7 s
// identical (assuming the list order is not changed6 e' D; c' {; m2 S$ s! k( m5 r
// indirectly by some other process).
; a$ ~1 t# Q W 9 j z' c+ X3 V: B, [
modelActions = new ActionGroupImpl (getZone ());) j: _* L' E+ s$ G9 D0 X
4 G, P$ K6 {+ d j4 B try {
( }! W$ z! y2 e5 f$ U- A modelActions.createActionTo$message
* F4 B5 O( \% C (heat, new Selector (heat.getClass (), "stepRule", false));
. n y2 R4 P$ S% l } catch (Exception e) {1 j) b8 ?* b$ q7 X! I
System.err.println ("Exception stepRule: " + e.getMessage ());$ J/ `; k) `; |9 g3 }9 Z3 V
}( j7 m2 l' Z! s7 z0 ?
* N. l& f9 |+ v0 t6 | }/ s6 a
try {
% p! M" ]2 j: Q/ s) L/ y Heatbug proto = (Heatbug) heatbugList.get (0);
) s+ I, x3 ~" R0 Y @8 u' ^% [ Selector sel =
* \. V/ H( H/ ^# j2 M3 u! O e new Selector (proto.getClass (), "heatbugStep", false);, O$ n# ?$ C1 M1 @, s
actionForEach =
, i5 U" ]# e$ _8 g; \. Y modelActions.createFActionForEachHomogeneous$call
8 @) H) C& h# {$ I (heatbugList,
2 H9 R' V5 t+ \5 O8 q9 M new FCallImpl (this, proto, sel,: c7 S5 E& S: r' f
new FArgumentsImpl (this, sel)));6 W Q' j0 B' M5 A$ r2 }2 L
} catch (Exception e) {
: v2 \* [' ^1 A" v e.printStackTrace (System.err);: y `, w! z* i$ ~: _
}/ I' U. T/ n( h5 e8 v
" v& y1 A1 g" V+ v" \
syncUpdateOrder ();
0 v( [7 q$ U, v D
& M3 S+ w1 _5 | g( x2 \; W3 r try {; e$ l3 y- @9 N
modelActions.createActionTo$message
$ Q7 _3 M) T( J2 U0 H2 l1 H (heat, new Selector (heat.getClass (), "updateLattice", false));; D/ `8 u; j0 { h& [4 a ^; Z
} catch (Exception e) {
+ \) V$ b, O# c, u5 A/ c System.err.println("Exception updateLattice: " + e.getMessage ());
h; G, M1 L5 j2 k }
9 t d C( X. ]0 G* R
# G5 X, C5 e h* g // Then we create a schedule that executes the u- p2 b p- J/ y3 e( O! }- D
// modelActions. modelActions is an ActionGroup, by itself it
# y: _. a( l, F // has no notion of time. In order to have it executed in
' d% s/ Z0 ?- e; K; ?- U8 {, j // time, we create a Schedule that says to use the
/ Y& R: @1 ^( z3 O // modelActions ActionGroup at particular times. This
7 {) T0 n3 u8 {8 |9 ` c& b ` // schedule has a repeat interval of 1, it will loop every' C% Q6 f7 Q* Y; h9 {
// time step. The action is executed at time 0 relative to- H" p& d( ]) _5 b# ~! a5 X
// the beginning of the loop.
) E. x' O; a! ^' z) h2 U. T
0 n- ?- i0 U Y/ j v. ~5 J // This is a simple schedule, with only one action that is" s- j* ~$ b: p! p
// just repeated every time. See jmousetrap for more: d0 P" ~! R/ m
// complicated schedules.
9 L) l& N0 B+ h- t
3 t( ^$ s3 h6 \3 D modelSchedule = new ScheduleImpl (getZone (), 1);0 z3 r. e) m0 E& W9 Z
modelSchedule.at$createAction (0, modelActions);" D0 z6 w+ I3 o( L$ i
+ {, d4 F8 Q8 F! ^* H; Y% W8 V return this;
) M( D0 Q1 c- F" N, v7 Y9 _ } |