HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下: l! c0 B6 Q$ K8 J9 a% h: T
" D& n9 Q8 }8 c+ l! n! A# C: D+ o4 c
public Object buildActions () {2 Z B, ?7 h0 \/ k, l
super.buildActions();
p2 H7 }# F, W9 |6 S% R. t9 X
4 I0 D. x7 O: ~; N U // Create the list of simulation actions. We put these in
7 B6 ^& t5 Y2 u4 T% L( u7 X" } // an action group, because we want these actions to be
( J- g5 m+ b. O8 w // executed in a specific order, but these steps should
4 {7 X+ b" v" X* U/ ~/ E, a // take no (simulated) time. The M(foo) means "The message* A2 H3 e( y! q9 O
// called <foo>". You can send a message To a particular6 j+ E9 ~2 j7 {' ]
// object, or ForEach object in a collection.+ C- E# w% {( l) S! a! n( R$ c
6 s! k. d1 ~: J* g t
// Note we update the heatspace in two phases: first run
) I: M" ]8 g* J: A // diffusion, then run "updateWorld" to actually enact the
; K2 D! y2 f( ?& r9 h* a3 g* @* e // changes the heatbugs have made. The ordering here is8 y$ G3 k5 S/ ?
// significant!
+ x1 R+ m2 H, Q6 a k. V2 a- X8 l * v5 A1 K( } ~& {
// Note also, that with the additional
5 [1 v: v/ w# ` // `randomizeHeatbugUpdateOrder' Boolean flag we can4 {6 Y3 l2 ~6 v2 g
// randomize the order in which the bugs actually run9 A: w$ g/ ]9 ?5 Y0 \% _3 P
// their step rule. This has the effect of removing any; j7 H, t8 l$ I m, X, L
// systematic bias in the iteration throught the heatbug# h3 W' m0 W1 [( C+ k; L1 c5 {" @& y' n
// list from timestep to timestep
- @) W& ]9 s* [8 C1 I" {% F' d * ^' Y& q/ n" |! ]# a! t
// By default, all `createActionForEach' modelActions have
. [ b5 K+ J% L2 M/ u" M // a default order of `Sequential', which means that the. ~- c2 a1 {" s
// order of iteration through the `heatbugList' will be! f+ O- P8 B4 }. ~' l; ^4 c, Y
// identical (assuming the list order is not changed/ l6 z$ `" ]2 m3 R1 J! m, N
// indirectly by some other process).4 Y& T; I0 S6 p b7 K J
% Y* N g" o: y0 \
modelActions = new ActionGroupImpl (getZone ());$ r H T8 B" o8 b5 B0 N7 f- Y
: p4 d2 b( ?1 ~7 ? try { v, J0 V; |, H4 N
modelActions.createActionTo$message
! r+ u* H( c' \" G7 V (heat, new Selector (heat.getClass (), "stepRule", false));
, S0 F! n# `1 o8 f& x5 c } catch (Exception e) {8 j" q0 @1 h9 Y; X+ g1 H! k
System.err.println ("Exception stepRule: " + e.getMessage ());. f0 q/ b* J8 W7 g
}
# b J/ l" e# e. k
- d) H: M6 R* K0 P try {
. q5 X' y! m+ l5 D( q% N5 O( E Heatbug proto = (Heatbug) heatbugList.get (0);) L9 u: F z- k* W6 A
Selector sel =
' o1 H' i( R/ D* A+ A. h# L new Selector (proto.getClass (), "heatbugStep", false);, p7 N* I G; b% D. c
actionForEach =6 y- ^$ A2 S( y9 s/ j
modelActions.createFActionForEachHomogeneous$call$ F9 e# w; l; S
(heatbugList,
; Z0 P0 n0 J3 V2 b# \' X. A new FCallImpl (this, proto, sel,
9 c$ ]1 Y% X, _ W6 `1 B new FArgumentsImpl (this, sel)));
" M: E9 s! ]% t: P& |" C } catch (Exception e) {1 b, y6 \: b# c3 {" n
e.printStackTrace (System.err);! G9 M- s$ S0 u; I, W4 K
}4 J5 f' A' ?( _. m
9 s7 ] z% y" F2 F: ~6 C
syncUpdateOrder ();
6 f5 C' J$ E# C* U2 B7 t: P- J# G/ ?5 r9 _
try {' c+ q1 ]( @: O9 B
modelActions.createActionTo$message
" n" m6 k+ S2 I2 \, } (heat, new Selector (heat.getClass (), "updateLattice", false)); A' U, _# Q+ o2 f8 L
} catch (Exception e) {
! v& M6 S% m1 o' n' q% i System.err.println("Exception updateLattice: " + e.getMessage ());7 |0 l& m2 {+ X1 a7 ?
}8 n( E7 o I4 f; n6 O9 Y
+ D( |; M4 J$ n. {
// Then we create a schedule that executes the
5 H' D: }" X4 {% [3 h6 r // modelActions. modelActions is an ActionGroup, by itself it
/ A( r. R9 m# ~ // has no notion of time. In order to have it executed in( ~0 N0 l8 o1 }$ M8 f8 {9 _" ]! p
// time, we create a Schedule that says to use the+ ~4 d$ Z( R; r9 E; H- r( i
// modelActions ActionGroup at particular times. This5 I; Y6 K/ }, Q7 _% v2 I8 o
// schedule has a repeat interval of 1, it will loop every1 E; J) V/ a* @8 _
// time step. The action is executed at time 0 relative to& x' e( p' l9 N+ J& Q0 u
// the beginning of the loop.: n! _/ w/ K1 L" Z
) [% F$ k @+ b2 U1 j- z
// This is a simple schedule, with only one action that is$ H& S: F4 R" j" Y7 I
// just repeated every time. See jmousetrap for more6 u) c, f( ?5 g7 z) f' _# ^9 Q* F
// complicated schedules.
% U3 j7 [9 ~: n. L Q2 f7 Y3 q
9 @( X5 n3 n& q& D7 l modelSchedule = new ScheduleImpl (getZone (), 1);
6 {# d! d. B; u modelSchedule.at$createAction (0, modelActions);. Z- I8 `5 d4 U" ^3 c5 s+ e) {7 U, {
5 i0 j) H2 J. N& h$ |. d return this;- R+ d" i Y) Y
} |