HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
% I* ^: R1 a' u/ f' t) f# ^7 {9 T6 T' S* ~$ N) S" t
public Object buildActions () {* j) |, g. `. Q7 h% ]8 m1 k' A
super.buildActions();# q; B6 C I% P: Y( _
. C! o$ s3 q5 F8 [ // Create the list of simulation actions. We put these in" E4 o! ]2 N' b# N7 `2 z9 g
// an action group, because we want these actions to be C' v4 i! B7 y! d
// executed in a specific order, but these steps should
! H0 o7 _) g0 r& k) _* L; S* P // take no (simulated) time. The M(foo) means "The message
! {7 d* K1 N. G1 F9 p1 E! |! x& y // called <foo>". You can send a message To a particular; j+ ?. H. Y1 E! w3 ~, d- |& l4 ^
// object, or ForEach object in a collection.. k0 |3 T5 O7 d) b
1 t. B0 `5 }# E v
// Note we update the heatspace in two phases: first run
( w9 f; e% z& y: _ // diffusion, then run "updateWorld" to actually enact the/ _' T1 q8 U1 l5 a# B) b+ `
// changes the heatbugs have made. The ordering here is
( ~* R1 @9 K% Y! J0 M // significant!$ A( i$ p7 N3 K/ y
9 E* A* a. j- G6 }8 l( o. z // Note also, that with the additional: ^7 o# j8 _3 s1 d$ T
// `randomizeHeatbugUpdateOrder' Boolean flag we can
" x; y7 j- R" V/ e // randomize the order in which the bugs actually run" r. L$ g' W: E/ ^0 `6 e5 _& I3 q
// their step rule. This has the effect of removing any# m$ n: K5 v I
// systematic bias in the iteration throught the heatbug
- D& O) o& g7 ^4 S" c' n3 y // list from timestep to timestep
' P5 {0 X8 M; y" g7 z5 L$ t+ V ! P T" d( G8 b, P& y* o( m
// By default, all `createActionForEach' modelActions have
+ c" ^/ w9 M; i$ e1 J7 J: i6 ` // a default order of `Sequential', which means that the3 K4 K6 k0 O8 L" t) O: F
// order of iteration through the `heatbugList' will be
: ~( J: \4 }, j. F' _) o3 } // identical (assuming the list order is not changed
5 j: _7 B3 t0 Q2 Z // indirectly by some other process).7 h1 u. S7 k: h! b
: T X# X1 z" _! j( h1 O
modelActions = new ActionGroupImpl (getZone ());
$ ^# W- j" Q: m
, F& D* z- d2 E$ c' E1 ]/ L' S# s try {7 v. T* A0 c! q* u# n& B+ o' E
modelActions.createActionTo$message
2 T( H" V! p; D& R) B9 ^3 O! l$ G (heat, new Selector (heat.getClass (), "stepRule", false));$ t" @- h+ y0 N. c1 b4 R( _( J4 @
} catch (Exception e) {
9 z d6 t* E- D1 n: |8 H. u System.err.println ("Exception stepRule: " + e.getMessage ());
' a2 g s4 }/ J( s }
( y7 K6 t( R( x U. {+ U6 P3 A0 V O, s% P
try {
1 ?* B8 W9 y! u Heatbug proto = (Heatbug) heatbugList.get (0);( E/ H+ d. b& Q7 l' Z
Selector sel = , q3 x0 t" Z" u; P: F
new Selector (proto.getClass (), "heatbugStep", false);% Y, l9 D) R. m1 y2 |
actionForEach =
0 M! M; q7 Q \0 o, J modelActions.createFActionForEachHomogeneous$call7 d9 D& P7 p4 B* D& m4 C6 @
(heatbugList,) e8 L3 V* g# O( o& @1 {
new FCallImpl (this, proto, sel,
! o' |! s5 |: c: G) e6 U) z+ S new FArgumentsImpl (this, sel)));
. ~8 q- X1 a+ f* D! b } catch (Exception e) {8 q6 }3 m# A2 r) T& ^# l/ _
e.printStackTrace (System.err);% G1 Q( w, ~! ?7 d
}
1 T* d) A2 s8 y9 p* H
6 m9 k) y* C8 d' P8 p) s/ `9 c syncUpdateOrder ();+ g2 v* P, t6 L ^
9 F& A9 k. j2 I4 G4 A3 K try {
- b. P' {" L# u, U P modelActions.createActionTo$message " c; d* @: t+ P) u' F- ^$ T
(heat, new Selector (heat.getClass (), "updateLattice", false));6 D9 B, r8 g7 b" n* N6 ?
} catch (Exception e) {
% ~- g7 Y a5 K5 ^ System.err.println("Exception updateLattice: " + e.getMessage ());1 [5 n- i3 l0 O$ t
}
$ y1 t1 A2 Y) D1 s9 p. e& E
4 r9 E3 V& y2 t7 z' v! z // Then we create a schedule that executes the
4 `3 X$ y( l) @0 h+ J8 C/ a // modelActions. modelActions is an ActionGroup, by itself it
+ N9 M: y& j. F4 \+ l2 V! M; E // has no notion of time. In order to have it executed in
/ ]2 [7 h5 o+ d& q3 b( W9 Q // time, we create a Schedule that says to use the3 I/ l) o$ W3 _) V( D0 V3 m+ r+ a
// modelActions ActionGroup at particular times. This& l5 u, k P) N+ Q: A
// schedule has a repeat interval of 1, it will loop every
/ ^5 r% Q& y* d1 s! C // time step. The action is executed at time 0 relative to) Y4 {* A4 j0 x( {( v# Q
// the beginning of the loop.$ b6 s6 a4 P1 U9 k3 B& P8 ?0 D
$ J8 B K& s* d# h5 Q // This is a simple schedule, with only one action that is
M" C# m5 {( G- L // just repeated every time. See jmousetrap for more
( _' M1 y' u1 e! I* K // complicated schedules.
" U9 j; s, N! b) M * A, M: \) H/ a! u
modelSchedule = new ScheduleImpl (getZone (), 1);
- L, y a7 ^+ G# ~ modelSchedule.at$createAction (0, modelActions);
+ U8 P: m* {# }! R$ S. O) X ` - a3 F8 @# [! S2 z8 Z
return this;
* b! [. `. L/ w3 i3 u& B. P } |