HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- M5 t+ `$ M, k/ D! q# E0 y! ]
- |; l/ b" ?" \' n
public Object buildActions () {
8 L6 e w# J) ?( ~ super.buildActions();5 O, ^* W+ H, `8 H* P
* c' z' l/ a! L' C: l1 y; k2 I
// Create the list of simulation actions. We put these in
3 w' H$ d" _4 P/ W# J9 U // an action group, because we want these actions to be
" V7 e* C- r+ R1 n( q2 R r2 ^7 v // executed in a specific order, but these steps should6 Q7 x4 H0 ?! S4 V
// take no (simulated) time. The M(foo) means "The message
8 ^' x, O2 h: f9 P i- f // called <foo>". You can send a message To a particular
/ R" [- D$ G3 B // object, or ForEach object in a collection.1 K5 [ [& C) [. q5 @ ?
: ?1 |+ ]$ ^- I+ C2 w% j
// Note we update the heatspace in two phases: first run
. J# z' A# T9 |5 _7 k4 U // diffusion, then run "updateWorld" to actually enact the% R7 R. i+ i/ B/ K" @# \
// changes the heatbugs have made. The ordering here is
1 z* W7 Z4 K) j // significant!
% B( r5 ]2 o$ {3 t% l, i3 c9 i4 s ! {% O1 t9 d. W8 q$ Z" i% i
// Note also, that with the additional
" h& X* L2 X8 N( L' Z" k/ E ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can m+ |5 i1 u8 z! ^5 L
// randomize the order in which the bugs actually run
% ^9 q' @8 r7 X3 E0 H( Y/ ~: j // their step rule. This has the effect of removing any
( Q2 S& o6 v: K# r" h // systematic bias in the iteration throught the heatbug
?; ~/ w, `& V8 ^0 b, {4 p0 v+ F0 L // list from timestep to timestep& h+ J& X; H% m1 K9 C$ F7 V: h
9 U8 {0 O" Q7 p) ` // By default, all `createActionForEach' modelActions have
3 z/ n, S- d. q3 E6 H4 k // a default order of `Sequential', which means that the8 l: D. E' @5 f6 b Y
// order of iteration through the `heatbugList' will be
9 {$ P. I( I6 r Q: B // identical (assuming the list order is not changed
1 u0 S1 J. _' m5 U6 [. h' H // indirectly by some other process).! N" [4 y$ w) \2 ?, @
5 ]& f) {* Q. f modelActions = new ActionGroupImpl (getZone ());
6 ]9 C: g7 \/ K' K5 c0 w9 S9 r1 i3 ?) K) H e0 @ ^' v# p
try {
. n- j( X+ V. { K* T modelActions.createActionTo$message: J o" v/ d' M: Z
(heat, new Selector (heat.getClass (), "stepRule", false)); s1 ~* p i' U8 W
} catch (Exception e) {
! z9 ?8 D, I( }9 R& L1 A/ x System.err.println ("Exception stepRule: " + e.getMessage ());
" O3 m4 V; X+ ~. E' K }
- s1 J, \2 N& I0 Z
& }1 {7 c4 b' q* H* h2 n try {, C+ k9 Y$ ?6 Q8 E/ B$ F7 C3 K
Heatbug proto = (Heatbug) heatbugList.get (0);6 @$ b- R) _! x& V
Selector sel =
( }5 a5 R' M. F9 i4 A new Selector (proto.getClass (), "heatbugStep", false);+ e* ~0 a# g7 d/ H; t" V7 k
actionForEach =2 Q1 W) W5 ]& U+ f1 i$ X
modelActions.createFActionForEachHomogeneous$call
" l! x8 |% ]0 F( Y! [3 I5 M (heatbugList,% X( E; V! U: g3 O; k3 P3 c
new FCallImpl (this, proto, sel,
1 `7 R# m" Z0 t7 |9 H new FArgumentsImpl (this, sel)));- z. {' m- ?- T; i
} catch (Exception e) {
3 B7 K& s0 P, C. c3 ~ e.printStackTrace (System.err);
* E8 ?( e- e) o7 `) x }
6 _. ^' N5 G; I% y* h$ h5 ]: Q * D$ `3 ^4 u3 e1 @9 b" g( X4 p
syncUpdateOrder ();; L( z/ k. E5 k0 j) D6 J+ B
: k# F' w7 u, i7 ` try {
8 ]: M* I2 |; h3 R; \ modelActions.createActionTo$message
2 g4 W3 {- R6 u (heat, new Selector (heat.getClass (), "updateLattice", false));
, T* p# g7 l4 s7 t& Y) g } catch (Exception e) {8 S+ z" p: `4 r6 M6 z, D; \
System.err.println("Exception updateLattice: " + e.getMessage ());
& ^1 C. p: H* z; h M( h! }* S }
: W! s+ D- g) y 2 n) U8 I& s9 o }
// Then we create a schedule that executes the! E. N0 @; S% K4 r
// modelActions. modelActions is an ActionGroup, by itself it
8 Z/ J P% ~0 G P# |* w // has no notion of time. In order to have it executed in _7 p( ]! l+ s4 r5 P$ @# Z
// time, we create a Schedule that says to use the
4 {7 Q& Z6 ?1 O // modelActions ActionGroup at particular times. This& S1 J9 _. C7 |% E3 ]
// schedule has a repeat interval of 1, it will loop every7 J( B3 Q: i6 {) {2 M5 B, {
// time step. The action is executed at time 0 relative to
5 ^* T5 Y8 B9 m) d' P* ^( d9 s // the beginning of the loop.
, ~& q, ^6 V) }( R: \: a* @; S3 f, a5 F
// This is a simple schedule, with only one action that is: Y- s- M8 f) U7 J; W0 j/ r
// just repeated every time. See jmousetrap for more
1 i2 z% C( V( Y( k& d // complicated schedules./ O0 j, R. ~8 C+ J/ ~9 `( s
# e( O; s) R' C& N4 O modelSchedule = new ScheduleImpl (getZone (), 1);. w5 }# W8 c5 R
modelSchedule.at$createAction (0, modelActions);2 ?# F$ m. H- C$ O/ H
+ q$ j% M2 I6 U. H
return this;
$ I) Q5 r1 a8 d1 `# O# l } |