HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, K* z* q! f2 `) `" y) j X+ ]
8 R: R6 t3 G8 c* N: {
public Object buildActions () {+ o5 y; r- A) I5 Z9 j
super.buildActions();
2 ^% o* l: B' ?
& a. T, e$ B" l0 g" n // Create the list of simulation actions. We put these in- Z$ U* z' I3 F# z" ` F
// an action group, because we want these actions to be2 C/ h& j) ?' s) e" C3 k4 X! K
// executed in a specific order, but these steps should
! m$ x! B6 v f# r) X y2 O // take no (simulated) time. The M(foo) means "The message; s: p0 H. \1 P: Q4 C/ t0 Z
// called <foo>". You can send a message To a particular
" |! j" b1 b' S/ \! t // object, or ForEach object in a collection.
$ C$ q/ C; y3 a" ]) w' e* T& Q / Q, w8 k8 w" u m% k6 Q3 E
// Note we update the heatspace in two phases: first run8 j! w9 y9 u" F& T) n! R
// diffusion, then run "updateWorld" to actually enact the
' V7 D7 o) Q8 |; O7 M; Y // changes the heatbugs have made. The ordering here is/ N7 P* Z7 }. z
// significant!
1 D" |) r" Q" c3 U5 r: n8 t
7 @2 H" X* t+ d! g5 t) o$ Q // Note also, that with the additional
# u4 h( z" Q" o$ {! g" o9 A/ T: z // `randomizeHeatbugUpdateOrder' Boolean flag we can$ G. `+ L4 z# X% y
// randomize the order in which the bugs actually run
: ]- }$ r: j2 Q! n4 r& P8 Z& x // their step rule. This has the effect of removing any
, f5 e( q' R; x% C1 W. W0 H% c7 r // systematic bias in the iteration throught the heatbug
( G' ]( `" Q- S) ]1 F+ z. H // list from timestep to timestep
. ] E& ]( A# s : K( z9 d% e4 b, {* Y: w( w6 T0 w
// By default, all `createActionForEach' modelActions have
( y$ f0 [' _1 O' N // a default order of `Sequential', which means that the
A! H) N3 P& B! | // order of iteration through the `heatbugList' will be e( r4 @ S8 w6 D1 }
// identical (assuming the list order is not changed
4 a# A! V6 y! x: y( _" X // indirectly by some other process).
% o6 o& M, @/ D3 W C, }
9 N9 }! w. w: G& H; N: [ m modelActions = new ActionGroupImpl (getZone ());" W: r ~! J, d5 t
! g* t. |' B( o4 b
try {2 K& j" ]% B5 g! u9 k
modelActions.createActionTo$message
: i- L1 L* w5 l% v$ p/ x& w (heat, new Selector (heat.getClass (), "stepRule", false));
6 ~/ r- a7 [& E& N } catch (Exception e) {. ~% @. u% u$ v. h( I) S
System.err.println ("Exception stepRule: " + e.getMessage ());
" I' q1 ]$ Y* |3 } }
5 h1 n3 j9 Z7 L9 v, g! ^7 A" E/ r/ N- B. t
try {5 {6 R' N5 R' {+ S D
Heatbug proto = (Heatbug) heatbugList.get (0);
4 e7 ?2 I' p/ x9 M& P- ? Selector sel = 8 ?0 k$ A5 L) ]' P% L' x( C
new Selector (proto.getClass (), "heatbugStep", false);7 J( |6 L' h* n% q
actionForEach =
) j Q+ w1 c6 e8 c P2 u modelActions.createFActionForEachHomogeneous$call
* L! ~$ y9 y1 Q' K) }! {4 [ (heatbugList,/ M' A7 b/ n0 \" I: f0 E
new FCallImpl (this, proto, sel,% i( l& ^& _2 D6 B# a3 D, ?" M4 ~& w
new FArgumentsImpl (this, sel)));8 E7 b+ h- w3 d' F
} catch (Exception e) {
) `! K+ Y; ~' N8 E' N# r e.printStackTrace (System.err);
8 ^4 t$ J+ }- _0 t5 ?+ p: x }
4 Z, T8 p5 F. Z5 o1 c0 R1 z* b - N8 f+ N! ^' Z' H8 Y; A' r g
syncUpdateOrder ();
7 B$ x. r4 @7 u. `0 J |. g, A" a* D- g9 _' ? V; C
try {
- x( R5 e( ^5 i7 K+ j7 C7 f! U modelActions.createActionTo$message
( C5 p6 G" i. X (heat, new Selector (heat.getClass (), "updateLattice", false));
! V& K1 b" `# H7 T* |* l+ q1 r } catch (Exception e) {+ d' r* e2 G$ K( _; S# m
System.err.println("Exception updateLattice: " + e.getMessage ());9 p, s* T/ d$ m! i. U7 \$ [
}- }9 O7 a3 m, ]( V6 y8 n5 G
( _9 @/ \0 U/ `6 y: N
// Then we create a schedule that executes the7 L( y/ P0 A; g" t8 X; s V3 j/ _ W
// modelActions. modelActions is an ActionGroup, by itself it
2 s! Z' q2 ?5 d // has no notion of time. In order to have it executed in
0 n9 p! {7 _" @0 f1 m5 q // time, we create a Schedule that says to use the
: L0 I ?) L% P- J! m4 t // modelActions ActionGroup at particular times. This
, K) d+ C- U# W2 ~9 g) e2 l // schedule has a repeat interval of 1, it will loop every& ~% x2 j* c! c2 v9 g& F
// time step. The action is executed at time 0 relative to
4 f: X, L& C- D2 c; G- ^& ] // the beginning of the loop.8 H. I$ a6 E' |# e$ P7 U9 F
& T% n0 m) C3 X O" m& b1 s // This is a simple schedule, with only one action that is. |/ {7 @$ M' w, m, m5 _1 _6 N/ N
// just repeated every time. See jmousetrap for more- M1 }! M- {' M V- g( a3 ^
// complicated schedules.
1 [4 r0 n& u3 G$ w. }9 | ! [! Y0 K# _" ?3 @$ R6 I% G: k
modelSchedule = new ScheduleImpl (getZone (), 1);
' o, y+ {, ~& w6 j modelSchedule.at$createAction (0, modelActions);' c" `+ `& R/ I+ t1 U
1 a3 q) y' O6 l H7 T1 b
return this;
8 I1 j, o/ H# l. h } |