HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
, c2 ^/ i/ t }% `
+ H5 `! L; x# F8 a1 F \/ i7 [ public Object buildActions () {) J5 I7 {1 i; h* F% d
super.buildActions();
9 J3 ^2 K1 W9 c5 \% Z/ I9 c 2 C+ F; s+ h/ |2 `4 w* D+ w2 T
// Create the list of simulation actions. We put these in
5 ?4 J; |; a: I, f // an action group, because we want these actions to be
1 ~ W) w6 o) q9 J // executed in a specific order, but these steps should
" c3 n8 h; t0 R; _ // take no (simulated) time. The M(foo) means "The message
. f6 m7 L+ Q ]- r( p% Z // called <foo>". You can send a message To a particular; E8 i# y5 h/ ~2 D1 s
// object, or ForEach object in a collection.
7 \6 M$ g m5 [# P
( t. o1 j9 X' H9 g( r s" r // Note we update the heatspace in two phases: first run
8 i2 D; j* x. F; Q // diffusion, then run "updateWorld" to actually enact the
' X, ]( l# Z2 Y // changes the heatbugs have made. The ordering here is
% n; N' ^" ]" G& a z! o // significant!+ m5 X) E5 N/ L, f
& B; _3 W5 T$ n, U // Note also, that with the additional2 O1 e1 i( w7 | g& V) J: K; i
// `randomizeHeatbugUpdateOrder' Boolean flag we can
& G- M9 F8 d! l // randomize the order in which the bugs actually run
4 [3 N- u2 B( ^" H4 j; b5 z { // their step rule. This has the effect of removing any9 [% ?) c1 u$ y/ }9 |
// systematic bias in the iteration throught the heatbug' ^' Z" j# u3 R( a `& {
// list from timestep to timestep2 D0 A d5 B# t& O
( W4 Z; C: O% E3 T h0 D( t
// By default, all `createActionForEach' modelActions have# K; z; f5 A9 {; u8 V' Q3 a
// a default order of `Sequential', which means that the) h: ^+ i- E8 j9 M; }, X
// order of iteration through the `heatbugList' will be# Z- V" U1 L& q5 r& s
// identical (assuming the list order is not changed8 B f5 C3 ^ \' K
// indirectly by some other process).
7 Q: s6 E. k0 T2 ^' y, @ z ! R- I ~& N3 d' u! y' {. K
modelActions = new ActionGroupImpl (getZone ());
" w, r0 @7 w7 y2 d7 c" T, I" U$ w V$ f$ e
try {
' B( d8 N/ s; j2 L modelActions.createActionTo$message% n, ? y5 C! X" Y
(heat, new Selector (heat.getClass (), "stepRule", false));
- c) K0 p1 |: n- r& c3 N } catch (Exception e) {8 O! x: ]% p9 E' h u+ i5 V
System.err.println ("Exception stepRule: " + e.getMessage ());6 C- [ ~5 \# M% B- f x3 r
}
3 h" X+ O5 e( G+ M2 b( q9 G: X w* @$ g z) Z: P
try {
8 r. Z) b6 \) j. v Heatbug proto = (Heatbug) heatbugList.get (0);
( ^ }) j) P5 E" i2 v' _ Selector sel = 2 k' w6 @) t3 q# P" [8 P
new Selector (proto.getClass (), "heatbugStep", false);
4 D) s; ]- b$ a& l actionForEach =0 [5 {/ _4 ]0 u( x& V: E
modelActions.createFActionForEachHomogeneous$call
9 i$ G8 r# ^3 S8 s2 S4 L (heatbugList,
' u/ {3 u" ~/ n, P& z; v( K9 q% Z- X4 R new FCallImpl (this, proto, sel,
( {. {" t5 O9 c. v" ^5 T, f new FArgumentsImpl (this, sel)));/ N, G+ F: M- {# F; d3 R, j
} catch (Exception e) {
$ n. M3 @2 p. X) e6 A: d e.printStackTrace (System.err);% w+ w) [4 @' H; N$ r$ v
}
& L# v) w4 Q1 v/ k4 [( b2 I g * C( U" m& m- L. {
syncUpdateOrder ();( V+ i- G6 V. z0 E" ~( H l
: s$ ^9 R/ x6 P7 ~. N, R. ] try {
! T4 h% G' B4 r1 R: h. z, X, w: k modelActions.createActionTo$message
5 Y8 j8 z- a' s; q+ {, |+ d( ?/ D (heat, new Selector (heat.getClass (), "updateLattice", false));
( r! u$ T+ k# q } catch (Exception e) {
# h9 m! g- \# L+ T; A' m System.err.println("Exception updateLattice: " + e.getMessage ());
: b3 B$ j- n% p, g b' l }5 d2 u8 Y+ ~9 ^9 k o" k+ R" a* o
7 N f9 ]) K# p& G4 {& _/ f. }
// Then we create a schedule that executes the1 \: h4 b* g8 j, H: \& {
// modelActions. modelActions is an ActionGroup, by itself it
5 g( K6 K6 n# h* W" r) P/ a // has no notion of time. In order to have it executed in4 g+ q4 L& \: ^# W3 Z2 C9 X
// time, we create a Schedule that says to use the
; h* z9 A# s$ `0 F; E# U8 a' ~. i8 ~ // modelActions ActionGroup at particular times. This: Z& @3 v/ @4 [( e7 c B
// schedule has a repeat interval of 1, it will loop every: W2 L$ g* l# p# S) y
// time step. The action is executed at time 0 relative to
5 h8 ?) V. L. f) g& b+ H // the beginning of the loop.
6 R! x0 D3 K9 P0 I7 U1 L' v% @ v( ^* S* l2 `
// This is a simple schedule, with only one action that is4 R1 \; w/ V3 w
// just repeated every time. See jmousetrap for more# C( e" D7 W; Q, F! A
// complicated schedules.; |4 F! u3 E! K; { z
' s2 P. W5 C$ ^4 Q" W1 p; Y. N( ~
modelSchedule = new ScheduleImpl (getZone (), 1);
& q. Q- N) _% M0 ^$ [7 j' i modelSchedule.at$createAction (0, modelActions);
8 u5 U/ S5 _/ ?) e - k7 k$ u) b" P) p* O1 ^9 [; X& ~
return this;
1 }) y, @: Z# C2 v; P+ P3 q ^ } |