HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 h, Q4 i$ D+ F3 K! ~ l
( ^- w o9 j# d) B public Object buildActions () {. ^' F1 P! z6 \: d) e
super.buildActions();* h- h; K& I5 ?; m
+ w7 V3 V4 Q# ~5 N% ]0 r5 @
// Create the list of simulation actions. We put these in- I$ n, A& U( x! B
// an action group, because we want these actions to be& k. p/ \" f8 D
// executed in a specific order, but these steps should
) s3 h; _8 J3 z& ? // take no (simulated) time. The M(foo) means "The message
2 K2 C; S3 K) f7 O // called <foo>". You can send a message To a particular0 a( M1 S) ^: W
// object, or ForEach object in a collection./ g) \9 h: h9 g
5 u7 D7 r/ n4 x. d: T# G
// Note we update the heatspace in two phases: first run
6 T- J2 @* o2 d- ] // diffusion, then run "updateWorld" to actually enact the' a! V, ~( a3 b7 z) q* G
// changes the heatbugs have made. The ordering here is
! L1 O* D, S! p n // significant!8 t4 p7 T5 _5 n
8 q8 x$ G! l/ U( f& U" ` // Note also, that with the additional" x8 E: E5 |5 i U2 F; W
// `randomizeHeatbugUpdateOrder' Boolean flag we can
7 ~. f/ N9 i; w" f // randomize the order in which the bugs actually run+ A1 T8 T2 ?0 i9 ]' l- P
// their step rule. This has the effect of removing any1 o: `3 F; o1 g6 j! k( g2 d' L5 t, P
// systematic bias in the iteration throught the heatbug3 p# J7 {* {& Z
// list from timestep to timestep
0 {/ |1 d, N* e+ U0 u% `( S
. _6 F' v! c% t e7 [8 M // By default, all `createActionForEach' modelActions have$ C4 o+ n$ p# V& {/ f3 K/ b
// a default order of `Sequential', which means that the
9 T: q% v9 N; i // order of iteration through the `heatbugList' will be! g8 M2 W5 e" G# I
// identical (assuming the list order is not changed5 }+ `+ y6 G I* z! h
// indirectly by some other process).* x9 J1 p3 V' ]) ?9 g
6 l( U. h+ ~) y# ]3 ~ modelActions = new ActionGroupImpl (getZone ());
4 o) y+ ^$ [* u% C! g" k! }
! s' j9 L0 s6 w6 n try {
6 j) [: @6 w2 N- ^ modelActions.createActionTo$message0 ]" K c5 f$ N4 D; J
(heat, new Selector (heat.getClass (), "stepRule", false));' v6 m: m; } J$ ]! N3 g, }
} catch (Exception e) {
. m0 Q( i: y$ x6 b System.err.println ("Exception stepRule: " + e.getMessage ());
0 e& ]# ^+ N& `; n }/ l2 x9 ]* M' I( \4 F
( F9 U5 _; T( h6 ?; {2 T4 M# ~ z, [ try {
% } f5 F$ `& ^/ n6 e0 w Heatbug proto = (Heatbug) heatbugList.get (0);8 e1 T; c4 Q; h5 O$ y7 p u% a5 f
Selector sel = 4 X3 ]5 G% B% |+ C
new Selector (proto.getClass (), "heatbugStep", false);
$ @: h9 |# U; w; h7 e3 C9 N6 ~* N actionForEach =
* u5 T+ ]& G3 U; X' u modelActions.createFActionForEachHomogeneous$call
, N! P2 T' o. @3 F9 }0 w! i7 d (heatbugList,
# J8 c+ J: K; Q! y- m new FCallImpl (this, proto, sel,# y6 w3 Q" a4 z" S. ^/ p* Z# n6 n
new FArgumentsImpl (this, sel)));$ S! |* b4 Q: v3 c
} catch (Exception e) {& Y4 U6 d- T* T2 K! ?
e.printStackTrace (System.err);
- \" r" u7 [0 ? }
3 `" s v+ }. k7 F3 W6 p1 u7 s . B% Q( s) z7 R/ h1 @# `# Z
syncUpdateOrder ();; b) m. ^* b1 D5 N
1 y1 m7 T; [: r
try {
" k; E0 t w1 _/ b2 h! T! ` modelActions.createActionTo$message
. j# C3 d" c" z) v1 T7 m0 h (heat, new Selector (heat.getClass (), "updateLattice", false));) } e7 [$ l6 l# g9 ?, H
} catch (Exception e) {2 j. t; ?/ b- z; r0 l6 \
System.err.println("Exception updateLattice: " + e.getMessage ());
" s, w0 H7 _/ H, Z! s }
$ k2 s4 i' k. ^4 p; z% Y * j2 C N3 b* C" _! t$ y
// Then we create a schedule that executes the
: v0 K% y9 ?. t* h // modelActions. modelActions is an ActionGroup, by itself it/ Z2 p) u) |/ s& \# a5 D$ F0 Y4 [9 ?& P$ L
// has no notion of time. In order to have it executed in& Q4 [: m# h! z6 {+ c7 y0 _% r/ K
// time, we create a Schedule that says to use the" {- Q$ W& {) Z* Z4 U$ _+ l
// modelActions ActionGroup at particular times. This
6 u- U7 h5 }+ O" C; k s // schedule has a repeat interval of 1, it will loop every S+ [7 z: Z9 T2 Q; Y' ?9 c }
// time step. The action is executed at time 0 relative to
8 f3 f& X, ?/ E3 D9 Y3 ~7 N // the beginning of the loop.
v4 q; L7 X6 j6 h6 D+ m3 ?8 z& |$ A
// This is a simple schedule, with only one action that is4 J1 U: X0 H' [2 t- R" _
// just repeated every time. See jmousetrap for more
9 [5 D/ R# B6 n, ^2 l+ Z+ P // complicated schedules.) C. H/ D- g% k/ M6 B
' v0 b( ^7 m/ y$ X
modelSchedule = new ScheduleImpl (getZone (), 1);, o% C! n( U( k" a
modelSchedule.at$createAction (0, modelActions);
( f: ~, D) [& I% k7 F 0 Y! h4 m; Q: n/ K5 c9 @
return this;
4 k. [* y" p) w @- H } |