HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
' Y1 e" |, I6 o# t! a9 M& r( V8 r" b' P, F8 d. p/ h! Z
public Object buildActions () {
0 l$ t1 B4 j6 j- E' F: t super.buildActions();
+ c3 u" O9 n+ T H8 K: d4 H; b
# U" G* V( O' P3 u3 a1 ` // Create the list of simulation actions. We put these in
. `; `! k c- A E# Q6 n/ q // an action group, because we want these actions to be8 h# \: a; u: A: K' Y
// executed in a specific order, but these steps should6 A0 [0 U6 ^# [9 _" `
// take no (simulated) time. The M(foo) means "The message" B. d( V, n/ o$ i- K
// called <foo>". You can send a message To a particular
5 p: }, e1 [1 I9 W" \ // object, or ForEach object in a collection.
' [: V8 l2 L, a' q
* j; v0 P8 R6 p // Note we update the heatspace in two phases: first run
2 L' F+ b) i w // diffusion, then run "updateWorld" to actually enact the
& f. m; s8 b4 _6 k' q5 _0 n5 n // changes the heatbugs have made. The ordering here is) L' I- b; [+ u
// significant!
: E( F, T4 U$ o3 o8 o% U: W
; ~6 P% j, B9 |/ y4 j& s* p // Note also, that with the additional0 z2 u3 g7 g. i; B0 Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can' a" R1 o4 Y( v6 U5 U
// randomize the order in which the bugs actually run* a9 t f& O! n" z2 G8 g: t( A( |
// their step rule. This has the effect of removing any: `4 {& E/ G. E8 ^8 E4 \0 o9 A! m- u
// systematic bias in the iteration throught the heatbug% Z5 {! M+ r$ ?6 _/ I
// list from timestep to timestep
e) P- _! B# N5 V
4 T" r0 J. M J% e3 t G6 n( ^ // By default, all `createActionForEach' modelActions have
, h& v9 i2 E% y2 h // a default order of `Sequential', which means that the" r( G: i! ?) Y+ @2 {
// order of iteration through the `heatbugList' will be1 J6 O; K- R* d+ J- L) _
// identical (assuming the list order is not changed
% C i( |/ H7 K+ \8 L // indirectly by some other process).! A: |( W, A+ G! b
" W" _; S/ l6 c# B5 W& N& |
modelActions = new ActionGroupImpl (getZone ());
' v# t! N+ B! h) ~7 o! ^
& ^/ I- [/ \$ y. r3 Z1 R+ { try {2 t/ I# e% S; E8 f' b1 j* M
modelActions.createActionTo$message
6 J* S! U9 F9 [' m$ n+ t3 {2 Y (heat, new Selector (heat.getClass (), "stepRule", false));# G$ Z2 V& n/ L
} catch (Exception e) { @2 y; `( ^* k1 D! P
System.err.println ("Exception stepRule: " + e.getMessage ());
/ I/ Y. C8 x5 z$ d }2 t L8 i3 @4 b
. @& ?9 u) A6 C* }
try {: ^2 y% J6 P3 M2 f$ S3 d
Heatbug proto = (Heatbug) heatbugList.get (0);1 d6 A( a. |) w
Selector sel = - Z/ f M+ `& A9 ?5 b" @
new Selector (proto.getClass (), "heatbugStep", false);
/ x/ w" N5 W+ y1 i5 X8 H0 d actionForEach =
) S, I( l) f, g1 ^( T& t modelActions.createFActionForEachHomogeneous$call
: Y3 T2 |# ~5 @0 H8 E (heatbugList,
! x- P; F% h3 z! l, @ new FCallImpl (this, proto, sel,
2 D; B2 z) v: I7 q new FArgumentsImpl (this, sel)));3 Z6 A m7 l b% q: A
} catch (Exception e) {3 D5 @/ @, L& v
e.printStackTrace (System.err);
3 W+ Y2 E& w/ u | }$ T( E* x4 y; S" \4 ^
* t7 {& V- H, A9 ]9 J" L+ w d syncUpdateOrder ();
|* s' A) P9 p. e7 C
$ C, g5 f2 D5 O0 }" V+ e( C try {
( c- y! h: f# o& p, l5 w modelActions.createActionTo$message 8 n9 |( ]5 R- ^9 I9 F" L/ M
(heat, new Selector (heat.getClass (), "updateLattice", false));
R7 d+ ?7 [! @( l3 i* F; N* B/ H } catch (Exception e) {
0 i: p# Q: f( t System.err.println("Exception updateLattice: " + e.getMessage ());
" d5 X8 z& D k. K* _* K }# g" z2 @ l/ v! e6 ^
# C! h R, w7 T // Then we create a schedule that executes the
+ c& O `7 |* o: C // modelActions. modelActions is an ActionGroup, by itself it
% P3 F1 h9 \4 }6 L$ r: E" q // has no notion of time. In order to have it executed in
+ G1 C* Q8 T; _4 A // time, we create a Schedule that says to use the9 M7 O6 I( v+ Q3 Z8 `! E1 Q& x" I/ [
// modelActions ActionGroup at particular times. This
# P+ c2 q* C: _5 [5 h! B // schedule has a repeat interval of 1, it will loop every
8 g7 |, t8 F2 \3 x8 w) w* ?# ] // time step. The action is executed at time 0 relative to
. j. a G* Z$ C6 h: B7 M2 s // the beginning of the loop.
" u: P5 L0 G$ H( T9 v, K( x
% V, ~7 \. U$ U" U // This is a simple schedule, with only one action that is
9 @) q4 h5 f1 ~& x2 z // just repeated every time. See jmousetrap for more' q% ?; z& X' T
// complicated schedules.
. q: U- Y1 m, n; g( u
/ T4 W9 D7 S L$ F* p5 l modelSchedule = new ScheduleImpl (getZone (), 1);0 t7 \# X6 o7 y+ E4 c" q
modelSchedule.at$createAction (0, modelActions);
, M4 I6 E5 }/ A- Q Z. q; V& Q 3 G" K" q; f" N& H* w
return this;5 e# w* M) P5 _) B, A5 t/ g; m, j
} |