HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. ?2 `* i8 C4 n+ R
9 _! Q( J5 V5 K% d9 U7 r$ E2 z public Object buildActions () {
g+ M1 ^# p/ ]7 N ?7 X super.buildActions();) m7 W! ~% @0 {' ^) m! m7 F
, D, C. W9 a0 [. T. b5 v
// Create the list of simulation actions. We put these in' R" m4 Q7 A/ Y4 ~3 ^
// an action group, because we want these actions to be
4 Y7 R1 Y1 W% @9 _( }7 @ // executed in a specific order, but these steps should4 j4 l: \, _* B) `! i7 k. c+ N7 @
// take no (simulated) time. The M(foo) means "The message
8 X4 Q, s P2 p6 f) {" @ // called <foo>". You can send a message To a particular6 c, w0 q4 f; y/ H" L' d
// object, or ForEach object in a collection.
; f! O$ m: I; u1 ~
) R, i8 X4 \& [ C2 Z3 A( \ // Note we update the heatspace in two phases: first run( f3 D2 T, z" w% B
// diffusion, then run "updateWorld" to actually enact the7 B* o- d i, Y( D) p! @! q+ r) A
// changes the heatbugs have made. The ordering here is0 J. w/ ~* j! W
// significant!
; O1 h% b3 u' B2 g. D2 p
( L8 Z7 _' o0 i8 n, i: R // Note also, that with the additional
- Z0 R7 Y; i/ M l // `randomizeHeatbugUpdateOrder' Boolean flag we can
! d" |! S' b- c3 W // randomize the order in which the bugs actually run" M4 z. _" A) O6 p: u
// their step rule. This has the effect of removing any5 I7 E3 O3 s/ X, r& d
// systematic bias in the iteration throught the heatbug
+ j/ E9 }, {. _( ` // list from timestep to timestep
5 V! X& f: U [0 U. Q ' g, t0 A3 \6 `' X x& _; n- [4 h
// By default, all `createActionForEach' modelActions have i& D) W3 t# b8 D/ Q; z; C4 e
// a default order of `Sequential', which means that the
" a4 q. b3 ?1 z) D& R // order of iteration through the `heatbugList' will be# u( L: t3 ?* f
// identical (assuming the list order is not changed
3 y4 c( {/ o3 |- v% ^) y5 C8 w // indirectly by some other process).
0 T; q7 ^ A1 I6 n4 d
2 h% T: {8 r5 c2 K modelActions = new ActionGroupImpl (getZone ());
" m$ l+ Y) \/ ~& Y0 b( z
: q J: C" W4 ?" ~& |2 D0 H try {/ y7 W) L% k& u, U4 r4 g; @
modelActions.createActionTo$message
5 w9 |/ E6 H. { (heat, new Selector (heat.getClass (), "stepRule", false));
! a% i( v4 e$ b5 }0 C ?% ~- J4 R* r } catch (Exception e) {$ U: c" R4 f2 c! i
System.err.println ("Exception stepRule: " + e.getMessage ());
9 i" n3 ^9 d; F3 [/ I* u8 w0 E% s }4 U" }# h+ ?& z8 W R; z3 Z& K
0 ]9 E( e/ |) l* I9 i% m try {
4 d* T+ R9 x$ V Heatbug proto = (Heatbug) heatbugList.get (0);: a% u$ s$ s. U: g* V: c/ O
Selector sel = 2 @- l! d) n* _+ d/ i6 C
new Selector (proto.getClass (), "heatbugStep", false);# g8 n# U0 Y; n: h2 @. n) t
actionForEach =
9 S8 Z3 t6 L) }: W modelActions.createFActionForEachHomogeneous$call
% P- f4 t9 q7 R4 h3 \$ Z* \ (heatbugList,
5 R$ u/ V0 d7 F+ t5 k$ _( I2 {% T new FCallImpl (this, proto, sel,
0 e, w. _" r' x1 f1 `9 C7 g+ ?% K6 r new FArgumentsImpl (this, sel)));9 z9 A: e4 u: z& g
} catch (Exception e) {, m# V' M8 A) J. F F+ X, {
e.printStackTrace (System.err);
6 w* M( v: E. X9 b4 Z }
" }" z% q3 N d4 }/ h5 k1 g ( Q/ t1 z/ \* ]! `) n c
syncUpdateOrder ();
7 m7 ~# d$ P3 R7 Q2 N5 u, b2 s$ k
K6 z: N9 H: o. {+ o' p& v* ] try {4 p! U7 b5 D/ M
modelActions.createActionTo$message
; j- ]" a5 w: C- x5 s5 P' `2 Q (heat, new Selector (heat.getClass (), "updateLattice", false));
. c7 h! E- K a& r+ ]4 |6 g/ | } catch (Exception e) {9 O) R3 k- c3 J5 u4 i# Y
System.err.println("Exception updateLattice: " + e.getMessage ());
3 s U. J9 {5 r }
7 [2 ~: h% v$ d- Y$ W6 n9 j, V : X& [9 |0 A; Q8 P
// Then we create a schedule that executes the* g6 J* H# s" x' v. Y9 ^
// modelActions. modelActions is an ActionGroup, by itself it* K. K6 _5 k4 j
// has no notion of time. In order to have it executed in
' c6 Z) T8 q: }% ~: U // time, we create a Schedule that says to use the
; ?) _; K( r- i$ s; y* t // modelActions ActionGroup at particular times. This
* ?; A X- X3 x4 U, { // schedule has a repeat interval of 1, it will loop every
$ N; h7 z; Y; e# o# y, i g // time step. The action is executed at time 0 relative to7 a) e' `# Q& |4 i
// the beginning of the loop.
+ ~/ ]5 H& ?7 {; C) `" k* k8 H5 p, |% k: Q% o; c
// This is a simple schedule, with only one action that is4 S, i6 D6 N: [1 d% T' f$ i
// just repeated every time. See jmousetrap for more
; L7 K9 O0 |* g1 `8 e$ l5 o // complicated schedules.
6 C$ N% s$ `9 r" i% i
+ a+ o2 N% H9 |0 q+ W modelSchedule = new ScheduleImpl (getZone (), 1);2 L3 [& a' L; T2 p8 l: W3 y' p# O
modelSchedule.at$createAction (0, modelActions);
' ]8 q7 [+ _# m+ I q& F' B 0 v5 N: {9 @1 S/ Z
return this;
. U! q+ [( n$ S3 z0 F; s6 j3 q } |