HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# A" l+ s7 h* t4 x9 @. e% F' @5 I! P- i' G0 L. O- S C3 S' m
public Object buildActions () {5 l* q) d& M7 s( k- ~
super.buildActions();! `7 j: M) o7 S2 A4 _. f2 Q, T
. t0 R, Y+ F, [( n' @) D& x7 F3 ^
// Create the list of simulation actions. We put these in5 U( U0 R0 m7 l( `
// an action group, because we want these actions to be
& l$ o; S# G, ?# {( P // executed in a specific order, but these steps should
+ Y. l2 u e# `) }+ J# e3 Q1 | S // take no (simulated) time. The M(foo) means "The message7 P7 b; G/ e$ ~% j
// called <foo>". You can send a message To a particular7 k( p" e0 C3 S s/ C$ f
// object, or ForEach object in a collection.- m& m+ C# k! N7 e* R7 k
" K; l7 a- O! i* h0 p% a1 R // Note we update the heatspace in two phases: first run
2 P' C- L$ C2 z% N3 H( ^3 y // diffusion, then run "updateWorld" to actually enact the
* d0 M% R8 R4 j // changes the heatbugs have made. The ordering here is5 ~: c: o# @/ d2 p' \% T& ^1 v2 X1 |
// significant!/ u' W% V6 l/ t
8 K) P1 \# n% W8 `, h& ~
// Note also, that with the additional3 _" z$ t4 ^: Z' X9 F0 x) S
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 D$ B) t; `" H! @3 v, A // randomize the order in which the bugs actually run
5 }2 D( t4 N$ z; a. F- T4 N // their step rule. This has the effect of removing any. t# { L% G! X. l* i
// systematic bias in the iteration throught the heatbug
( X$ g' E/ H2 B. F; K // list from timestep to timestep
# {; c3 E% L G' A. t2 i* d l
. M& s: e! K% K/ b: i // By default, all `createActionForEach' modelActions have
) `( g2 I2 D1 P0 V( n- [3 G0 N // a default order of `Sequential', which means that the! Q+ m2 n/ u9 J$ H: \
// order of iteration through the `heatbugList' will be
, `. Y$ ]+ s$ K1 Z& U7 O& s // identical (assuming the list order is not changed1 ^" u2 {& i" I: j
// indirectly by some other process).$ e( [9 ~0 ^3 g8 m
/ P' W$ f& v* l0 z
modelActions = new ActionGroupImpl (getZone ());' J$ { o+ `1 ^; @' i# G1 O
& s H* f/ ~1 T' J2 w: R7 P# I try {% R6 z: Q, q3 z( d6 U
modelActions.createActionTo$message6 W5 @7 K; F) ?& P
(heat, new Selector (heat.getClass (), "stepRule", false));
+ Q' I8 h' D) L! Z _) W7 {8 E* t+ T } catch (Exception e) {
% H: y5 y" B* b" R( ?8 B( l, q System.err.println ("Exception stepRule: " + e.getMessage ());* F# _6 R5 e9 K0 @2 f9 G
}
5 M: l; |4 m' X* U; _% e' ?9 ^" q' T" M( \
try {4 s5 A* W2 S6 ]' _7 x$ o9 b
Heatbug proto = (Heatbug) heatbugList.get (0);/ V7 p1 o5 g3 `9 }6 l' P. m% P
Selector sel =
# U$ A: k8 _0 _6 l; C; H6 ~3 Y! j new Selector (proto.getClass (), "heatbugStep", false);8 e d* _% N% y; ^4 n2 [1 W
actionForEach =
4 l X' t2 f; n8 v$ m modelActions.createFActionForEachHomogeneous$call
8 M3 @6 @- d: k" o3 b (heatbugList,
/ |; w7 j5 F1 [5 u8 T new FCallImpl (this, proto, sel,) L% h) [# z6 ~, B, U
new FArgumentsImpl (this, sel)));! y+ k, K7 f: V: _2 @: A
} catch (Exception e) {
2 C! g9 r2 V- v% [ e.printStackTrace (System.err);$ P0 l' }) |; J& q" N& m
}- x1 N8 {* P; g! e6 |5 m( D3 [: n! ^; J
/ X8 \( A A g) l
syncUpdateOrder ();
0 @; K$ s2 O4 [6 O N9 H, ^. n4 s
try {6 `! R: n9 J! W) U9 J4 K: _
modelActions.createActionTo$message 6 A! I6 q! F7 \* B8 c
(heat, new Selector (heat.getClass (), "updateLattice", false));
4 Q4 M+ Z$ f% ^: t5 y } catch (Exception e) {
. ^. |' p$ B/ \: N System.err.println("Exception updateLattice: " + e.getMessage ());
& e) V. Z$ |2 g/ r, F4 }0 x }6 ]/ i, s, `8 v) O. x; Q2 Z) d
, z* a2 _* ~. C6 S7 V3 f
// Then we create a schedule that executes the
" }. k7 p. i; L [1 O // modelActions. modelActions is an ActionGroup, by itself it
r- ~# l$ J. X+ e // has no notion of time. In order to have it executed in! B# ^' m( Y6 l" t% j: @ l6 O
// time, we create a Schedule that says to use the$ _, O, Z8 o6 T% V& L2 F
// modelActions ActionGroup at particular times. This
2 _( w* ^! ?$ V" P3 g( q) ^0 X Q // schedule has a repeat interval of 1, it will loop every$ g& x0 q4 `3 r
// time step. The action is executed at time 0 relative to* b9 W" _: Y2 S. Y
// the beginning of the loop.
0 Y: _1 ]9 _7 {& W
2 s+ ^2 _& p3 s# f9 U0 X // This is a simple schedule, with only one action that is
# F6 F- |+ g, d! w' Y // just repeated every time. See jmousetrap for more
# j- f* N' F% t. J3 R4 g( y // complicated schedules.$ Y& [4 |/ X+ e" G0 z9 _. m
* A- x& e c$ _ modelSchedule = new ScheduleImpl (getZone (), 1);( |7 r" x/ L0 X/ ?8 S( c, Z
modelSchedule.at$createAction (0, modelActions);
# J( J+ }% q& L + s& t) w( q* \2 E. J+ i# @
return this;, v, m) F5 m" o# _( \- I* M$ z" ]
} |