HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
* n# ]) p; P" O0 j" X0 o" a' k$ S
public Object buildActions () {
W4 L5 q, M3 B8 f" m super.buildActions();
! T8 V, X! s; F! _5 H 5 o8 K3 D# J: ?' t
// Create the list of simulation actions. We put these in
5 ]& w4 k7 i8 x/ { // an action group, because we want these actions to be
( X- |$ ]1 n( _ // executed in a specific order, but these steps should
1 F, q; G( K, n9 w9 d3 l: m // take no (simulated) time. The M(foo) means "The message* f6 A* @ t2 v# n9 M' F6 ~
// called <foo>". You can send a message To a particular' r# i7 Q8 _- _0 j0 J" T
// object, or ForEach object in a collection.
/ g4 p4 h) C% t/ e. n* K + a% a2 P7 [/ X, U, H
// Note we update the heatspace in two phases: first run6 ~4 A$ r& u% Q4 U* g6 {
// diffusion, then run "updateWorld" to actually enact the
9 F) ?5 |+ m" o X // changes the heatbugs have made. The ordering here is. e: Y _ J5 A6 j. [
// significant!+ D( h* D& {; b B) L% s+ [
% }* V0 L/ O' _0 A9 k // Note also, that with the additional
$ D8 C2 s& f" |% r0 i5 t // `randomizeHeatbugUpdateOrder' Boolean flag we can2 ~9 ?7 K, E2 L6 m5 K) r: r5 u
// randomize the order in which the bugs actually run
+ U8 J. s; y' K; J# z# \ // their step rule. This has the effect of removing any! r& t' h8 E6 D+ ?: I
// systematic bias in the iteration throught the heatbug/ M1 t0 V4 d4 @9 g9 _, i
// list from timestep to timestep
' U5 F }' i; N1 j- U
9 w2 f, A. B" ] // By default, all `createActionForEach' modelActions have, u2 g0 f; H, B
// a default order of `Sequential', which means that the
, M! o; _: ?0 D1 f% v // order of iteration through the `heatbugList' will be' B' J9 U1 Y' \5 C% B
// identical (assuming the list order is not changed
" \& R9 {- D$ _. _2 `' K6 E // indirectly by some other process).& I) |1 e9 L2 D9 Y( W9 z6 G' R' m
3 Z( G0 v/ e- j modelActions = new ActionGroupImpl (getZone ());& T7 V6 N) k. \! \
. h5 d# N0 M! W# D5 \" P9 Q try {
! d6 x: z( z9 n/ I8 S modelActions.createActionTo$message
$ a" @/ S, I% n3 \5 K0 Y$ `' B (heat, new Selector (heat.getClass (), "stepRule", false));( W+ e9 U \1 Y
} catch (Exception e) {
" _6 I* r8 ?$ p+ ^4 r1 p, g System.err.println ("Exception stepRule: " + e.getMessage ());
* M6 g4 T: x' a! ?# i) }( h" t }
% {' o' A; ]- K e
7 P& a0 t; e. j6 } try {
, z f8 o6 H! M" n/ j Heatbug proto = (Heatbug) heatbugList.get (0);
8 D9 Z8 N3 r$ ?* _ Selector sel =
, p- \7 B, `8 m new Selector (proto.getClass (), "heatbugStep", false);# r- y7 v6 }9 w5 B' W2 q% N
actionForEach =
* \- I( J" y, M/ ~) F# F( O) R modelActions.createFActionForEachHomogeneous$call( m2 k! @: j: Q9 V5 `4 W$ I
(heatbugList,
3 |1 g5 U1 T! T& z% p" h new FCallImpl (this, proto, sel,
; N" s# w! w, S0 L6 ~" Y new FArgumentsImpl (this, sel)));9 D7 x7 d5 \+ A/ C7 {0 O
} catch (Exception e) {
" l" L% \& R! c& r# V% [ e.printStackTrace (System.err);. V7 F* E Z P) x" [3 i
}
: h* i; E# |9 e8 k
$ y: U9 W" }+ t E7 x syncUpdateOrder ();
# i- Z3 j7 M4 }) v! `; O2 p- H! e1 l1 O7 x r+ O$ n! g
try {; D2 S8 P {* @3 H3 s# p) R( J
modelActions.createActionTo$message
7 I, j0 m; O1 R( Y3 f, O (heat, new Selector (heat.getClass (), "updateLattice", false));" ]( n1 j+ R$ O, v/ O. |
} catch (Exception e) {) d' B0 b0 A; Y- g$ n
System.err.println("Exception updateLattice: " + e.getMessage ());) |; w. ^* g, o- [: M4 p& T# t- X4 ]+ q
}
- k* I) H$ r* W- ?6 b; f6 o: C : s2 T+ {. S+ {0 @; ?) O
// Then we create a schedule that executes the; b! p2 z- v4 z) x) m
// modelActions. modelActions is an ActionGroup, by itself it
! q1 U9 s2 b& F; X# E. _4 V4 e8 Q& q // has no notion of time. In order to have it executed in' _, j }! p7 |/ V6 x4 |0 I/ i2 G
// time, we create a Schedule that says to use the6 Z5 w* Q0 H; X$ p: ]7 x
// modelActions ActionGroup at particular times. This
% _3 i, L U; Y/ l4 m // schedule has a repeat interval of 1, it will loop every" F/ }5 d: x" z1 m) [
// time step. The action is executed at time 0 relative to
2 W2 m1 J* W% B. R // the beginning of the loop.
5 N& y/ W3 v) r4 Z) u3 s O: I) b# m" {; J
// This is a simple schedule, with only one action that is
. F( q' Z( w- t/ c& J // just repeated every time. See jmousetrap for more
! q% D e7 F( I& w4 Z // complicated schedules.' S2 T. N9 G1 t
8 r* W, N" M5 y2 c6 L modelSchedule = new ScheduleImpl (getZone (), 1);
! y- E2 u, l" _ modelSchedule.at$createAction (0, modelActions);
' j* a4 Q2 h) ^, R! b
! e( S! q. C/ k; a: j( \. V7 Y return this;
: S. K3 j4 l& ~, H# G1 @ } |