HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, ]7 m+ i" t& i& s7 w4 [8 c9 F9 _& i2 z, M6 {5 E, V6 _
public Object buildActions () {
" \$ u1 `5 {# y) t5 d super.buildActions();% M: @* P9 K* {; }" A0 T: I+ R
+ ^+ `& r% |) Z
// Create the list of simulation actions. We put these in* H: l4 n# B9 A
// an action group, because we want these actions to be
$ X( _6 p' G& W% E( d$ u // executed in a specific order, but these steps should; r3 F+ `0 y' @* g* V' \
// take no (simulated) time. The M(foo) means "The message1 u0 |# ^0 R3 F/ R5 a: u/ n" o% g6 _
// called <foo>". You can send a message To a particular
$ N; A/ r+ _" y/ t, T% ]0 N // object, or ForEach object in a collection.4 O- s+ i1 |, p* E
$ q" u; m A0 }
// Note we update the heatspace in two phases: first run3 c: {% d2 W1 d5 @5 L. e( t
// diffusion, then run "updateWorld" to actually enact the1 I6 c2 D& c: C7 ~1 v Z4 Q
// changes the heatbugs have made. The ordering here is8 K6 V$ e/ q( D+ w4 L3 p$ n; m
// significant!6 F1 M/ ?) v, j
. t A% Q$ d- K) \ // Note also, that with the additional
: F, c$ J4 H1 o, A. u; Q9 K // `randomizeHeatbugUpdateOrder' Boolean flag we can
7 O8 D @1 ?. x T2 E // randomize the order in which the bugs actually run
+ c; ]4 v* [/ @7 R7 \ // their step rule. This has the effect of removing any9 f. s9 ?* Y% O7 ?' Y* q3 w
// systematic bias in the iteration throught the heatbug) y0 c6 s* f3 [/ D1 g3 B! v' w; N+ e
// list from timestep to timestep
; S+ C4 D: \# W
& W' I2 Y- F" ` // By default, all `createActionForEach' modelActions have6 v( z) Y4 P) q4 _1 B
// a default order of `Sequential', which means that the& Y/ i4 v/ q R9 I* @
// order of iteration through the `heatbugList' will be
6 w4 R" x& G& ?; }* `+ y // identical (assuming the list order is not changed
3 Q5 a. R) U2 M2 A/ S // indirectly by some other process).
6 z7 @+ G1 K ~( |8 f, V s % t- S: X; q8 a+ ~. Q& Q
modelActions = new ActionGroupImpl (getZone ());8 y, y# i1 l/ _0 W& I6 C8 x3 y
3 m. W: x1 @. Y" |# m: J
try {
" U4 w2 V: ~- a) z6 l& v, y) Z modelActions.createActionTo$message" E+ e& C$ @1 E9 D
(heat, new Selector (heat.getClass (), "stepRule", false));' m q. X8 [" `
} catch (Exception e) {5 X; `9 v$ L" C6 ~- Q
System.err.println ("Exception stepRule: " + e.getMessage ());9 @- k- \( I# f
}- K2 l0 r' u& e$ Y
- v% q0 o! Y, y$ E try {+ b0 f, {* F/ `1 f, e- M2 B
Heatbug proto = (Heatbug) heatbugList.get (0);
! @: C9 {# C7 s Selector sel = 0 T, G. w9 V0 @& ]+ l
new Selector (proto.getClass (), "heatbugStep", false);
; X6 {" G5 f3 n, e* ]* i actionForEach =
4 m% ^# s( x0 r modelActions.createFActionForEachHomogeneous$call) y$ Y) A0 s9 Q3 J* ?8 O% |
(heatbugList,
% y7 Q8 i" I8 h0 ]' V! K9 n new FCallImpl (this, proto, sel,- J# ?' I1 [4 u8 u% [
new FArgumentsImpl (this, sel)));$ A! a# k, `8 U, w
} catch (Exception e) {6 @% F6 C; D% Q7 O
e.printStackTrace (System.err);
3 c3 B: D. N3 ]$ }" V }
- ?- L% Q+ a" y3 p( M
7 v4 J6 e" v% S! u! j5 N9 d syncUpdateOrder ();9 `5 B- ^, @9 q' N5 H& R
: ]# d' m* W t% c( Z7 a; }2 s try {. P9 S5 z2 m6 _+ d
modelActions.createActionTo$message
I5 e, e# |1 J: ?# p (heat, new Selector (heat.getClass (), "updateLattice", false));! U7 R. G( h4 A1 F) x" [
} catch (Exception e) {3 `* \) m- Q" @, I( k. H
System.err.println("Exception updateLattice: " + e.getMessage ());
( E& @1 H- | c( @/ q. g }* e# y/ m$ Q( s8 n2 h
" y& O. x6 b0 O' s) J
// Then we create a schedule that executes the% H6 u8 I) @$ }( f$ w9 H
// modelActions. modelActions is an ActionGroup, by itself it# H( \4 ?6 k+ f+ L7 M5 d0 B9 ?* i
// has no notion of time. In order to have it executed in- V( i$ |2 v/ @1 c T
// time, we create a Schedule that says to use the
' B7 Z0 J3 b; |4 T" w& Y // modelActions ActionGroup at particular times. This
$ s* f7 E, p$ s- w2 `) j // schedule has a repeat interval of 1, it will loop every
5 ^- D \3 K) ~: K/ ?# I& e$ d! h // time step. The action is executed at time 0 relative to" v! v B6 w1 u: G0 Y: A
// the beginning of the loop.* V* s* L6 y. D7 } t/ s9 p7 l
" j% G& {+ Y4 b | // This is a simple schedule, with only one action that is
# a6 K& `' b$ B6 k& w5 n // just repeated every time. See jmousetrap for more* {' ~! V) g& G; j- v3 J
// complicated schedules.
8 s2 H) y; d9 q 8 p$ F: o, i. ?: z1 |+ j7 ?
modelSchedule = new ScheduleImpl (getZone (), 1);
3 D4 s! o1 Q4 }+ [ modelSchedule.at$createAction (0, modelActions);8 e3 e3 s) p) s- p. J4 h
( I5 ]' T; {7 `* S. _
return this;5 L( k( ]" e# h, \8 J& Z( t/ @
} |