HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 X! W1 o" F y8 R5 \2 F/ U4 i
4 {. p* }4 ^9 T' U
public Object buildActions () {
+ D" l7 S) m( P2 k! [5 u super.buildActions();
& }' ]; d" V% j, F% X' W
9 M/ Z" g# Y" ?9 `; c8 o6 E2 a$ ` }7 f // Create the list of simulation actions. We put these in: Q$ w2 i9 k0 _* J
// an action group, because we want these actions to be: W u7 X6 o2 r w7 s: E
// executed in a specific order, but these steps should
, M! Q) o9 {) ~8 K: e // take no (simulated) time. The M(foo) means "The message
+ |. R7 j8 E! z Q' w // called <foo>". You can send a message To a particular) ^6 q# b3 [6 x2 O0 H+ D5 u# z
// object, or ForEach object in a collection.
: ?+ c8 o: Z, u4 `+ a, Y
& @* S+ W6 H) P) x, x, l: h, W // Note we update the heatspace in two phases: first run
' m" ^* X/ J$ f/ b // diffusion, then run "updateWorld" to actually enact the
/ [- b) x$ [$ | // changes the heatbugs have made. The ordering here is+ p( \; J! ^8 ]
// significant!1 C* }9 i$ s% I& }+ Z6 E/ _9 J5 ^
3 X- J* Y4 _$ C! H" B& q. c // Note also, that with the additional
1 \# U) ]$ [) _4 p' v // `randomizeHeatbugUpdateOrder' Boolean flag we can) ^+ I9 N- L- `) j* e+ a
// randomize the order in which the bugs actually run
, q5 \- t5 w/ D+ h2 } // their step rule. This has the effect of removing any
K. P/ Y4 @' J3 t/ @4 c0 l: q // systematic bias in the iteration throught the heatbug% u2 C" c1 T- J b# j
// list from timestep to timestep% j# o- |$ y4 Q5 a
7 s: e# e Q* O2 F+ o: |
// By default, all `createActionForEach' modelActions have
8 [+ `% ?3 F% ?6 O8 P- W. a // a default order of `Sequential', which means that the
, J, T5 i# r1 ^ // order of iteration through the `heatbugList' will be
# w, T$ q# d% C/ G // identical (assuming the list order is not changed
4 M( |$ R! H% f0 t8 @4 S' f // indirectly by some other process).
' Q! q! f$ K/ A 1 x2 p! W# r$ R# T; [5 H& S# o
modelActions = new ActionGroupImpl (getZone ());
2 l! s+ ?3 e$ K1 A! d7 V9 F# k$ Z3 v
try {
* }1 B4 m. K+ ?4 w) c/ ?; m modelActions.createActionTo$message7 O/ ?9 {0 |! V
(heat, new Selector (heat.getClass (), "stepRule", false));
5 Z7 \+ j# }4 A } catch (Exception e) {
& N5 J1 b8 D: e8 H& P* `9 l System.err.println ("Exception stepRule: " + e.getMessage ());
7 {% h& ~" V1 Z) S0 [8 R }% _! J6 K; f) N4 B+ J0 z
2 \* T- W: b$ A7 |0 V) Y2 { try {# i8 S9 j) d! J3 ~ i( w& V
Heatbug proto = (Heatbug) heatbugList.get (0);3 v9 G5 M6 s+ h. z# t2 D
Selector sel =
, A, u7 Y, X) Z, @* _8 t new Selector (proto.getClass (), "heatbugStep", false);
3 e. O& w, p2 G" a' ~+ S: F actionForEach =$ _( M4 y1 Z9 _ b9 W) \% @
modelActions.createFActionForEachHomogeneous$call' |8 H& M* l! u) S9 F9 X! i
(heatbugList,
) v( z9 S+ p' u( z& ?% s. p9 s new FCallImpl (this, proto, sel,
% b& n1 C% B: I1 R: R2 `% H new FArgumentsImpl (this, sel)));" s) V9 y+ {( {4 e7 d) _
} catch (Exception e) {' {+ {3 Y9 i8 W
e.printStackTrace (System.err);" b) F& `8 n& x4 C% j5 _# j: [; y
}( G, M' u F# k: K$ L, K
2 ?# e, l/ k R9 z: Z syncUpdateOrder ();
& g0 L( Z' g! `* Q) A7 p
' x( I7 o! e0 x1 r9 E& Q try {6 J; G4 k0 u3 t) F) @
modelActions.createActionTo$message X0 }2 U7 @6 ^# v
(heat, new Selector (heat.getClass (), "updateLattice", false));) t |& ^; [ d4 D" t' {& o( y
} catch (Exception e) {
) |2 a% K8 e: q! J' _ @ System.err.println("Exception updateLattice: " + e.getMessage ());6 b5 f9 o. }" a
}
4 x! O' s% y- K; ~7 ^
0 E }. A Y) ]+ e // Then we create a schedule that executes the8 D5 I% w v# m* N
// modelActions. modelActions is an ActionGroup, by itself it
6 e0 ]( `) q* ^8 e3 P0 F // has no notion of time. In order to have it executed in/ w$ b9 u& ]1 b1 {+ z! }
// time, we create a Schedule that says to use the
' V n( L/ Q6 y* l9 I% W$ F // modelActions ActionGroup at particular times. This! H( t( c' P M5 {; B2 @7 A
// schedule has a repeat interval of 1, it will loop every$ s8 M W* O% B: \
// time step. The action is executed at time 0 relative to" D; `1 |; d3 w- q6 ^
// the beginning of the loop.
6 M1 B) {! q6 P2 x% s$ B# W) v. N* D3 N) Y( q- G, w, R
// This is a simple schedule, with only one action that is( d! Z0 ~# H- r4 n
// just repeated every time. See jmousetrap for more
. S/ L) i3 j6 q9 m; N // complicated schedules.* o5 D/ h5 S/ X5 O
8 h( l0 s' I+ c3 z. f
modelSchedule = new ScheduleImpl (getZone (), 1);
- z" |3 W0 y/ |3 M1 q modelSchedule.at$createAction (0, modelActions);- j- w4 K( X3 T& r& |8 V Z3 t
7 V- Y3 ` m* _9 L return this;: t' x$ u0 v8 s
} |