HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:" e7 W6 Z" R Y J G5 [
+ x( f9 t: x- m6 @! H4 V
public Object buildActions () {
! F$ D- L. G$ [( x super.buildActions();
% m% y7 n- n8 A" K+ F3 o F) l7 R Z+ z0 T2 Q, K7 d# J* b
// Create the list of simulation actions. We put these in
- a7 t2 o9 t6 ~$ @8 G // an action group, because we want these actions to be
3 I) c5 C! G9 k9 [6 o // executed in a specific order, but these steps should$ k! E) k$ e( g
// take no (simulated) time. The M(foo) means "The message- g) X4 v$ E A: j
// called <foo>". You can send a message To a particular3 i, G) F; U! [8 l+ v8 Z- J& X! A
// object, or ForEach object in a collection.
8 {' r9 s: y( j: c # H. b/ i" z0 r+ l# X( n
// Note we update the heatspace in two phases: first run9 Z3 D% V! c+ t
// diffusion, then run "updateWorld" to actually enact the0 o+ h6 Y e: ?8 e' b
// changes the heatbugs have made. The ordering here is7 W5 u9 I* M. F1 } ]
// significant!' w" d2 G0 Y. r1 ]. k6 m
* A9 c: S0 ?$ {& s // Note also, that with the additional
u4 R$ C% w( ^+ b8 G c // `randomizeHeatbugUpdateOrder' Boolean flag we can: ?' W. K4 r( j+ m
// randomize the order in which the bugs actually run8 ~3 m$ B9 G+ d& G/ f
// their step rule. This has the effect of removing any
" C( {" u' q" Z3 X4 R; O // systematic bias in the iteration throught the heatbug
) x! A: @, H% d: ^- W: _/ O // list from timestep to timestep
2 E0 S/ b. e6 M$ s& m# ^2 \ ' U4 M* ?+ ?7 x7 c6 C
// By default, all `createActionForEach' modelActions have' F# q' O% p% ]0 J( b" a1 j
// a default order of `Sequential', which means that the
6 I+ T' K4 _9 Z( _8 b; |# X. J // order of iteration through the `heatbugList' will be
5 h J0 I8 q% W // identical (assuming the list order is not changed9 e6 K6 k; j0 I% [& g/ e% P
// indirectly by some other process).
& f% Y' d5 Q- P 4 U! L4 z7 v* m; K
modelActions = new ActionGroupImpl (getZone ());! d4 j4 b3 ~6 d: w! u7 _. W! U2 w
) _& R$ \ \7 O- h5 v
try {: g V! ?; `& g$ e; k
modelActions.createActionTo$message
) N' @' @; ]+ I8 G: @8 K; j (heat, new Selector (heat.getClass (), "stepRule", false));+ P+ V$ c" H7 v; X. X9 e
} catch (Exception e) {& W% K- t a' j ?7 [; M7 s- U) q
System.err.println ("Exception stepRule: " + e.getMessage ());
6 x* v. g4 r4 w2 H4 `7 f }
. K0 S% o0 N# l) j- @/ E7 I x6 W d3 e) P
try {' f0 ?4 n+ v9 L5 e" m
Heatbug proto = (Heatbug) heatbugList.get (0);) N/ ?5 y" n6 |4 j- L& c
Selector sel =
& S+ }; F! R. A& H* o! B% R new Selector (proto.getClass (), "heatbugStep", false);2 V% m0 g; h" @( a
actionForEach =, z: U3 {' H# g
modelActions.createFActionForEachHomogeneous$call' S& m" [% S/ N, c' F
(heatbugList,
2 k; d% X8 A7 y* _- m7 P new FCallImpl (this, proto, sel,) Y! P5 G G7 E' m" [# N
new FArgumentsImpl (this, sel)));0 O2 s% m3 y# @( k. a
} catch (Exception e) {; B8 g# _: I, E# Y5 L( F
e.printStackTrace (System.err);) M3 ~# q/ w0 w2 o, v; H6 B# Z
}
7 [ ^/ N; ?# V) X4 T
3 l, F0 T; u! r2 y4 f) ^ syncUpdateOrder ();6 I4 H: h) f! k( |
; i+ u. o6 C9 i/ s try {
: e7 u. {( o2 z2 ~* h modelActions.createActionTo$message
6 I7 j$ a% v) L6 P' l k (heat, new Selector (heat.getClass (), "updateLattice", false));
4 T- P& k" }) P- u } catch (Exception e) {
3 s& i7 P3 o5 h+ B; x$ q7 {7 \3 \! A System.err.println("Exception updateLattice: " + e.getMessage ());
" b$ D6 x* S' i; b& b0 p& v. ^ }4 D6 t b! }9 t+ V7 n+ Q- A1 r) `' O
( G2 K0 h7 r) c
// Then we create a schedule that executes the9 l) @/ L: }# d3 c
// modelActions. modelActions is an ActionGroup, by itself it7 u9 f1 ~1 e7 S- V; t
// has no notion of time. In order to have it executed in
7 H* p* O8 }" Z% y // time, we create a Schedule that says to use the! i: O+ R6 p0 {
// modelActions ActionGroup at particular times. This: h( t ^$ l9 p1 W% j e9 D$ Q
// schedule has a repeat interval of 1, it will loop every! p- A$ N7 @0 r9 s1 N' }2 l
// time step. The action is executed at time 0 relative to5 Y8 p* v6 @+ y1 i* f7 k
// the beginning of the loop.
+ v7 {. Z3 u+ W3 ? p7 {/ J' z4 _5 ~! M" w) E7 r; `" z
// This is a simple schedule, with only one action that is, v9 Q$ C s% E
// just repeated every time. See jmousetrap for more' N( H8 v( u6 l v/ p ~0 r/ o
// complicated schedules.
/ c& l& T' J% F8 v0 j6 j
0 E( G; O+ S8 r9 I modelSchedule = new ScheduleImpl (getZone (), 1);
0 _/ f1 X: Y' B0 B4 } modelSchedule.at$createAction (0, modelActions);
7 M8 t# y3 ]# s* W- A
2 S( o, k4 q `1 E( | return this;
. \& i. N9 {3 B } |