HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
& e2 h9 ~; t& x* P
! p8 T' B: ^5 T w2 O9 Q public Object buildActions () {3 p8 i% v! m+ a l' k
super.buildActions();* @5 A; m- S6 f. R: `
% L/ I9 ^& X" u1 D
// Create the list of simulation actions. We put these in. a9 ^/ H' L) d* S. Q* L" Q
// an action group, because we want these actions to be
# w# ^! L% H# [% L // executed in a specific order, but these steps should
/ O% H5 }% N _: O/ Q; t5 p# } // take no (simulated) time. The M(foo) means "The message
* I( ?: U' T) n* e // called <foo>". You can send a message To a particular
) t7 |8 W1 H: r, q // object, or ForEach object in a collection.
4 N$ P- T L2 A# A+ t
; |; k( g# h% B% ^# U2 i // Note we update the heatspace in two phases: first run
, i" V% Q7 \0 P3 \ // diffusion, then run "updateWorld" to actually enact the, m j! h3 r1 V, U% k, ~( ?
// changes the heatbugs have made. The ordering here is
- Q1 I: |; F/ s* ]9 ]4 Y // significant!: L% z" c$ d+ v6 h: k' ~0 n
8 i. p8 O9 c) p# x% K A // Note also, that with the additional
$ u6 Q& y" J2 c1 F // `randomizeHeatbugUpdateOrder' Boolean flag we can
$ ~4 M6 I. V3 R3 | // randomize the order in which the bugs actually run$ b: w8 }2 x+ `( G" Q6 Y3 L
// their step rule. This has the effect of removing any/ j$ S; f& f" _0 m$ v( B
// systematic bias in the iteration throught the heatbug' ]& ] i2 Z& x* p2 R) j
// list from timestep to timestep: ]4 y8 b: x+ E+ Y* i
; x5 k& o6 d$ m% G& B% j
// By default, all `createActionForEach' modelActions have: G2 a: {& F2 b- S! a6 c
// a default order of `Sequential', which means that the
* f9 F4 W+ E6 g" i8 e // order of iteration through the `heatbugList' will be- w, w" `* T$ \2 H6 H }( ~
// identical (assuming the list order is not changed0 ]8 O* \) z2 x% _& v4 R
// indirectly by some other process).2 f: x1 A( F T0 Y. n9 o! {
' U8 T2 P& c2 Y4 w) B) H
modelActions = new ActionGroupImpl (getZone ());
" @% w% h+ k- P; s. W1 C% c2 ~0 J/ S8 }
try {1 q+ K6 D1 O W! t
modelActions.createActionTo$message
* X2 V& N: ~! i (heat, new Selector (heat.getClass (), "stepRule", false));
/ Q" x5 H( O2 H. A } catch (Exception e) {
* x' Z: N" J% B+ ?3 g) E4 t& r# q" i System.err.println ("Exception stepRule: " + e.getMessage ());
, I; V, c7 f; I }
+ K# z9 l6 Z- v
: V: u! v0 Y$ r- w8 f5 j9 A try {
0 t7 o1 }, g% f$ M Heatbug proto = (Heatbug) heatbugList.get (0);
* I2 m1 H+ y8 _* O7 W Selector sel =
& q. x Z$ T, f; G. b new Selector (proto.getClass (), "heatbugStep", false);5 v. Z8 \5 _: m' S
actionForEach =* h H( M7 {$ A5 W. r U4 N e# J
modelActions.createFActionForEachHomogeneous$call
! l. C9 H. p, d* L7 w (heatbugList,
) g- [# n, ~9 s' O; u new FCallImpl (this, proto, sel,( D. ?% E7 U3 R
new FArgumentsImpl (this, sel)));* e! J A& y/ Z; E0 N5 o
} catch (Exception e) {2 R$ Y' h6 R; V( L
e.printStackTrace (System.err);
0 N5 K- b0 W: b( s6 o# X, N- h }
& q+ [- m: L0 J- b7 i
* y, Q2 n) D# E4 C O syncUpdateOrder ();. z7 @3 [) E% Z, M
+ e$ M/ Q+ u# B* s1 H3 o& e try {1 _0 @# C% `/ e
modelActions.createActionTo$message
# J8 u" f4 v; J3 k+ w. a (heat, new Selector (heat.getClass (), "updateLattice", false));
* y9 ` Q# g7 J7 y& a; z6 A5 a) D } catch (Exception e) {
! Y1 a' G: D( X, d System.err.println("Exception updateLattice: " + e.getMessage ());4 o. \0 Y$ z. }5 s; D* }
}
. Y' Q5 I/ M: ]5 y; x/ [4 y! D ) I: _& q* G, E- S" s6 {
// Then we create a schedule that executes the* m' S/ O# q/ L; d! ^% N6 V
// modelActions. modelActions is an ActionGroup, by itself it7 h1 X+ Y. m& I
// has no notion of time. In order to have it executed in2 O% v( x1 c5 v Z& F k' @/ b
// time, we create a Schedule that says to use the
8 A$ j1 j/ ?; q& F' m4 `; R7 i$ M // modelActions ActionGroup at particular times. This
3 I6 ~ {- a) V0 A! h // schedule has a repeat interval of 1, it will loop every- j8 j8 F* r. a* S5 D( b: {
// time step. The action is executed at time 0 relative to$ t/ ]& R& q$ I: U
// the beginning of the loop.
; M7 y8 j4 S: k9 X; S: m5 H" z1 \6 k6 r8 T; `
// This is a simple schedule, with only one action that is
2 d& V) Y/ c/ q: { // just repeated every time. See jmousetrap for more6 Q" M9 _9 q8 I
// complicated schedules.
9 ~8 g) X% R8 s
- W/ m4 ^$ s( [: J+ d modelSchedule = new ScheduleImpl (getZone (), 1);* J) w, H4 U( @
modelSchedule.at$createAction (0, modelActions);
+ U6 }5 M9 u, \3 B& ? 5 H* U, k$ |( D4 k: H$ Z; |
return this;
2 i9 q1 K3 N- ~$ L0 X2 Z6 b: Z } |