HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% }8 v1 C) X3 ^, m) C
' L6 \: n1 \' {$ c* ^3 d8 g; S
public Object buildActions () {
/ X5 R3 t- u, d9 A5 H+ }% ^ super.buildActions();
5 `% [. Q5 F- @' P& [ H 5 c/ D3 d# N' t h8 S
// Create the list of simulation actions. We put these in
. I4 z; a2 _0 w // an action group, because we want these actions to be
5 B( d/ y4 R/ c. P* W* K- i! B // executed in a specific order, but these steps should$ E5 t; z. f! c0 y4 B
// take no (simulated) time. The M(foo) means "The message
1 b/ p) g4 s- a' _. B! s // called <foo>". You can send a message To a particular' j. T* d7 p i4 W; ~9 Q& j
// object, or ForEach object in a collection.
# d4 v( Y% y, T
+ x/ j: r5 N. z" ~ // Note we update the heatspace in two phases: first run
6 U* C9 A0 r" ]5 |8 k- d) x2 ^! ~ // diffusion, then run "updateWorld" to actually enact the" L8 ]) w- k6 r
// changes the heatbugs have made. The ordering here is6 w) e' L/ z9 ~3 E4 ]
// significant!
" j1 R1 V; m1 v 6 @# U, I# J( s# J3 I8 s
// Note also, that with the additional" f. v; G* }! R1 A! R
// `randomizeHeatbugUpdateOrder' Boolean flag we can) u* Y7 }3 }' P" g. g$ M
// randomize the order in which the bugs actually run
; t4 j% \$ j f4 g // their step rule. This has the effect of removing any' E& `. x- E, d; J% r3 J% T
// systematic bias in the iteration throught the heatbug1 u1 {$ H Y5 x# S8 [* V, J8 q, R8 R
// list from timestep to timestep
: g: B- i5 d# a' D5 r ; M1 ^# z" F; r( o/ Q5 D- G" W% U
// By default, all `createActionForEach' modelActions have
# c: t6 m, N7 e // a default order of `Sequential', which means that the1 I* }$ Y! c# ?+ s
// order of iteration through the `heatbugList' will be" }5 `( t' b, c6 N- B& r9 O- h
// identical (assuming the list order is not changed
: L3 ?# Z4 T2 u6 @) x3 } // indirectly by some other process).
' c& G& b+ y. I& z# ?; i8 S 4 x6 X+ d/ E! O
modelActions = new ActionGroupImpl (getZone ());& |' `5 b# c t9 |$ ~ w, s; Z
; a) ~: b" D# q/ \' t try {
0 f" v! V5 y" p5 z1 | modelActions.createActionTo$message
, `: }, {+ _4 f& f (heat, new Selector (heat.getClass (), "stepRule", false));, _; Z- V* U- R" F' j- Z' W3 F( B
} catch (Exception e) {
& `+ |6 c3 i* `6 a; w System.err.println ("Exception stepRule: " + e.getMessage ());$ }: F3 m; B4 x8 b7 g5 N
}
$ B! L/ n7 b, l4 k4 c/ _% a# X
: K( c: Q) I: B8 w4 f5 k9 m try { g; f; x: G U. n$ h. j
Heatbug proto = (Heatbug) heatbugList.get (0);: [. J+ _/ B8 D+ ?# T& G
Selector sel =
0 ?! t2 s* a" l7 u: u new Selector (proto.getClass (), "heatbugStep", false);9 i+ f( H# C1 q( o
actionForEach =
0 E; X8 U4 k. ?8 V modelActions.createFActionForEachHomogeneous$call6 n3 S$ s M+ r) n
(heatbugList,
* Y3 |; v/ T/ `) D/ ~ new FCallImpl (this, proto, sel,
7 C L% D2 E9 _ l& s' h new FArgumentsImpl (this, sel)));+ ?- z: M) c6 x% {
} catch (Exception e) {
a; e7 Q0 y6 F* v% Y8 K e.printStackTrace (System.err);
8 J6 s- ?4 s) Q6 D$ M3 G0 h7 S }
% ~$ N4 L- p% o3 r7 c# a4 B
/ R. z, b8 e2 M" t/ O8 p syncUpdateOrder ();( g2 [. r: i7 R! h7 l; i
$ P" S- [% w9 K# x; @& u0 V& S
try {7 |& [( `' f, }! M2 [
modelActions.createActionTo$message
7 C# S. t1 F; {; t' X5 Q) u. P (heat, new Selector (heat.getClass (), "updateLattice", false));
: n5 e0 {4 V0 R j2 t7 Y% s } catch (Exception e) {
4 a) q. @0 }# L System.err.println("Exception updateLattice: " + e.getMessage ());' x8 U' ^7 q) o+ n, l
}% u* x& z3 q, S8 j" ^- D E
1 S' z2 v0 C% g. E0 K/ h; q/ q // Then we create a schedule that executes the
. f! z$ M: x7 m/ S // modelActions. modelActions is an ActionGroup, by itself it
3 a5 [( G9 x% V0 v/ n // has no notion of time. In order to have it executed in- ?5 _+ ]+ t) k' [2 L) F( Z
// time, we create a Schedule that says to use the
" z; ^' `$ N7 ]- P' m. ? W // modelActions ActionGroup at particular times. This3 b% J1 i. A1 f3 @9 T1 M% U
// schedule has a repeat interval of 1, it will loop every* w( n9 x0 ?) Q% [1 Q3 U! Q+ ^$ j
// time step. The action is executed at time 0 relative to
' C$ F* o! ?7 h3 O7 y // the beginning of the loop.
$ k+ G- u- i( H. S: w) A) h e+ B' T$ F2 f9 H8 }
// This is a simple schedule, with only one action that is: ~/ q+ ~7 o+ f9 \
// just repeated every time. See jmousetrap for more
! P) G. s! h j$ h6 M5 ^+ M2 W9 v // complicated schedules.
^, D, @+ o$ j! q# k7 R0 Z8 z
/ ^# Z7 H ?/ F4 S, b modelSchedule = new ScheduleImpl (getZone (), 1);& `+ P* B8 z/ Q& f* j8 O* x
modelSchedule.at$createAction (0, modelActions);6 E% u l+ T2 b J, d9 _4 T0 `
1 D, w3 ?/ I2 t9 M- Z
return this;& X; Y% A+ B: `9 L. |
} |