HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
3 t6 h& r; d, V8 W
" C; \8 _! }% Y* I/ [ public Object buildActions () {
3 I1 f2 @ H! O. Q* P+ o* ? super.buildActions();6 }# U4 b a z3 a* K: y9 a
# ?- @2 u8 u# a1 [
// Create the list of simulation actions. We put these in8 |; M1 C! ~& d, E1 z+ H6 }+ N
// an action group, because we want these actions to be& I! ^% |; x7 }* O* N/ W! b
// executed in a specific order, but these steps should
$ H0 u; p/ {+ S: @ // take no (simulated) time. The M(foo) means "The message
' C" |& T' Q6 p- v. D: J5 n9 H // called <foo>". You can send a message To a particular C8 W6 p0 W1 l1 a, C w
// object, or ForEach object in a collection.0 C; [1 T. P O' w% u' F
3 ]& }+ O1 l8 W2 h& K // Note we update the heatspace in two phases: first run2 X$ q; ]' E1 U6 f
// diffusion, then run "updateWorld" to actually enact the% t H: J0 a7 {* C T
// changes the heatbugs have made. The ordering here is+ G5 {' y( ~& b* n6 ^
// significant!; D8 }$ q- ]' N3 P! h
& N: N" T1 w7 \- V! r; w
// Note also, that with the additional
) a* j# k5 G- E, w/ s! W* v1 Z // `randomizeHeatbugUpdateOrder' Boolean flag we can
- M& ~/ o/ j' @ s // randomize the order in which the bugs actually run' Q: ~9 J+ B8 K/ s
// their step rule. This has the effect of removing any8 n: b: E/ I6 m- Y2 z. g& n$ z
// systematic bias in the iteration throught the heatbug {( X2 ]3 F* } |
// list from timestep to timestep0 N7 s2 n( Z" a4 J" m" G
" Z( f1 ~) T" ?# B c' {. D, s2 k
// By default, all `createActionForEach' modelActions have
1 T3 B0 }# g6 [5 j K3 G- K: @ // a default order of `Sequential', which means that the1 u3 m; ]: J2 K0 b
// order of iteration through the `heatbugList' will be% t" X2 G$ r/ X5 U* ^6 w
// identical (assuming the list order is not changed
/ G" C4 k- u, w+ @, a* D // indirectly by some other process).+ U/ Q' o8 t$ d( S" H
+ i; u6 N. a. Z4 @ |& [0 i9 c; t modelActions = new ActionGroupImpl (getZone ());
8 s6 ~' l0 @/ `$ L) U
) Q8 ]& n' i& |( M$ e try {
1 A" Y$ ?/ ]7 e" R. [ modelActions.createActionTo$message
5 M4 S0 b% I( | (heat, new Selector (heat.getClass (), "stepRule", false));
( K, J/ N2 V: v- L$ s; n% F } catch (Exception e) {
6 M8 O) v5 A* M4 K! ^ System.err.println ("Exception stepRule: " + e.getMessage ());
& ^1 E% ?# s" t% c4 e8 ?, b }4 f# M& Q% M- ^# k! ], f. K M
: y; X! z6 X0 B% o: D2 V6 Q. g
try {
$ B+ `! y/ w, n+ Q; \ Heatbug proto = (Heatbug) heatbugList.get (0);
; \! k$ H' u; Y. j" n Selector sel =
' Q9 s- h6 L8 F8 ` Q new Selector (proto.getClass (), "heatbugStep", false);
+ z0 @; f& C- h actionForEach =6 h! z5 n% q# r8 @/ Q4 c
modelActions.createFActionForEachHomogeneous$call
8 G5 X# \7 x i: L. \- } (heatbugList,
" c- H3 l8 \) a# s new FCallImpl (this, proto, sel,
$ _3 E; Y* j5 l/ i- \8 \9 q: N new FArgumentsImpl (this, sel)));, C. U! |9 a8 F% I% n8 j
} catch (Exception e) {
) z8 o1 ~. y l( I: \ e.printStackTrace (System.err);, Y7 A6 k$ T5 ?' j
}
+ f2 W, x" G9 q. h4 L1 d( t
) t2 `5 u) O3 Y7 ]3 p+ p( I N syncUpdateOrder ();- W! X8 Y: i- }( v
# v5 E5 J1 w |+ t+ R; P# f5 l try {
B) ]; j9 |# J/ \: e I modelActions.createActionTo$message / n* Q2 g& @5 r6 E' K3 g& V8 Q
(heat, new Selector (heat.getClass (), "updateLattice", false));
% @; G* |# l7 ?8 B$ G8 m3 u } catch (Exception e) {
: u4 `- E% {0 t/ j$ y System.err.println("Exception updateLattice: " + e.getMessage ());; {9 B, {0 G/ X1 n+ E
}
: K0 Q4 R4 e$ s6 W' l# [ 1 ]0 ]3 S: i- m3 v+ D5 R1 ?3 D2 a/ t
// Then we create a schedule that executes the) W$ G; X, H4 N+ o3 s
// modelActions. modelActions is an ActionGroup, by itself it w* ?* i5 f& w
// has no notion of time. In order to have it executed in K0 @6 S/ t7 b8 y1 ]( ~
// time, we create a Schedule that says to use the
4 ?( P' m S3 f M) U // modelActions ActionGroup at particular times. This
& f4 t' |3 ]7 u" s. [% K // schedule has a repeat interval of 1, it will loop every/ v! o3 D) ]" P7 Y2 j* D
// time step. The action is executed at time 0 relative to1 t' D2 B4 u) i/ w; R
// the beginning of the loop.
& e5 l3 C6 D: G3 x f- x: ~ p# q& C0 o
// This is a simple schedule, with only one action that is
: m. Y3 X: e. b, J" s7 i9 \ // just repeated every time. See jmousetrap for more
6 Y" P! c h3 p1 P& T' c# x // complicated schedules.
" {) B) h3 a t5 ?0 N, h 2 }; W8 a( V7 F& W7 @: S1 Y
modelSchedule = new ScheduleImpl (getZone (), 1);6 @/ v5 v" [, k
modelSchedule.at$createAction (0, modelActions);: ]. l f8 P& B9 ^# x u0 v
, X; `1 F; S* k3 F
return this;) s1 @ I! M6 u/ A
} |