HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 N, X3 u( ^) E; k3 y6 d, D' u
3 X" w% z$ \" [* {' `. m( Z/ f public Object buildActions () {6 [4 Y3 V3 R& M% y, ~/ i
super.buildActions();. J( X* z+ E( G4 W0 |
) f: ~! f# j9 a2 @8 @ // Create the list of simulation actions. We put these in0 y1 b4 j7 r" ]+ H b* R- n9 o
// an action group, because we want these actions to be1 c- F# F' `6 v |0 C
// executed in a specific order, but these steps should
! u U6 l6 g* D2 {6 i+ R k- C: _ // take no (simulated) time. The M(foo) means "The message- ]) }& R3 W8 H
// called <foo>". You can send a message To a particular: D/ F$ G( _# @" g5 W+ W
// object, or ForEach object in a collection.
* h5 L% O$ w1 K+ x
3 b; j7 U6 [! C7 G# W* K // Note we update the heatspace in two phases: first run* e' J8 |( L( b4 x
// diffusion, then run "updateWorld" to actually enact the- K8 @% b, k2 T! V. Q
// changes the heatbugs have made. The ordering here is
3 u5 Y1 L/ L, }" l, Y, W // significant!
" r+ `+ {/ g! o/ u/ w$ g
Q1 a3 Q3 {. P- w" o // Note also, that with the additional4 l5 g# ?1 d. Y- z! i# y. w( E6 L8 J
// `randomizeHeatbugUpdateOrder' Boolean flag we can
2 m7 D A" o. D4 z) V$ u // randomize the order in which the bugs actually run( S0 G8 l. Z, [+ R* g8 K! {" l
// their step rule. This has the effect of removing any$ I& V& F3 o0 W* M3 {' |( A
// systematic bias in the iteration throught the heatbug
: q) ~. D9 M1 p5 q // list from timestep to timestep
; m" X8 S. C5 i7 N ) L$ V0 H4 M: v0 K( F* X
// By default, all `createActionForEach' modelActions have( O, @4 V5 T) t% Y4 d" M, m
// a default order of `Sequential', which means that the
! |6 S/ j# C, ^' Q // order of iteration through the `heatbugList' will be
4 L6 r! Z h# j- y) e' l6 g // identical (assuming the list order is not changed9 N* P. U! K2 v' t& D" H3 ]3 K& ?
// indirectly by some other process).5 }, e/ @* y, t! ]: n$ Y
9 t* Y8 c! h/ S+ {" h+ a modelActions = new ActionGroupImpl (getZone ());
# D; N' \8 ?0 \. C& D& |; B. n; L' {& Z' T, X
try {& E# d# S1 B% w1 M1 T) _
modelActions.createActionTo$message
' U$ N3 Y* [( S/ G0 `6 j (heat, new Selector (heat.getClass (), "stepRule", false));: g- T8 J6 t& E" V, |8 J
} catch (Exception e) {- ^ k& h, g! v y% d
System.err.println ("Exception stepRule: " + e.getMessage ());! q5 I1 i& y2 ~% h c' Y4 b' @! s
}# f# u1 f! n9 a) d I
; J( {1 M( a, n& N
try {
9 b7 f" R7 h# R: ]: r. ^ Heatbug proto = (Heatbug) heatbugList.get (0);$ g) E o8 C) ]) c* t
Selector sel = 3 I3 d. T/ Y8 N4 P* B
new Selector (proto.getClass (), "heatbugStep", false);
* A& i# D9 H {4 \ actionForEach = Z t) F1 y5 }2 G
modelActions.createFActionForEachHomogeneous$call
2 C- c/ i. x4 i1 j (heatbugList,- p- V. `( I- k/ I+ B( a; a
new FCallImpl (this, proto, sel," y- [; h- H' F J& a$ K4 z0 c. q
new FArgumentsImpl (this, sel)));
9 X. ~( q# o7 ] ^) M } catch (Exception e) {+ x3 m# R- n4 [- o
e.printStackTrace (System.err);; s4 b# f1 H) C5 p+ k ^6 @
}+ m! ~& o; | A4 B- c& s
# i/ |1 J3 _: x. Y syncUpdateOrder ();
5 F- } v. z6 R j$ A& {6 K
$ o) V/ @; Z* U7 q* } try {$ j! O" `6 G8 W) k* a, Q8 G% F
modelActions.createActionTo$message : l" u5 i- M, v0 I( D* p" l
(heat, new Selector (heat.getClass (), "updateLattice", false));3 Q; a/ V. x/ a6 u4 H) H
} catch (Exception e) {
+ r6 a4 }# @: ?$ u3 \( G' A# T8 f/ E System.err.println("Exception updateLattice: " + e.getMessage ());
" Q, V: T1 v! b, ~" ` k }
+ W( i3 F" _* B5 z/ A, T- ~8 f
5 S% {! }/ v5 K; a7 S2 Y // Then we create a schedule that executes the
8 Y8 V( D. g2 Q // modelActions. modelActions is an ActionGroup, by itself it' X( B) \5 O) }; ]7 A- |% `
// has no notion of time. In order to have it executed in. c4 X) y2 V3 }4 }- P8 Q( K
// time, we create a Schedule that says to use the3 @$ S. t# l9 P" ?
// modelActions ActionGroup at particular times. This
7 U9 `1 A2 C3 g; b N // schedule has a repeat interval of 1, it will loop every
, z z Q5 n6 h) k6 P" \ // time step. The action is executed at time 0 relative to6 ]5 {1 k) p" H$ E. c! v, A/ u8 z
// the beginning of the loop.+ e8 q9 Y+ A0 x3 I( Y
' K4 w- w# J$ a, z( f$ \) h // This is a simple schedule, with only one action that is
+ S: p& C5 Y2 M& ~1 o3 D6 ]9 p // just repeated every time. See jmousetrap for more
- ^8 `& H0 E% e6 s/ r% z // complicated schedules.3 [1 y& @4 b/ [7 q% T P3 k
1 V0 U+ Y, t9 i! P
modelSchedule = new ScheduleImpl (getZone (), 1);* ]0 z& \0 b: ?1 F& \5 @: ^
modelSchedule.at$createAction (0, modelActions);% i" Z$ Y- @: p5 Y
# k+ e3 p6 v# \2 H return this;( \0 ?" R. M. K- h8 F
} |