HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% B* R* ?: J7 P6 `8 I: d4 t1 R; j/ t5 J9 Z6 B2 q
public Object buildActions () {
; j0 H! g6 @& z super.buildActions();* Z5 M. h9 F I& i* s& G2 f/ K5 Y
: V, Q8 }- S' c0 D // Create the list of simulation actions. We put these in
/ n' D5 [3 k& y8 y! r( z2 v8 H; X$ I // an action group, because we want these actions to be
/ L% q; ~0 q! g // executed in a specific order, but these steps should
' E9 d0 X) I* i, q- A3 T" o // take no (simulated) time. The M(foo) means "The message
1 \ Y0 O3 v5 c7 H! {7 O4 x2 j/ T // called <foo>". You can send a message To a particular
3 `% I! D/ H2 f0 A // object, or ForEach object in a collection.
/ b# A: Q4 }5 R
: z2 l, t" P, P6 Q" K l5 A // Note we update the heatspace in two phases: first run" w7 w1 Z6 j( |. \
// diffusion, then run "updateWorld" to actually enact the7 O" `/ A* @8 C' y
// changes the heatbugs have made. The ordering here is
0 e9 S* B" s$ K3 |& h // significant!/ y" G" @$ Q, i {0 m
4 N: v8 r. Q2 l( |1 I4 D // Note also, that with the additional" _+ }1 ^: d) L' i7 {' A! L% g
// `randomizeHeatbugUpdateOrder' Boolean flag we can3 @, p! l5 t1 N8 L4 T
// randomize the order in which the bugs actually run `$ D% F: k6 `% I) \
// their step rule. This has the effect of removing any" E! g6 l6 `# G. e
// systematic bias in the iteration throught the heatbug, v/ X1 G0 c* d w; P; z
// list from timestep to timestep- R0 k: V n: K, v, r5 d
1 C# I; H# F! L# L
// By default, all `createActionForEach' modelActions have
" j9 R" I z2 W // a default order of `Sequential', which means that the1 y+ L' n: ~+ R3 e
// order of iteration through the `heatbugList' will be- N: i4 h0 U' c. @% N& E- ]0 h% a
// identical (assuming the list order is not changed$ t E2 r. \- j) W5 i* V
// indirectly by some other process)." \3 o6 _) y2 ]# A
) f5 ]( j* T9 X* X5 W! ^) m
modelActions = new ActionGroupImpl (getZone ());+ f/ V; n" |9 d- n
' G# O+ s3 B' z. e) ?- Z try {8 U% j5 _3 x% U- M+ m$ i
modelActions.createActionTo$message& k& F# a# R& S
(heat, new Selector (heat.getClass (), "stepRule", false));
]: Y9 H* Z% E( f } catch (Exception e) {
; [* Y# B/ ~; l6 J+ m4 X& S' O System.err.println ("Exception stepRule: " + e.getMessage ());
7 h! W1 C7 a9 e2 c }0 ^. W4 m* V: l7 C
! ]3 k' G1 t; d; a5 A v try {# h0 a( U/ B; F# s1 j
Heatbug proto = (Heatbug) heatbugList.get (0);
! ^( t: z+ D) o% V/ m' Y Selector sel = + M8 k2 s+ q/ M9 `+ c; @
new Selector (proto.getClass (), "heatbugStep", false);$ U0 N, _2 u1 t% E
actionForEach =; x( j# M, O0 m' `# A- m$ T/ H
modelActions.createFActionForEachHomogeneous$call+ p/ F2 h3 j5 P) P o; N
(heatbugList,6 @4 I0 g' `1 q8 a | k
new FCallImpl (this, proto, sel,
k0 c: ?2 i* q2 e6 G6 U new FArgumentsImpl (this, sel)));
) l* [6 h% m9 R3 R' g4 B! L } catch (Exception e) {
- [7 O4 @5 O$ C7 a" O% R e.printStackTrace (System.err);8 v9 z! r! s! c* t
}. F/ q! M7 p0 r6 V4 n
$ e, ~; ?0 s8 ~0 f( y$ J$ {
syncUpdateOrder ();, W7 @2 d C X: N0 @6 y8 {
3 A/ v: @1 \7 o# Q try {
. i9 Y; N; N* t& _2 G9 k1 c modelActions.createActionTo$message
8 y% ?7 T/ u' Y) y (heat, new Selector (heat.getClass (), "updateLattice", false));& U' B5 Y# o7 ~
} catch (Exception e) {
" {5 _9 |3 ]2 w% X: D! \ System.err.println("Exception updateLattice: " + e.getMessage ());' p: N; g/ s( k1 f' y f
}1 C2 \' x/ I z6 B- C3 Q2 t$ |
_+ c. J/ Y8 E' i V& ]
// Then we create a schedule that executes the
& \2 Q5 u5 X8 w4 l% O/ b // modelActions. modelActions is an ActionGroup, by itself it
0 R5 a! l% |" C // has no notion of time. In order to have it executed in- V( c3 F" w8 g6 M4 S
// time, we create a Schedule that says to use the
4 w& o# T) g- {$ Q+ @" E8 g // modelActions ActionGroup at particular times. This, _6 Y8 Z0 j# J) ~/ ]
// schedule has a repeat interval of 1, it will loop every1 l+ X6 o4 f5 M' H/ V) k( ~6 l
// time step. The action is executed at time 0 relative to% l: [# T& _0 P" Y# e- O9 H3 j
// the beginning of the loop. U( d5 ^9 y& l& K/ U0 [
1 T( t5 H, h% p, I/ e // This is a simple schedule, with only one action that is* f l* X0 Z0 t2 u G2 [, c
// just repeated every time. See jmousetrap for more
0 t _ r- M$ U1 M. X // complicated schedules.
- P: `8 C' L- S" q) n ; e d1 ~! c4 L, L7 o
modelSchedule = new ScheduleImpl (getZone (), 1);
# U4 c* |) F. z4 i modelSchedule.at$createAction (0, modelActions);
" I q5 Z7 Z' F4 R4 b. }
; y2 @% H( m3 T0 e% N$ D return this;! M' i1 X D9 T; B7 T/ R
} |