HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:. v9 w0 A8 o6 \& [# [( V" F9 O
* d- q3 z/ M2 W% a9 _
public Object buildActions () {; H9 z3 n. @! q: E1 O
super.buildActions();
: ?) E( }$ p G$ G- H1 u3 i , d$ ^: i5 v3 ^+ N+ C" Z
// Create the list of simulation actions. We put these in5 z5 G; b" A, X1 k; Z6 O3 u, s$ T
// an action group, because we want these actions to be7 B! q0 Q: X5 ^8 y8 k4 t
// executed in a specific order, but these steps should0 b/ f& R: S. V& D7 j2 `% i
// take no (simulated) time. The M(foo) means "The message
( o$ V$ Y1 q }: I7 f. H // called <foo>". You can send a message To a particular6 C1 r# s9 _2 c8 V/ V
// object, or ForEach object in a collection.
) ^6 h: O8 j; B! L( d * M1 a$ M* }$ y" ]3 D
// Note we update the heatspace in two phases: first run
3 T% w# E- \# c: k- O" Q3 R6 _ // diffusion, then run "updateWorld" to actually enact the$ ]4 `5 Q, E" W8 ?7 y+ R
// changes the heatbugs have made. The ordering here is3 K B" W7 D! N& w* Y, i
// significant!
) _3 p1 ?: k. z. m3 z
- c8 v4 x3 A- o8 ]. T4 _ // Note also, that with the additional% p$ N( n! g: X6 P, S# A
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, O6 [0 Z, j9 C1 J! F // randomize the order in which the bugs actually run1 M4 `5 @9 h/ b" |( j
// their step rule. This has the effect of removing any. U6 U' i8 n5 v, o3 e
// systematic bias in the iteration throught the heatbug
* N& F, s+ O- J! Z0 ~ // list from timestep to timestep
6 h6 N, i5 u" N& y' y% t( j8 e" {
7 Y6 g" w+ m# x: f0 s // By default, all `createActionForEach' modelActions have. g" M% y- b, Z( N/ Z) o
// a default order of `Sequential', which means that the a, u q$ h. B9 M" l
// order of iteration through the `heatbugList' will be
5 M. g( @0 V7 _$ ?/ S* r7 e( W // identical (assuming the list order is not changed" ?: X w. b/ H m
// indirectly by some other process)./ L; A6 R) B* k) ^7 }3 f; y, [/ ^
/ [* ~7 x$ I) v; ~4 G k+ P3 \+ K modelActions = new ActionGroupImpl (getZone ());
5 _4 j% e* O5 @: r# \
8 p ?" y0 f' Q. a" x* }& p try {
, F6 }0 B, ]8 r. ]9 [+ Y! }* U* I modelActions.createActionTo$message
+ N/ \. [8 ?8 i7 i& u (heat, new Selector (heat.getClass (), "stepRule", false));
% k; G5 j% L+ I/ O X7 D9 v } catch (Exception e) {
* i- ~7 g7 V7 U* J System.err.println ("Exception stepRule: " + e.getMessage ());
: L5 c% o" ^4 t: x! ` }9 C- \) h+ v8 {, y3 [4 U
" a' j0 Y* H- U! _1 i8 W* @
try {1 [( p' x& d; O2 ]8 C% _
Heatbug proto = (Heatbug) heatbugList.get (0);
+ K% G7 e% |4 i4 G Selector sel = & X+ q5 E, | Y: ?$ A7 w
new Selector (proto.getClass (), "heatbugStep", false);
0 K) ?2 J/ m" Q# x, x actionForEach =
+ q# i2 z, l3 ?: f modelActions.createFActionForEachHomogeneous$call
2 C2 C6 J2 @# n9 z; T# P (heatbugList,$ x' `) x2 n% a2 I/ x
new FCallImpl (this, proto, sel,
2 a( U: ^: A3 N! [' Z0 Q new FArgumentsImpl (this, sel)));: n$ Z' q% T' d/ p
} catch (Exception e) {
6 M: o' P- l# w e.printStackTrace (System.err);
9 W$ U7 v7 P5 j; \: Y w }7 }4 ^1 x1 j! [2 L8 D
! q, w8 R" {* q9 q syncUpdateOrder ();1 ~ v* F3 Y9 F- i a
9 n# }$ m( {/ S" V6 Q
try {: B2 b- u8 |+ C/ v% i) }! E7 ?( W
modelActions.createActionTo$message : P. s$ L: }* S+ t& }
(heat, new Selector (heat.getClass (), "updateLattice", false));6 W2 k0 o& z. X- A; M0 i7 j% r
} catch (Exception e) {1 F4 U* o) j) j" @# z' X6 f
System.err.println("Exception updateLattice: " + e.getMessage ());8 }3 ^+ `7 G6 Z* S( X& b5 D% X1 d
}* _2 q, d# n' Q
2 z; g5 K1 W: t8 e( A6 Q$ ]* d
// Then we create a schedule that executes the
~4 o# v$ n7 a( f3 [# {4 X // modelActions. modelActions is an ActionGroup, by itself it
/ t" U+ J' B3 c7 }" c% P // has no notion of time. In order to have it executed in
% Z/ ? }5 j" ^' X# R // time, we create a Schedule that says to use the
$ v- W6 [4 O, [4 R. o( Y // modelActions ActionGroup at particular times. This
# x3 F. d% Q! ]7 Y5 j# R6 v // schedule has a repeat interval of 1, it will loop every
7 V2 w) y& x$ V // time step. The action is executed at time 0 relative to( k* d4 g; P t3 b) a
// the beginning of the loop.
5 V# I6 B/ s) a% N
: F) } i' n% G5 B/ z9 b // This is a simple schedule, with only one action that is- W3 _/ t# ]/ `
// just repeated every time. See jmousetrap for more! Q1 @; X+ l z# Q3 w
// complicated schedules.
6 f6 Z7 { `1 M7 o( d$ c4 W 1 H. O% I: M% P/ X' J
modelSchedule = new ScheduleImpl (getZone (), 1);
" O% p. U% [8 n modelSchedule.at$createAction (0, modelActions);5 f) `5 q1 x9 b5 {) d. x7 h' [
+ B2 {/ b8 x, P6 v6 y return this;
6 v7 e7 x! c2 q r! T4 T- ]' } } |