HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; W9 G: t- @9 i( |( C
; f+ n! ~) J, u' ] public Object buildActions () {& ^* R$ `5 f( @4 D# j, R
super.buildActions();
! Y" y4 [$ A7 G. G$ S! x 7 c! R, F3 ^) ]- W
// Create the list of simulation actions. We put these in
8 ~, \9 \0 p& O5 i // an action group, because we want these actions to be$ W, p4 u- n4 \: D- \
// executed in a specific order, but these steps should' [8 M' F; N( n6 D# U( O
// take no (simulated) time. The M(foo) means "The message
6 v, v9 U; Z! q4 g6 w5 O- F1 d3 x; H // called <foo>". You can send a message To a particular
7 s$ k: e8 p2 x$ h0 C4 R5 [' i // object, or ForEach object in a collection.
& n: i: o8 Q: Z, q/ [ 2 L! h5 ]( ~8 u& X; ^
// Note we update the heatspace in two phases: first run
3 h$ k, f4 s* g0 _0 X5 C n. R1 H // diffusion, then run "updateWorld" to actually enact the
! S- }0 _0 {- m! _1 k" U // changes the heatbugs have made. The ordering here is" Q! v7 s6 z' h
// significant!
9 V" \4 ^; o- | ! R4 v- k* B) i* F
// Note also, that with the additional
7 R l: B2 }7 N6 U+ ~! ~ // `randomizeHeatbugUpdateOrder' Boolean flag we can2 p+ s2 D* x" ^8 d; c! C0 u
// randomize the order in which the bugs actually run
* k7 z; B& }. f6 p% c3 d7 Q+ U$ g // their step rule. This has the effect of removing any* C% C I/ I9 X
// systematic bias in the iteration throught the heatbug
9 E. v/ G0 H7 `! Q // list from timestep to timestep% E% ?7 o5 Q8 P1 S2 v+ R
* M9 K! w) m' W0 g& Z% K
// By default, all `createActionForEach' modelActions have( g% d0 c( b6 @
// a default order of `Sequential', which means that the7 T: Y1 E! o, o: E$ a+ I6 q. U
// order of iteration through the `heatbugList' will be3 J) R D- ?; q- U7 s/ K
// identical (assuming the list order is not changed
, ?. q$ W. [& H8 j // indirectly by some other process).* B+ H5 w, s! S, t4 j, G
9 x4 A+ N0 |/ T/ w) @
modelActions = new ActionGroupImpl (getZone ());3 J) K- M: @9 s
- F& ^9 t5 r$ k, a5 E try {$ V9 \/ O' `0 j1 R
modelActions.createActionTo$message
; v* J6 `3 c+ {0 m w (heat, new Selector (heat.getClass (), "stepRule", false));/ O' |% ^9 y2 _/ K$ ^
} catch (Exception e) {
8 O* ^9 N E2 N6 W System.err.println ("Exception stepRule: " + e.getMessage ());6 ]1 R; D% w- o( a' H
}- S3 h* \" j5 ?9 u
) R- o0 U0 @5 ?$ k- W
try {" {0 Y3 m3 f* I; E" ^
Heatbug proto = (Heatbug) heatbugList.get (0);
% M% Y( ?4 K4 d! t& ]0 h Selector sel =
2 l/ N$ _% f9 e new Selector (proto.getClass (), "heatbugStep", false);, o& w$ V- U0 f2 |0 N" L
actionForEach = H- p: E" Q" l! O/ G- L
modelActions.createFActionForEachHomogeneous$call# i* j6 l5 W* ~6 \; }8 A
(heatbugList,
0 ]2 k6 U# `: B7 e O# X2 @ new FCallImpl (this, proto, sel,
$ ~9 q& Z- z9 A8 i new FArgumentsImpl (this, sel)));
. S6 k' D# G7 m& Z } catch (Exception e) {
" [% l. l5 m& I1 V e.printStackTrace (System.err);6 c3 A6 h; }" n. O
}1 J# m. R1 ?* @# b2 x+ c0 T! X3 Y
2 L5 b+ y, P# Z& {
syncUpdateOrder ();; c; [4 I. l) S) J S. \# w
* {1 s. I8 C1 I! Z: j! I/ u, \
try {+ z; O3 q8 B3 P! d- ]
modelActions.createActionTo$message
2 M: }5 M D9 x% i& f/ c! | (heat, new Selector (heat.getClass (), "updateLattice", false));/ R! ^3 `6 H$ k1 w
} catch (Exception e) {
3 b* m/ ~1 R0 ^" P' e2 h- V Y System.err.println("Exception updateLattice: " + e.getMessage ());0 y: l$ y+ o( B; m* B: p3 h" b ]
}
. g6 @/ N: s4 y& E% y 3 E4 }5 `1 m8 a, t- h) b
// Then we create a schedule that executes the5 v0 m4 O; o( I, B
// modelActions. modelActions is an ActionGroup, by itself it
* A2 Q" D" R2 Q4 q3 z4 L- b( F3 ^; x // has no notion of time. In order to have it executed in
5 `- y( ^! O; q& E8 M- |" Q // time, we create a Schedule that says to use the2 R1 d! m" G' U
// modelActions ActionGroup at particular times. This
& d) A `3 p5 ]# {. y // schedule has a repeat interval of 1, it will loop every! A. N X& P! I0 P
// time step. The action is executed at time 0 relative to# n2 O3 L% B- {/ i/ V X7 Y
// the beginning of the loop.7 t5 Y* a* ~ H! m" u
$ f6 `& {4 h+ C( [
// This is a simple schedule, with only one action that is
. ^" C) ^* X. L+ \% S" b // just repeated every time. See jmousetrap for more! q9 [/ m( U' B
// complicated schedules./ x& m! a2 H# l2 W
7 l _, ?: O' Z+ t1 Z modelSchedule = new ScheduleImpl (getZone (), 1);+ f6 i, K6 L3 |* e2 K1 T
modelSchedule.at$createAction (0, modelActions);$ A8 l+ s0 \' x8 w% s
U5 I& i7 P) E
return this;: T7 y* [$ D1 m: V
} |