HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
" f% `/ Y9 W, A. K
$ L( |; u/ S2 g8 f: ] public Object buildActions () {
* m! f- }0 S. e/ @( z+ Y super.buildActions();
2 i% x/ g2 B) T. d6 b% j @
) u. L6 r4 O' C // Create the list of simulation actions. We put these in+ u `& G* P) a( b2 y" V: D4 P
// an action group, because we want these actions to be
' U$ m' R" y# {0 Q/ I- x0 z$ } // executed in a specific order, but these steps should* Y( E* {% {6 W0 R5 n7 n
// take no (simulated) time. The M(foo) means "The message
9 y# F" p/ r) [' |6 o& L // called <foo>". You can send a message To a particular
# N7 m% X5 ~% `" g& ^ // object, or ForEach object in a collection.$ s% _) ?; ]3 ^6 q; x( J
/ f; k9 y; o( l3 ]* }* H2 t // Note we update the heatspace in two phases: first run
b0 E( v" q% S4 p! t // diffusion, then run "updateWorld" to actually enact the
, g+ e' _& x E9 G1 S$ \ // changes the heatbugs have made. The ordering here is6 D' K h# [9 q
// significant!* b" z+ |- f6 z p
/ ^5 U) E. |' N% h4 Z: d // Note also, that with the additional
# O q* ]: ]. R& ~2 j // `randomizeHeatbugUpdateOrder' Boolean flag we can, ` Q- W2 S" V6 g: |
// randomize the order in which the bugs actually run1 _0 k1 W2 P& _8 {
// their step rule. This has the effect of removing any5 a- _* v' ^3 ^
// systematic bias in the iteration throught the heatbug- R. {" X- h. H/ c' {
// list from timestep to timestep
. V$ q/ E4 h! I8 E e$ b
$ V) n4 P8 p' I: G // By default, all `createActionForEach' modelActions have# B6 t8 @; k9 L& z$ v
// a default order of `Sequential', which means that the: n9 A! V- d! Z. ]8 e" J7 m
// order of iteration through the `heatbugList' will be
& G3 S u0 [2 W' d$ D0 w t A. \+ M // identical (assuming the list order is not changed+ J7 G( h8 {, }3 U
// indirectly by some other process).6 n- D7 g0 E& k3 w2 @5 O8 j
6 y5 d5 v. X. w2 [4 { modelActions = new ActionGroupImpl (getZone ());
8 G& M X" W3 b. A! q# W: P1 D4 k( o+ [3 d5 p2 `2 D
try {( y/ _+ A; o/ G) Q
modelActions.createActionTo$message3 V4 g% @8 r9 y
(heat, new Selector (heat.getClass (), "stepRule", false));5 T! N, O! u2 a! d; u3 J
} catch (Exception e) {3 h7 r. O: p) L: P5 Z
System.err.println ("Exception stepRule: " + e.getMessage ());
1 O3 s: n$ R9 ?: ~1 b }
6 g1 m: A K. w! {& G& A& \4 }
5 T* E# H: z2 O3 [) o$ w5 I try {! v6 k* W$ D* t) B5 R3 n/ G
Heatbug proto = (Heatbug) heatbugList.get (0);
9 t! z5 T4 V: p: }1 [+ I d- l Selector sel = % @0 R7 k M/ Y5 y9 m/ U N
new Selector (proto.getClass (), "heatbugStep", false); i5 Q- u% K! U2 q$ q" u6 C. e
actionForEach =7 Y# e# E1 T( t, n S; t
modelActions.createFActionForEachHomogeneous$call ~" h. r% |( a/ q, j
(heatbugList,& e0 r) w: |' t
new FCallImpl (this, proto, sel,) l c, Z' ~& y' w" |' D! F2 Z
new FArgumentsImpl (this, sel)));4 M' I/ N z' J7 l9 S( y% e9 D
} catch (Exception e) {& b) B( q" d4 ^* o* [8 F! a% i1 s" a
e.printStackTrace (System.err);- Z0 }+ A& X& Z+ C
}1 F' P: [7 e" U+ s8 D" v
* F% b! c! {) }" J syncUpdateOrder ();
1 p9 a) }/ S( y0 b+ ^" L, q% a, O% L0 ^9 K5 Q! O E9 z, P! J8 m
try {
9 h4 m2 ?- I, E. b e6 [% M modelActions.createActionTo$message ) E5 c# P5 O, T
(heat, new Selector (heat.getClass (), "updateLattice", false));
& k5 f7 g+ z. A4 Y } catch (Exception e) {9 P5 d+ M/ A) h2 p% a/ |
System.err.println("Exception updateLattice: " + e.getMessage ());
, x4 Q" N9 s6 Z% k$ ^. b0 F4 W }
: g: a% m4 N; [( s' Q6 h) j% T & b; l2 Y; Y% c+ Z& u6 P
// Then we create a schedule that executes the9 r+ U& Y2 c( ]" O& M9 M8 M
// modelActions. modelActions is an ActionGroup, by itself it
! C m, {: N. U( u/ ^1 t // has no notion of time. In order to have it executed in
. h% P4 U3 P1 z% U p: Z // time, we create a Schedule that says to use the
" [/ l* g p7 `- L0 h, }, @ // modelActions ActionGroup at particular times. This
! y$ [) D5 _3 S8 v( u* w0 R // schedule has a repeat interval of 1, it will loop every9 Q1 f4 \' K: ?. U2 P
// time step. The action is executed at time 0 relative to
' s# \( s# ~7 N# b: r2 j. Q // the beginning of the loop.& u) j3 K X. @- t
- I5 `/ p5 A3 r8 o
// This is a simple schedule, with only one action that is
2 Z+ c: q4 e2 s6 G7 m // just repeated every time. See jmousetrap for more7 X# @: x) P) k) M
// complicated schedules.# B' d i; h1 p/ G" @
& U! ]/ L4 T' a* G: j/ h# \! \ J
modelSchedule = new ScheduleImpl (getZone (), 1);
/ C( g! @" ^) |2 ~; @ modelSchedule.at$createAction (0, modelActions);
5 f6 ^8 L$ T; |& o9 q 4 R2 `, J5 g) f: ~
return this;3 H O" }$ p1 T& e5 A9 S/ }
} |