HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:/ H+ c$ a9 V$ u1 x* g% F+ r
" w) j. b3 P2 c
public Object buildActions () {
+ A4 G9 |( l0 y% d" `4 x super.buildActions();
3 {7 ^' a9 ~1 n, V8 a/ I/ J" ]
, a% k8 ]; S# c6 J // Create the list of simulation actions. We put these in
2 J/ T5 ?: l H4 a6 }$ b# [6 t // an action group, because we want these actions to be/ `/ m) I+ M) _ B2 Y
// executed in a specific order, but these steps should% W, E1 p8 U$ K H
// take no (simulated) time. The M(foo) means "The message+ @: X! x1 O& B6 b! a5 ` |& O6 e
// called <foo>". You can send a message To a particular. O: i1 \* w% E& k- K# a$ U1 E! {
// object, or ForEach object in a collection." F( D, H0 ~$ I* @ A" D% h
7 G' l# ]5 y/ ?3 S
// Note we update the heatspace in two phases: first run
$ G: r5 h3 y9 Y' {3 A // diffusion, then run "updateWorld" to actually enact the$ k( o7 b1 |* a( ^' r
// changes the heatbugs have made. The ordering here is
5 R. I( v9 e1 P( r/ C1 g. a // significant!
3 {9 \ d6 o( }/ K/ K5 h7 `
5 [3 V7 E7 f! x* } // Note also, that with the additional% ]0 ^; c& [0 ?' Z2 M& F5 L
// `randomizeHeatbugUpdateOrder' Boolean flag we can
5 h7 B" l1 ~6 i( d1 i- @; v // randomize the order in which the bugs actually run
$ q2 D; `8 H) I- K' c // their step rule. This has the effect of removing any
: F8 _% k2 P$ _& V // systematic bias in the iteration throught the heatbug
& K3 `; k6 P& x1 \6 s* k' Y // list from timestep to timestep) Y) g6 i5 \/ @3 ]
% e# w' M$ S- s! A7 e1 ~ // By default, all `createActionForEach' modelActions have
6 H" h: {, `; i1 n // a default order of `Sequential', which means that the- x! M2 D% R4 |( \* V7 ]* X
// order of iteration through the `heatbugList' will be
7 b, K. [8 i. M& s // identical (assuming the list order is not changed& Z. C4 N9 i7 M: q3 b) q* z
// indirectly by some other process).
: p4 H& \& I5 Q
& S: S. o8 q" d: @3 q6 f3 b. g2 T modelActions = new ActionGroupImpl (getZone ());6 v7 x# t# F3 r: i, F$ H
3 ^' A% E W' z' K4 b try {0 w3 a4 A7 g, |2 X2 Y
modelActions.createActionTo$message
, k6 l3 W3 |3 f9 R/ ` (heat, new Selector (heat.getClass (), "stepRule", false));1 B+ r$ g v! u( x. i4 {
} catch (Exception e) {8 Q. U! r* ?* {' I
System.err.println ("Exception stepRule: " + e.getMessage ());7 `. Y: K* a1 N/ Y1 x G. e) ]
}
0 S. z4 y$ j% p/ s" I
' H! m- b" h3 ~" g try {& l1 \/ v n% |
Heatbug proto = (Heatbug) heatbugList.get (0);
# |5 e; w- ~4 O' T' l2 A( I7 ^ Selector sel =
/ B; |; J, s+ D4 @ {6 m' o* y new Selector (proto.getClass (), "heatbugStep", false);: @3 E( z% |6 w2 C5 K7 V. X( X) h
actionForEach =2 u* y# Z$ }5 Z \0 R4 a5 I2 u
modelActions.createFActionForEachHomogeneous$call% V' i4 q. f r* i
(heatbugList,
! ]6 n7 {9 L, C: a F" Y6 ` new FCallImpl (this, proto, sel,
) B5 S$ G& M) A2 C% ~ new FArgumentsImpl (this, sel)));
& r9 e- y. q6 f } catch (Exception e) {
3 x2 \# U T x6 i+ O0 c' e e.printStackTrace (System.err);
( ]" ~, l2 M' V6 N! b }
3 A5 f L7 v; l3 j7 A8 Z s A3 i6 s% h1 ^0 E- @7 F$ |0 A) V1 z
syncUpdateOrder ();
0 k4 M; W9 B c! W$ W: R6 N5 K9 b' A' ]5 _
try {$ q3 v R: S+ d- |# F! u8 Q
modelActions.createActionTo$message / t( z: u# E3 C) ?* Q' E5 b1 e
(heat, new Selector (heat.getClass (), "updateLattice", false));
1 _ v9 q% w5 U- _6 P+ [! j } catch (Exception e) {
9 t( T1 l% _( g) s; T v' [ System.err.println("Exception updateLattice: " + e.getMessage ());0 }8 e8 J9 Q2 s0 z& `7 N- L8 J
}
v1 h) `4 S2 A+ J- d3 Y t" b5 e / k4 W& ]9 y4 a7 S! S" ^& M5 A
// Then we create a schedule that executes the3 P. ~5 _' f4 r
// modelActions. modelActions is an ActionGroup, by itself it
5 n1 C# M! O. @. F8 O! ` // has no notion of time. In order to have it executed in p" `6 k' g9 U! X/ E& _- u" `
// time, we create a Schedule that says to use the" Y+ W% c0 T% Z; L7 g
// modelActions ActionGroup at particular times. This
$ m z" Z. Z7 Z; T) m // schedule has a repeat interval of 1, it will loop every+ [8 l6 w& D/ R" b, V
// time step. The action is executed at time 0 relative to! `6 t" I; x3 C" U) _
// the beginning of the loop.
) h' A y+ I9 X+ Y2 o
4 @7 w0 l: q3 ] // This is a simple schedule, with only one action that is; W( b1 v. [* L$ b/ g( t, p
// just repeated every time. See jmousetrap for more
+ l, x" m5 V1 c# R // complicated schedules.7 L4 J, ?; c# l
6 n$ S+ B9 A7 m$ H! T# b( r9 M8 n modelSchedule = new ScheduleImpl (getZone (), 1);' p3 i, h. h9 Q2 [1 X
modelSchedule.at$createAction (0, modelActions);. L5 j- A% i t% g/ v2 n
" N0 z- l2 F$ L: F* r9 a return this;
5 g% V/ d) D. c! A- I& J2 d } |