HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
0 A" p( W5 _" g3 r# A
, H* ?3 U% w+ F0 V! c' m public Object buildActions () {
* S7 u, x0 T/ Y/ w1 r+ C super.buildActions();0 J& G/ S* `/ G2 e6 x
, T0 _1 K" h1 @
// Create the list of simulation actions. We put these in$ u9 |) i# k0 e( Q- T2 t
// an action group, because we want these actions to be& H* e. U: ^0 T/ M4 F( O4 V9 \
// executed in a specific order, but these steps should* y% s$ H8 W& n' E3 b' M; o4 g
// take no (simulated) time. The M(foo) means "The message
6 }4 C' @, D0 F% S" h, A u/ P // called <foo>". You can send a message To a particular
: C6 x, E- G8 e // object, or ForEach object in a collection.) Y' d0 o2 f& |. F& h$ p. ~
# k; |( [! A7 y
// Note we update the heatspace in two phases: first run: s2 q$ W& f8 `; N0 H
// diffusion, then run "updateWorld" to actually enact the
: a t% B/ R$ H4 t // changes the heatbugs have made. The ordering here is
6 z: B0 @% D' ~8 z% f: [ // significant!
* u' {" L1 D( P- R G: Z6 v
; s; u/ v- M% A8 L // Note also, that with the additional9 V5 H. x" x/ | i$ S
// `randomizeHeatbugUpdateOrder' Boolean flag we can
3 \1 U& h4 x+ h* W0 I // randomize the order in which the bugs actually run; |0 _4 n* g1 l( l* S( W3 O: y1 L
// their step rule. This has the effect of removing any
/ w8 n/ ?7 g2 n* d Q5 B$ H4 ^ // systematic bias in the iteration throught the heatbug
- I) G% T: n2 \ // list from timestep to timestep- f `: |) h$ i( h1 T
' N7 i& o$ x/ x3 Q1 f; e: J& C' @8 B // By default, all `createActionForEach' modelActions have
. b/ w1 O( F& G6 ~ u" g; | V- q // a default order of `Sequential', which means that the9 O: @ H4 k8 {1 ]/ H5 t7 K
// order of iteration through the `heatbugList' will be' {4 t5 H. T! |- R8 f% W8 m! m' R' H
// identical (assuming the list order is not changed
$ D% d. K Y! j // indirectly by some other process).! q6 \7 Z6 G/ W u$ |5 x3 A) I: |
8 ~) c- k0 G3 P6 j+ z
modelActions = new ActionGroupImpl (getZone ());3 }' T v, _$ w0 u; G3 Z
! y) K t! y% P9 ]8 t; M try {
~: J7 e, R# P6 E! S, x. [ modelActions.createActionTo$message3 M; [. b. V; p! q5 S
(heat, new Selector (heat.getClass (), "stepRule", false));
8 o4 n' \# L3 J0 L* C8 t } catch (Exception e) {
- R9 T3 Q( ~! m6 }1 I4 Q System.err.println ("Exception stepRule: " + e.getMessage ());$ Y! X$ ~! ]/ x( v3 l
}* \3 R: o$ M+ _# R1 `" R) _
' N6 R- |$ |6 j% C% n
try {
1 b* |; X% L G7 o6 L$ K- Q4 t* {3 t Heatbug proto = (Heatbug) heatbugList.get (0);
, S7 p8 U$ O/ W Selector sel = 4 H, L! _, K$ k1 [
new Selector (proto.getClass (), "heatbugStep", false);( m$ C1 X6 o! O6 q+ b- _0 ]6 V1 c
actionForEach =
- q+ K& \- }: C \( W) K& M, z modelActions.createFActionForEachHomogeneous$call. h# d+ E+ J, \- M8 d
(heatbugList,
: y3 N+ G" @. ^' z5 t( u new FCallImpl (this, proto, sel,2 _$ s1 n' I1 \, Y* m
new FArgumentsImpl (this, sel)));
$ x- Y% [7 ]. \7 }- K# \, T } catch (Exception e) {- R: {7 W2 O8 i1 a0 j5 ?+ H# q
e.printStackTrace (System.err);6 f% U8 b9 Y* `6 o
}
. W* h, f. z( g7 u
: R8 w' Z/ H1 @/ c( E syncUpdateOrder ();7 _7 t9 V I1 T# X* I; R, S
8 O. r) K3 c4 ]( H+ X try {
2 ?% h. C8 `+ Z" v modelActions.createActionTo$message : s5 T) S) u( b, G$ J* `' S2 l
(heat, new Selector (heat.getClass (), "updateLattice", false));
J$ f( v4 J8 Y$ p, P' A2 Z" ` } catch (Exception e) {5 l+ p9 l) N4 ?. e" K- c
System.err.println("Exception updateLattice: " + e.getMessage ());
, Z, J: C6 d$ K# b/ x/ B }
. |! `& D4 ?- c) Q: c+ V( ^7 l
1 P; s5 v5 g* H7 P' ] // Then we create a schedule that executes the: M2 E. D2 V. `
// modelActions. modelActions is an ActionGroup, by itself it
; i+ N( J- J$ X* P' E // has no notion of time. In order to have it executed in
( \) |8 v* b& z1 @; O9 S5 K2 L // time, we create a Schedule that says to use the5 t3 u3 E( `, Q
// modelActions ActionGroup at particular times. This$ o* l8 F6 _7 T/ U1 K1 s; e
// schedule has a repeat interval of 1, it will loop every
: C ^: ?; P/ g8 {$ B/ Z$ o$ R // time step. The action is executed at time 0 relative to
- d) c V0 z* Z // the beginning of the loop.) C. H( t0 e: ?0 Q! `
' m0 `! I5 D7 o# `9 L- t4 m
// This is a simple schedule, with only one action that is r6 X `( e O' x
// just repeated every time. See jmousetrap for more
% |- P; h2 \# r, q/ ^' C5 A- j' P // complicated schedules./ E4 M o, l# V: g" X7 i
: |( r# r+ F( x' f/ v
modelSchedule = new ScheduleImpl (getZone (), 1);
" ]) o4 N6 Y' [$ C& j; d1 b modelSchedule.at$createAction (0, modelActions);( u- \ v4 z# @/ @' t# x% z7 F1 j
# t7 P( S" o" Z z
return this;1 K; l' e3 I/ {; Q% j
} |