HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' Q y. P/ f3 x: U: J5 G4 S) Z/ w
& @3 s6 n( e/ \, \) [" {% V public Object buildActions () {9 C" k' P) N+ z c' v. f
super.buildActions();
! ~3 T9 u- B1 Y3 W" E$ m/ V1 o ' z5 h5 r" p) x3 b# K: X3 Z
// Create the list of simulation actions. We put these in
* B( ]: Z3 p- V5 ]+ E! f+ r // an action group, because we want these actions to be+ s) U) l% G( L2 Q
// executed in a specific order, but these steps should
' S) a" N/ |+ Z // take no (simulated) time. The M(foo) means "The message
5 T$ ]5 H6 @. s6 \ // called <foo>". You can send a message To a particular
! j6 w2 L3 ^8 j6 |; I1 G // object, or ForEach object in a collection.
, _) d% K( ^9 A: _- J7 \$ [) F5 X 2 L. O: f1 q! O9 G! j% ~8 D
// Note we update the heatspace in two phases: first run; Q6 D8 v! V& O; P1 z* B
// diffusion, then run "updateWorld" to actually enact the
# ]& G: c! \# W% }- Z! b4 e6 I, ?9 {9 u // changes the heatbugs have made. The ordering here is
* O d) L' g& l8 R // significant!% O$ F' F" X6 u, M! N) P
6 ?! B7 h$ ]- z9 @' k( l // Note also, that with the additional
/ R* Z {8 l* i, D( {2 |6 ~& W // `randomizeHeatbugUpdateOrder' Boolean flag we can2 ]2 d" P) g W! _( M+ K5 T
// randomize the order in which the bugs actually run
: @' v/ C: T1 S+ C5 V& i: K // their step rule. This has the effect of removing any& }0 B4 V+ B7 z3 s3 ]3 ?( J
// systematic bias in the iteration throught the heatbug
o& c6 q. @; F2 A# r // list from timestep to timestep Y/ i$ o2 a m2 @$ x
& p( C$ T" s; y* b2 D
// By default, all `createActionForEach' modelActions have
- N% Y$ l) g: n* U2 u // a default order of `Sequential', which means that the1 x3 k; T# }" ?2 O
// order of iteration through the `heatbugList' will be
' F' w0 I# ^5 K // identical (assuming the list order is not changed4 X! f9 v j# g
// indirectly by some other process)." B7 r3 d, S$ c. @
7 B. l. O+ _1 }% q2 B9 ? modelActions = new ActionGroupImpl (getZone ());1 i+ O. ^) X' V
' [: A3 v. g( @1 W7 r
try {
+ T/ U# w1 ~$ H2 y5 ^& v+ _ modelActions.createActionTo$message2 C4 s; R3 Z! E7 A& k m
(heat, new Selector (heat.getClass (), "stepRule", false));' g6 @9 U- y: W+ N7 P: B* n
} catch (Exception e) {
* O* [0 t- b% O$ X, ~2 h8 Z System.err.println ("Exception stepRule: " + e.getMessage ());
! `( ^+ J) \! m) E+ N* }& ] }
" Y' Q* A( Z$ Y3 ^9 F$ K2 v5 E: b+ T2 `" O5 a: [1 ~1 G2 T/ n
try {
( v0 T) }8 S& b+ M. U C( u; ^ Heatbug proto = (Heatbug) heatbugList.get (0);& {1 R7 j$ \: T
Selector sel = 1 M9 ` { Y1 k+ K# n
new Selector (proto.getClass (), "heatbugStep", false);2 u- u. P1 w( [! c0 a: p1 |: y0 C
actionForEach =! r6 \% {1 y" f1 Y
modelActions.createFActionForEachHomogeneous$call3 g* n) K. X' J% \* N
(heatbugList,. L/ Y3 |- R% n% s3 @3 O- Z
new FCallImpl (this, proto, sel,. B7 o& ?- \( i3 V
new FArgumentsImpl (this, sel)));
* t) J& c$ v' [# c: @( f E } catch (Exception e) {
! B" [+ n7 K3 p$ o! S( d& K& z e.printStackTrace (System.err);+ W) U/ E' X5 G1 M8 g* ?
}. |2 K: t8 U: L% c: I1 a
0 Y- K( x! D! }' M2 v
syncUpdateOrder ();/ Y8 Q# S C8 r- n4 g# N9 v4 I1 R, @; R
5 L8 h4 U) ~+ U: K+ F4 B2 I# e try {
9 e8 c3 \5 y; G modelActions.createActionTo$message + V5 g" \: d8 ~) a
(heat, new Selector (heat.getClass (), "updateLattice", false));
# b# w( n8 Z2 o+ ] ` } catch (Exception e) {1 ~+ Q0 s* o- B7 D% K" f& w
System.err.println("Exception updateLattice: " + e.getMessage ());
4 }$ x7 @3 l, A/ c6 ^; \3 d }. @2 K" F" x9 y- a; w
2 Z- U( f. J5 E5 `0 e8 ^) |" @" C p // Then we create a schedule that executes the8 g# |& x4 m$ J5 i. E* K
// modelActions. modelActions is an ActionGroup, by itself it
2 x6 i# Y2 z( e& T* Z // has no notion of time. In order to have it executed in5 u, Y- s! \, f; S$ U* `5 w
// time, we create a Schedule that says to use the2 w+ k S0 n {' V q! `; o
// modelActions ActionGroup at particular times. This2 q1 k3 N. A- @- X9 ~ G
// schedule has a repeat interval of 1, it will loop every
, ?& t7 Y5 z( l3 O. U8 t // time step. The action is executed at time 0 relative to
8 W# D& {( w* d# s7 { // the beginning of the loop.! f, C8 D4 e: R) O; \
3 s/ @+ b. z) }. ?/ e // This is a simple schedule, with only one action that is' R) b& D& ~6 I! R
// just repeated every time. See jmousetrap for more
3 [: B7 _! k5 R x( F // complicated schedules.( U" b1 _, k# ~+ n) R& G
/ F; R- _9 a4 ]& U' Z
modelSchedule = new ScheduleImpl (getZone (), 1);
; {! Z' r8 `8 ~% L" N% F; S modelSchedule.at$createAction (0, modelActions);
. a* T7 m \7 q0 O ( `1 b0 }: \; y' Z' G+ M; q V
return this;* ]& @: @7 P% j2 O" M6 A* p
} |