HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
- ^9 U7 N' M2 t, w6 z, V7 }1 [
public Object buildActions () {
. |4 H* o0 O* n super.buildActions();: g$ ~! h# G# n/ @& z9 R% Z# _ z2 O
/ P; f) n9 n! R) t- u/ O/ j6 n // Create the list of simulation actions. We put these in
* @1 E; E/ B4 Q! |! j% h // an action group, because we want these actions to be& F* Q1 H6 z: _9 h
// executed in a specific order, but these steps should
[$ O$ b* q# p // take no (simulated) time. The M(foo) means "The message
/ }* f: F( G- f7 |$ M // called <foo>". You can send a message To a particular
$ j/ h" E D+ l4 @5 P) K) A2 R# g // object, or ForEach object in a collection.8 J$ X& C Y0 g; ~1 B, \0 [) z- `
( b9 Z# g: c O% | _( Y% W. l // Note we update the heatspace in two phases: first run
; n: M4 ^# T0 N$ [ // diffusion, then run "updateWorld" to actually enact the
$ a. J& Q8 H) N m& V8 ^: _ // changes the heatbugs have made. The ordering here is9 K. M. @0 G$ p( [) P4 z$ j: Z
// significant!
/ w/ K6 S* z6 x l/ B . x" Y# Y; u/ y/ h" _
// Note also, that with the additional7 K) H& t0 e; y& g1 K1 ?
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 u8 d- \& D1 P) U2 v5 x) M // randomize the order in which the bugs actually run
$ I/ I2 c% D- G' T, V; c# }7 m // their step rule. This has the effect of removing any; Q9 @, }+ m; `* \$ U
// systematic bias in the iteration throught the heatbug/ i* L* |1 @3 V& H* Y( m
// list from timestep to timestep+ I5 L' e# R) L: U" V
4 _2 n9 _5 {" ?" ?* C! \7 {. X6 e7 A$ [ // By default, all `createActionForEach' modelActions have6 v! V( i! r9 d% A' G9 L
// a default order of `Sequential', which means that the
" x% D4 G( J/ B/ X // order of iteration through the `heatbugList' will be3 a5 C' X4 H- o' x
// identical (assuming the list order is not changed
7 \0 y2 z! H. | r // indirectly by some other process).+ p ~1 h! Y1 f6 J, t' P2 H$ Z
2 R$ @3 |1 @) V' O
modelActions = new ActionGroupImpl (getZone ());. F8 \$ @: K. I& ^- M7 D
+ @. z! A' K/ ~/ \* X, F6 N try {& l/ a! r" G2 ~# |2 t" |* }, K% ]
modelActions.createActionTo$message
* `# q* r# Z! E( M' j& |, R, L J (heat, new Selector (heat.getClass (), "stepRule", false));
$ n! y7 Z: s. a' K, L } catch (Exception e) {3 ?) _7 I5 K9 D% A( e% ]) |
System.err.println ("Exception stepRule: " + e.getMessage ());
0 n: c. j( A, ^% ?1 y& K8 z }* z" C+ W4 n/ s) k1 ?6 j, w
) S9 x7 s3 d! u+ U& s+ Y, y
try {* |2 K$ E( ]" Y4 p
Heatbug proto = (Heatbug) heatbugList.get (0);2 Z- ?2 i! K9 Q# t! T7 @$ |
Selector sel =
* K7 q" w8 \6 V) n% a9 a new Selector (proto.getClass (), "heatbugStep", false);# g! |' }( F' D* K! K: L
actionForEach =
2 { J* Z% D l) C modelActions.createFActionForEachHomogeneous$call( f5 ^" e- F3 E
(heatbugList,: w7 y2 n0 p! A5 W
new FCallImpl (this, proto, sel,& ]+ S" A6 J) r2 w+ F
new FArgumentsImpl (this, sel)));% m C# ?! M8 G* p7 L X- d: O
} catch (Exception e) {
' X7 {) U2 V0 X; i4 S# m6 E e.printStackTrace (System.err);
4 K0 @$ z' M5 k6 t }4 [( Q5 c9 C+ t
- z8 }6 s" }& b: K+ Y: ]0 e syncUpdateOrder ();+ K7 S0 R& h) }6 ?0 ^; e* b$ ]. y
$ y; ~4 Q* z& k' K X; W* f
try {7 m" D( f$ Z' l" D0 H* n9 B" }
modelActions.createActionTo$message 0 p" i4 f+ B2 r" p
(heat, new Selector (heat.getClass (), "updateLattice", false));
6 \9 n" D: W* |- {6 T } catch (Exception e) {( h% ?9 Q. A/ F/ e
System.err.println("Exception updateLattice: " + e.getMessage ());
3 z# u- ~. G2 J }
- P( m% c5 u# F 8 Z* t8 B9 T. z; v' U
// Then we create a schedule that executes the
: f, K" B" J5 c, @4 v // modelActions. modelActions is an ActionGroup, by itself it7 B* U' U/ @, q% \
// has no notion of time. In order to have it executed in \6 y/ d. b# _9 @" r5 L, u
// time, we create a Schedule that says to use the/ y; V' n( N: Z/ u+ b& e5 @: l3 Y) @, ]
// modelActions ActionGroup at particular times. This, G6 k) ] n6 Q" l3 @" C
// schedule has a repeat interval of 1, it will loop every7 s2 j; U$ U- {& U6 E) ~% k, \
// time step. The action is executed at time 0 relative to
, p/ k5 M9 y/ R. p5 i+ m- @ // the beginning of the loop.
' Z, d5 f B" o1 g4 G
- s) d: q1 u* u0 \) w& n // This is a simple schedule, with only one action that is' g3 n% x# n, _+ q
// just repeated every time. See jmousetrap for more
. Y2 n) D ], l1 Y( T7 M // complicated schedules.
2 n+ i8 O5 l- x) W, Y 3 m7 W9 t) l+ z$ u/ U5 Q, p
modelSchedule = new ScheduleImpl (getZone (), 1);
; @- P/ `4 ?6 | B6 k) [! W* S) e8 f modelSchedule.at$createAction (0, modelActions);
) l+ M, x, ^8 `+ P9 ~" ?
: u' @8 X( z& f6 ] return this;
/ y7 I" ], D% N$ O+ v; u! {8 x } |