HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:# r, x' p; a5 m
i0 n E6 I5 ^( G* i public Object buildActions () {0 j& ~, e( Y; {- ~9 u% i1 h
super.buildActions();
; H- W( n) h& G
- i( e; N0 D( u7 s { e; D; o9 h // Create the list of simulation actions. We put these in8 I6 T$ r6 ` ?$ c
// an action group, because we want these actions to be0 a8 Y' b1 \' p4 x+ N. L4 q
// executed in a specific order, but these steps should4 v9 d$ w# T0 r) O( x0 l b
// take no (simulated) time. The M(foo) means "The message
" W7 ] Y& N) Q: h) ]" _ // called <foo>". You can send a message To a particular
7 E3 T g7 V7 Q; k: w3 x/ Z2 d // object, or ForEach object in a collection.
) F8 }7 ^6 f0 J4 e, O - y2 d: }* e% d/ w9 Z* I
// Note we update the heatspace in two phases: first run
4 q4 P# M8 V6 V: e) z // diffusion, then run "updateWorld" to actually enact the
/ y2 U5 F0 M' p8 W$ E* R: g% v // changes the heatbugs have made. The ordering here is2 E5 y4 b6 e1 ^, l: \" L+ C) b
// significant! O6 y+ c k- b9 X+ ?! M4 G
# @( h3 u7 I$ h' ?2 H, |
// Note also, that with the additional
' o3 V4 B/ H8 g/ k$ }; o% j // `randomizeHeatbugUpdateOrder' Boolean flag we can# p; H% q. o, k1 C
// randomize the order in which the bugs actually run; {3 Y! V- m; E* L/ S/ M* C
// their step rule. This has the effect of removing any, e2 Q& d, h7 O. A1 V( H# K1 M( P' m
// systematic bias in the iteration throught the heatbug2 f& o9 v& j: j3 [9 b+ J3 n8 I
// list from timestep to timestep
2 s- v0 P) O2 p* g8 Q ' L- x, d# I- Y6 R
// By default, all `createActionForEach' modelActions have) {) M2 V% _9 x$ K9 C! W$ T
// a default order of `Sequential', which means that the) @' C* l+ h# \1 R, c% ^
// order of iteration through the `heatbugList' will be
5 x5 @5 F; `6 _; d5 R6 H // identical (assuming the list order is not changed* c Z0 o& @! R. a" O, C& _9 _7 M6 j
// indirectly by some other process).# u* K2 J' P8 \# B
! d0 ]) d+ ^( o R7 O modelActions = new ActionGroupImpl (getZone ());
) h! j# m$ A* ^& k' f! n, j; Z8 ]0 D( ?; z# Y t" Y
try {
7 |" `# e5 Z( @ modelActions.createActionTo$message
8 a: H( g) M' _. y o (heat, new Selector (heat.getClass (), "stepRule", false));; x4 |! M+ F7 y# ~, z
} catch (Exception e) {! J- g; Z% w3 G: K! x
System.err.println ("Exception stepRule: " + e.getMessage ());* y3 `7 B! [% N* y/ G
}
- i; x$ T; a- P5 d* a' s/ b" Y
. B5 H& x4 Q4 ~0 `9 X try {
H. P# G. F, m. D0 U Heatbug proto = (Heatbug) heatbugList.get (0);
7 p% f/ {. h1 s) }! U Selector sel = * M# D2 H0 ]3 P& ?9 y8 m9 @
new Selector (proto.getClass (), "heatbugStep", false);
& d! q- n4 \8 b) K actionForEach =
% T; Y2 I9 z; q! U, F$ L modelActions.createFActionForEachHomogeneous$call
( d# d# \. d# [1 r/ x7 @ (heatbugList,
8 ^) k) m. u' w) O- M+ C new FCallImpl (this, proto, sel,
9 S5 _ D+ A( x" i: q new FArgumentsImpl (this, sel)));
+ Z# ]# f1 q/ h( T, _0 J } catch (Exception e) {
4 F7 ?) h, l8 g5 b* A; { { e.printStackTrace (System.err);
) w( {# y% C2 P' Y3 b8 Z }2 {6 u9 j$ ~$ f, N5 y
) l8 k' Z% D* g syncUpdateOrder ();
( }# R: Y" F( c- i o/ o% ^
[* n8 G' w9 i try {4 B8 d, _( ^7 G1 d ? K( @
modelActions.createActionTo$message % |' I& T4 m1 U1 ?$ h( u: q0 u4 r1 J
(heat, new Selector (heat.getClass (), "updateLattice", false));
7 h5 w7 ]8 l4 r5 k! Z5 W } catch (Exception e) {
3 w/ V# K3 f# ` System.err.println("Exception updateLattice: " + e.getMessage ());
' U) z+ t e" n7 m$ V }
% O8 l& R0 O1 O
1 K$ L- x c( X4 d // Then we create a schedule that executes the7 @+ D2 Z( i& d: v! l
// modelActions. modelActions is an ActionGroup, by itself it
+ G" C$ Q6 O- X // has no notion of time. In order to have it executed in8 o, k* Y2 c$ Z% v
// time, we create a Schedule that says to use the
8 P, ^1 x; U( Z // modelActions ActionGroup at particular times. This! j1 {1 ? S* r: o. a% G
// schedule has a repeat interval of 1, it will loop every
# i# i9 y3 E/ b // time step. The action is executed at time 0 relative to
; h( r' M) w9 `' l- c; | // the beginning of the loop.! M- z& B$ R/ R% Z6 m* z
7 g8 N7 `( D; z6 k; Q // This is a simple schedule, with only one action that is2 h0 F4 z2 _0 K' d6 R+ e( `/ d- s
// just repeated every time. See jmousetrap for more; U: w# @2 z6 y/ K# Q$ J. u
// complicated schedules.
; T& q: m3 T) n- a' d: J. `0 y' z
% B0 \5 W _0 V7 o; t; T modelSchedule = new ScheduleImpl (getZone (), 1);
6 m: K' Z, S2 k! B1 A# w1 o modelSchedule.at$createAction (0, modelActions);
- l' ]2 ^0 I9 O) q+ A: S
) X* U5 m6 y. |7 P return this;) E1 M! Q' D9 P( |' r e
} |