HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% ~7 H3 [: ^2 b' c( S0 @% y5 [9 x( J
9 @' C; d; j- h- d% Y" R% T
public Object buildActions () {
" V& p# a" @7 }, O3 E7 \ ]6 T super.buildActions();
( F) W; v* {# Q, M0 K N. r- f 7 @ d Y8 t5 {4 C' ?
// Create the list of simulation actions. We put these in
" L) i% w. O1 d( ?: E // an action group, because we want these actions to be. ?4 P, r2 L7 [- l; ~
// executed in a specific order, but these steps should
3 j1 ] U) q5 f4 F1 a8 | i9 E // take no (simulated) time. The M(foo) means "The message: J$ J# \* Z& w( P* |* q6 w
// called <foo>". You can send a message To a particular
. C* _5 u+ k+ Z2 O3 p; N' c // object, or ForEach object in a collection.$ ` q, y% i; x/ j8 E1 U( y5 L- ]
! Q( T% U; l8 K2 y* a! g // Note we update the heatspace in two phases: first run& X& n% I: U: W# \3 t- l, k; A
// diffusion, then run "updateWorld" to actually enact the
1 E4 i& p" ^ S: V2 f // changes the heatbugs have made. The ordering here is
( F9 r: U4 H# G+ l; B5 w& j // significant!+ @% D( \" i9 s8 Z5 Z: `1 L
, `+ i7 p5 S& @# d" J. k // Note also, that with the additional1 \/ l- z$ n& F: h4 h- e* A M3 v
// `randomizeHeatbugUpdateOrder' Boolean flag we can; E, `6 M5 y. q; B. Z4 N- Z
// randomize the order in which the bugs actually run
- D) r( a* F* p! q% M! g // their step rule. This has the effect of removing any% B1 p2 N/ V# V H, R
// systematic bias in the iteration throught the heatbug
9 _) N& s! v/ P // list from timestep to timestep
' v" _2 E' a, {- v$ O9 ]( g' [ : [4 W5 F) g5 x
// By default, all `createActionForEach' modelActions have
$ t- F! G1 d: b0 W // a default order of `Sequential', which means that the
' K( ?, q @. C* @- s // order of iteration through the `heatbugList' will be
) m8 N) }$ y, X! S // identical (assuming the list order is not changed
1 r% U1 x, @+ K. H+ q' g# U! o // indirectly by some other process).
9 A8 I: I* f+ H h6 n7 h) B
9 _5 o7 K, x# N9 w/ j modelActions = new ActionGroupImpl (getZone ());) T7 R. @4 F* {9 G; I
4 D0 B0 B/ g7 Z( q$ ?
try {* ~! X# P, I y/ i. f+ |. X
modelActions.createActionTo$message
3 F2 |9 O, ]7 ]" E (heat, new Selector (heat.getClass (), "stepRule", false));; C6 t+ ^, b d4 {& I
} catch (Exception e) {
, L2 a; `8 h+ j' B( h, ] System.err.println ("Exception stepRule: " + e.getMessage ());2 K) O% X; n' J# r' ]5 w3 Q6 [
}
( U q: P3 o3 y3 i7 }4 b% H+ ]4 R; A- }* b3 a# z4 j6 |9 e
try {0 k) {, Q# {1 |/ R
Heatbug proto = (Heatbug) heatbugList.get (0);
9 t* C; n% D. p0 j; S' D Selector sel = & Z/ A, v7 V4 k9 H' T6 ?% T1 ]
new Selector (proto.getClass (), "heatbugStep", false);$ Z( Q. G# H! t4 O: u
actionForEach =1 t8 o s) `) u5 T3 q
modelActions.createFActionForEachHomogeneous$call
) z2 Z% Q; P: \3 I (heatbugList,5 X) ?( X# r y& g; v, |, i) A
new FCallImpl (this, proto, sel,
H5 ~- I- m( p1 ^: G new FArgumentsImpl (this, sel)));
; N3 T' R) G$ W } catch (Exception e) {
) Q' S7 H$ [5 `$ @ e.printStackTrace (System.err);, J7 i. I( T" N) t8 D; d6 l4 b
} Z. d' U% l3 v, ]
0 D9 k$ D2 z( w3 m syncUpdateOrder ();
+ b# X$ H% F" Z& ]( z+ X' v5 T5 [) `8 }+ p; G
try {! `6 f* I' z0 W0 B D
modelActions.createActionTo$message
. c6 i1 j: x$ P2 U- k (heat, new Selector (heat.getClass (), "updateLattice", false));4 d n: u0 a; f
} catch (Exception e) {
: K2 M2 k1 X; F7 {# W7 D7 l. E System.err.println("Exception updateLattice: " + e.getMessage ());
- I, R3 h! g3 x( U: O$ n }
$ p# n! W1 C& ?4 ]: R: V3 Y # L4 ^4 n+ ?) B
// Then we create a schedule that executes the, s% n- i3 L' B
// modelActions. modelActions is an ActionGroup, by itself it
2 D4 c! s3 \ h- e2 H // has no notion of time. In order to have it executed in3 R% |% z. h# @$ E; c z k
// time, we create a Schedule that says to use the
7 j8 C! u" |3 D( d // modelActions ActionGroup at particular times. This. j% e+ ]- A$ K3 S a
// schedule has a repeat interval of 1, it will loop every
) p6 z0 N: p9 ^- M/ d! W% |: h // time step. The action is executed at time 0 relative to
, o: z+ m, L. o' V# @ // the beginning of the loop.- B J; F. k, e, d# I p4 U+ [
) J4 H: C% b1 v, h: K // This is a simple schedule, with only one action that is
t& Z& ?7 R- r) W; f1 n) z // just repeated every time. See jmousetrap for more$ q! i- _, L# m- R4 c+ z( W1 @
// complicated schedules.6 @* c5 A* b: r
' }; x$ u( f/ B5 p) V* B( g modelSchedule = new ScheduleImpl (getZone (), 1);
) W- L: k5 k) b5 Z! |, I modelSchedule.at$createAction (0, modelActions);" h. i' a6 A6 j6 Z' X
/ z- e8 {% w. w6 ] n# B return this;2 u o! e- q' v3 M) q
} |