HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
2 I! ?6 M7 I2 F1 @: s, w
# ^- y6 h. }9 w7 o public Object buildActions () {
% N* R% E( q$ c' c* ~& i super.buildActions();
! c+ L: u/ ~, W/ ^6 Q; n
* Z: J- ]* ~! | ?3 k8 N' t V // Create the list of simulation actions. We put these in) L* I4 }; h0 B" [$ r6 V
// an action group, because we want these actions to be V g, J+ S2 q1 {, r, x+ Y+ D
// executed in a specific order, but these steps should
$ Q+ b6 E$ k- f4 K8 n // take no (simulated) time. The M(foo) means "The message
4 H+ [4 f9 S4 x# `# ~ // called <foo>". You can send a message To a particular; G6 e; w( d3 q( L
// object, or ForEach object in a collection.
. }+ `3 O1 X. v' l+ N9 \; P7 D
9 }5 L, d4 Q7 u9 V# U // Note we update the heatspace in two phases: first run
7 ? F2 d E( q- M& x+ W // diffusion, then run "updateWorld" to actually enact the' }0 _) k! {! Y. y
// changes the heatbugs have made. The ordering here is
6 h8 K0 T$ T# Y) ]) T2 h // significant!
. l; Q( q: @7 @' F : I$ m; b+ t5 S* F) n: B5 G9 x
// Note also, that with the additional
- V+ L( a* ^7 \7 a. P // `randomizeHeatbugUpdateOrder' Boolean flag we can0 {/ n- n5 a4 \9 ~
// randomize the order in which the bugs actually run: n6 o0 @& S# t& I
// their step rule. This has the effect of removing any
8 N, I" f( l! {6 W a( O8 f" j" F // systematic bias in the iteration throught the heatbug
- z( a9 p+ C9 _- ^: i- H2 p // list from timestep to timestep5 n. O* s3 d3 f1 |( J/ y! K
+ e: G% N Q4 h" k0 a( x& l( o6 P
// By default, all `createActionForEach' modelActions have* e2 U, H% u4 k+ w8 {9 D
// a default order of `Sequential', which means that the
* q0 K Q2 D4 E$ n/ B) j: C // order of iteration through the `heatbugList' will be
! }7 l& o+ B; V // identical (assuming the list order is not changed
7 m7 s0 }- v/ P1 ]; V4 C // indirectly by some other process).
1 H9 |3 L' v8 R3 M: H
0 G0 d9 E9 I% t* u& | modelActions = new ActionGroupImpl (getZone ());
( F4 ^' k! ~+ n$ i% ` X
3 [2 K: D. g* h8 B' C( O try {: H$ m7 U, z4 w
modelActions.createActionTo$message
; w, o+ ?" d3 V/ N$ j (heat, new Selector (heat.getClass (), "stepRule", false));
4 F- B- z+ l m* n6 ]# c/ v2 X } catch (Exception e) {& n% W, ^: Z/ h
System.err.println ("Exception stepRule: " + e.getMessage ());
5 o ?% G7 T/ T& P( W- Q }" q9 q( T- n0 J3 O3 ]7 \2 R
! S2 Q8 u$ K' L' _. W" u+ U
try {2 j* [% d8 B: F
Heatbug proto = (Heatbug) heatbugList.get (0);
, h: _2 u; Y0 J/ n; T. O Selector sel =
3 b8 [5 ?& r7 f& C' B new Selector (proto.getClass (), "heatbugStep", false);1 d; k5 g; |) m/ p0 i! m: F$ Y) }
actionForEach =
4 R! u* p' e t% g9 a& g( k0 Z modelActions.createFActionForEachHomogeneous$call" }+ F) z5 F% v4 K+ U! E
(heatbugList,0 P3 [3 Q4 ~) v$ u
new FCallImpl (this, proto, sel,
, n' F3 p; ?7 S3 W& } new FArgumentsImpl (this, sel)));
9 ?3 L" {/ o1 O9 h } catch (Exception e) {
* Y% l) R% q# D# g! d O e.printStackTrace (System.err);
c8 R$ d, v4 h+ d }
$ [5 n! O6 i' x$ T4 l. i K! n/ I' E$ s1 W' P: s% q8 g! w
syncUpdateOrder ();
0 ?0 R" b$ t& ~ Y! T/ J
, x k/ x: B. H0 y1 R; B try {
0 f6 E& d9 P. `) M, H( z# @ modelActions.createActionTo$message
0 W7 L/ r4 g E1 g" m2 A: C (heat, new Selector (heat.getClass (), "updateLattice", false));: @. e" W0 c8 P
} catch (Exception e) {
$ p4 u; H9 y5 |- a* ~9 u* g System.err.println("Exception updateLattice: " + e.getMessage ());% W1 b& F+ d5 d0 B5 z. u
}" r9 @3 d" C2 k6 @. S
/ E0 H- @0 h! L, G. r // Then we create a schedule that executes the4 D, I, o* J2 e3 P- R
// modelActions. modelActions is an ActionGroup, by itself it
* z, A3 V+ u/ {) o2 K // has no notion of time. In order to have it executed in
2 r) O4 f: O7 t6 G$ J" k // time, we create a Schedule that says to use the9 e$ Q I6 J8 Z# z7 M
// modelActions ActionGroup at particular times. This
. b: L6 ^! ^; }* Y4 X r) i4 e // schedule has a repeat interval of 1, it will loop every1 w3 J5 ]& `% G' F6 g
// time step. The action is executed at time 0 relative to1 ?. J. E) Q; r! w+ `& f
// the beginning of the loop.
4 U4 r4 o M0 i
z9 J+ k5 E& k; T1 E // This is a simple schedule, with only one action that is. }" d. _! d* p* G$ b# @
// just repeated every time. See jmousetrap for more6 d& |# a: ~$ v- h5 Q1 j2 m! ^( q' b
// complicated schedules.1 x8 r- p7 \7 V$ I# @$ f
$ a5 R( ?" Q* m modelSchedule = new ScheduleImpl (getZone (), 1);
, }1 k9 n7 b2 o( ~- V0 C$ z modelSchedule.at$createAction (0, modelActions);
8 z( z6 Y2 s1 X& Z% _ 1 O1 Q( L6 U; l; k* G% S
return this;/ u* c4 T3 X& r" R) w8 U' g
} |