HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:$ b& f& m! N- X) a6 O
4 S4 O6 Z; C& ?! ]" C! s) k/ Z
public Object buildActions () {' V8 q/ C! J" |3 f# Y' o% S7 c4 X
super.buildActions();
; T2 `. U: r/ ~9 a8 z {" i ) a/ A# V$ x$ Q. ~0 W+ }& H& D
// Create the list of simulation actions. We put these in
. v/ c& N0 _! D L0 r // an action group, because we want these actions to be
; Q4 \; J3 l. e! g$ _ // executed in a specific order, but these steps should
) x1 `- D3 C/ \ // take no (simulated) time. The M(foo) means "The message
# [: ^% z# J4 G // called <foo>". You can send a message To a particular
9 z+ S) b5 O- c // object, or ForEach object in a collection.
& S$ U" n1 ]- t* m0 x
0 p8 |2 }8 t& H/ a, @ // Note we update the heatspace in two phases: first run
5 b& n6 I9 R; A! b, {! ?" O; N // diffusion, then run "updateWorld" to actually enact the
: j6 i# \9 k g! J+ Q5 C; u B // changes the heatbugs have made. The ordering here is& d5 o; d" N% s7 F G h5 Z
// significant!6 L% w% x5 s7 K" ?$ \
9 \% h: [1 V/ p // Note also, that with the additional' U* G4 M( V$ F2 |* a3 v: Y8 K
// `randomizeHeatbugUpdateOrder' Boolean flag we can" ^. U: c4 j, H8 b- }
// randomize the order in which the bugs actually run
n' @+ L: u" }1 p, ~ // their step rule. This has the effect of removing any
- ?8 F& s8 e0 _" l+ O. x1 A // systematic bias in the iteration throught the heatbug
( e" k5 Q/ y p$ |) D // list from timestep to timestep4 t/ ]8 Q0 k$ {& \
2 E5 _& i6 v* V# l! C9 ]
// By default, all `createActionForEach' modelActions have1 |5 G# G4 e1 }! C! ]' W
// a default order of `Sequential', which means that the
* J7 _$ a' T( e3 ]- B n/ a" \5 K // order of iteration through the `heatbugList' will be+ n" ^- R( {: E7 {3 ` \6 G0 L
// identical (assuming the list order is not changed
* l1 _ x* n; ~4 M' s% G- g; O // indirectly by some other process).1 ~$ t. l6 N$ ^' O; k+ c U4 s
+ T3 d" H5 ~# `/ X- m modelActions = new ActionGroupImpl (getZone ());% f" C- u: D' v% e
, o6 o; n, g+ t" r- n( A try {1 `0 t/ ]$ \' H4 o$ H9 ^
modelActions.createActionTo$message1 B' I G2 }7 I! J
(heat, new Selector (heat.getClass (), "stepRule", false));
[7 Q( L+ ?2 g- {+ Q' ] } catch (Exception e) {7 E. C" I3 g1 @7 W, |) E( S
System.err.println ("Exception stepRule: " + e.getMessage ());
6 H M; r8 e& A1 a- Q }
3 v3 u' B F+ {
$ t, I: b2 V; A9 o* F/ f try {
+ p( O2 `0 E j- Y7 T- d Heatbug proto = (Heatbug) heatbugList.get (0);
, g" l. n2 t$ d C. F( z Selector sel = 6 Z# I) ]- e) N: Q0 r) Z. P
new Selector (proto.getClass (), "heatbugStep", false);
! D% O) ~( j* Z. M" H0 H actionForEach =7 {1 h" S- }) O0 S9 S6 i
modelActions.createFActionForEachHomogeneous$call
N& b( M& `8 T* f6 o) Z0 J (heatbugList,
x1 w5 z! q9 r1 y1 {1 m$ X new FCallImpl (this, proto, sel,
9 R" q* e. l9 Y# P: _. `5 z$ G$ X; \ new FArgumentsImpl (this, sel)));; G0 j; m) ?) u* M
} catch (Exception e) {
6 n, v6 b/ o$ H) Z& `; o7 F e.printStackTrace (System.err);
8 R! @7 `$ M. s+ J }+ ^8 M& S. S ^% U& c1 v7 [
7 |" N3 N& I" _5 K* H, `6 { syncUpdateOrder (); t. `0 D7 ^* }* I7 A
; D# ~) ~" c2 j* p# ~+ _ try {( g1 P4 |2 x( v& h* v6 o! C7 h
modelActions.createActionTo$message
% R' q$ m6 M/ ]' q* ^ (heat, new Selector (heat.getClass (), "updateLattice", false));
: s+ t! v, S7 I/ X2 I } catch (Exception e) {
$ N; T' h' \" l. _7 ?* _; h System.err.println("Exception updateLattice: " + e.getMessage ());
9 ]2 B+ ] C3 \# e+ U }+ `. V( o9 I1 ?
" N" z$ }: x/ x7 e) ?3 g* s0 S+ c
// Then we create a schedule that executes the2 W6 R) @1 K5 {
// modelActions. modelActions is an ActionGroup, by itself it7 b( B0 m. C5 I: f4 }# I
// has no notion of time. In order to have it executed in p+ g/ [1 f* C1 V3 U) M
// time, we create a Schedule that says to use the
0 a1 F/ E5 r& z" W n // modelActions ActionGroup at particular times. This0 f n7 _; a4 _# U
// schedule has a repeat interval of 1, it will loop every
" N, p8 P! E. [( T/ M+ V1 W; l9 B // time step. The action is executed at time 0 relative to
" y, e% s/ G" \( p; A // the beginning of the loop.
" I# w3 O3 D3 f" X7 X7 E* A$ ]7 f [; Y+ h
// This is a simple schedule, with only one action that is6 E' Y* I; @, ^+ N! V8 z* F
// just repeated every time. See jmousetrap for more& Y+ y9 @, Z' X7 k7 i' ?. Y
// complicated schedules.
* l2 J1 ]5 d+ T: I5 t. j, C
( @; m' r2 \; ~$ V& h, C1 B* I modelSchedule = new ScheduleImpl (getZone (), 1);* T% o3 V6 T! Z+ S1 |4 g
modelSchedule.at$createAction (0, modelActions);, F# {8 x$ d# [. |, I+ Y
2 O% Z% S# I% m' S% `& ? return this;" D. Y; T. v+ E# I
} |