HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, b* s' w! {$ G5 Y1 X$ W) z
/ g3 @0 M' \* P5 f0 B7 G public Object buildActions () {' m$ [( t9 ?, p
super.buildActions();# B9 k3 ]: a1 j8 i. h/ S% n$ z
# X$ I6 u. ^0 H2 v- q // Create the list of simulation actions. We put these in
: s! y! B6 e4 | // an action group, because we want these actions to be
- S- c' [) A+ o7 O6 S& y! @/ G$ J // executed in a specific order, but these steps should3 B$ e/ d4 |+ L3 t# R3 m
// take no (simulated) time. The M(foo) means "The message
/ d3 y/ U6 V( v u' h // called <foo>". You can send a message To a particular, O N3 H# L0 x# Q6 Z1 d
// object, or ForEach object in a collection.
: r9 x9 x( k/ c( d8 g! L- E 8 a- P' @) |* V( [5 m, s7 J& ~& d
// Note we update the heatspace in two phases: first run
' q! I- J( N& v: d // diffusion, then run "updateWorld" to actually enact the& N- q$ ~. R' A8 Y$ F
// changes the heatbugs have made. The ordering here is
2 G9 k# A+ N9 n$ O6 r! s+ | // significant!
( ]0 ?2 X* v; \8 U9 B
+ x3 z0 i# g: Y! h3 z3 i3 k: V // Note also, that with the additional# s7 G# h2 p7 B9 g' n5 ]
// `randomizeHeatbugUpdateOrder' Boolean flag we can
; R8 \/ B, c. z) L // randomize the order in which the bugs actually run
" ~$ W2 ^6 l! v+ s+ S# b // their step rule. This has the effect of removing any
! b( u! @4 r T, ~6 A# Y/ T' A0 v3 P# | // systematic bias in the iteration throught the heatbug; X+ t) z" y/ B/ b4 ^, T
// list from timestep to timestep
$ h! V4 q% ]: ^6 _ 5 K |+ x- R9 p6 V. w
// By default, all `createActionForEach' modelActions have
4 i; R8 r* Q- @, s6 m g. I; P // a default order of `Sequential', which means that the
% L, ?+ d. n2 ~/ R // order of iteration through the `heatbugList' will be
0 j* s1 g0 W7 F6 J! W2 K // identical (assuming the list order is not changed
j- [* U7 l K% {) @) x // indirectly by some other process).
" n% l4 Y3 w& Y' i ; E3 C; A# u) U
modelActions = new ActionGroupImpl (getZone ());
, O9 ] T" s; b7 W, Y2 n
5 F) J3 I0 n( Q- Q try {
1 ]& a7 l4 \. v. R7 G. f modelActions.createActionTo$message# J0 C4 j6 s+ H& i5 m
(heat, new Selector (heat.getClass (), "stepRule", false));
& Q5 v% |( z! j' G. s' } } catch (Exception e) {+ L: {- q& |# j8 b
System.err.println ("Exception stepRule: " + e.getMessage ());) \( j4 c$ b: v3 G( q& f$ T# m- M
}
1 D/ U# v6 { t G5 f$ o k% @
9 t" y, y2 }$ J, j2 g- F try {) f9 d; W1 j. N9 N% Y' j; v8 [
Heatbug proto = (Heatbug) heatbugList.get (0);) l" x% f/ I- _
Selector sel = + _ R! Y/ J6 m% Z7 b) P, ]# ~
new Selector (proto.getClass (), "heatbugStep", false);2 ^2 a+ d. X- Z& ?9 G
actionForEach =( W+ D% ]7 c. | B! |+ H
modelActions.createFActionForEachHomogeneous$call
$ |* f, n7 m2 g1 L- x, a (heatbugList,
D" Y9 ^* f1 c# b$ U* ]+ h new FCallImpl (this, proto, sel,, Q/ z I I) }/ j
new FArgumentsImpl (this, sel)));
3 H- o+ G& \% v } catch (Exception e) {- [) y# q& h, N
e.printStackTrace (System.err);+ J2 s8 K' V" O0 P3 D3 p% p
}
% N4 Q- Q; t! C% g: ` " ?5 e1 u/ a& i' a# Z) Q
syncUpdateOrder ();
0 R R- l" t! M3 s
, ]; x- D! D0 U, C2 a try {
1 U# r; s) d: U modelActions.createActionTo$message
7 m$ @% \/ T2 u6 N (heat, new Selector (heat.getClass (), "updateLattice", false));% ?# g0 z/ V! A' K. c4 L( F
} catch (Exception e) {3 P% L) }6 y1 M" r) G0 N! ]5 S8 a7 {
System.err.println("Exception updateLattice: " + e.getMessage ());
6 s4 Y c9 d; M4 Z% \6 B }$ }. Y% y9 y# ]/ P8 c# t+ y
2 o* n' T! a. H: }0 c% n3 H" I/ A) K // Then we create a schedule that executes the2 P9 X) U% _ E* ~: W( U
// modelActions. modelActions is an ActionGroup, by itself it: n7 v. e; h, P; Z
// has no notion of time. In order to have it executed in
/ g8 U- W5 D- X5 U& i$ { j // time, we create a Schedule that says to use the
# i5 C$ v2 ], J0 I4 } S" n // modelActions ActionGroup at particular times. This) j1 V6 K( n! ]- y7 [
// schedule has a repeat interval of 1, it will loop every; B, i/ o. v% H+ X7 {/ w
// time step. The action is executed at time 0 relative to2 Y; a# Y4 T# g& o. n
// the beginning of the loop.% |3 _+ p1 q) a( I' @/ x) u x- q
8 v4 S, V/ h$ A5 d
// This is a simple schedule, with only one action that is
: T; I6 M: ?) p0 F: F- [$ A // just repeated every time. See jmousetrap for more8 ^) r+ z( I3 M' M1 X1 L( p% S
// complicated schedules.3 Q/ R& m) [) a; V
; d' T! t; u# v( D
modelSchedule = new ScheduleImpl (getZone (), 1);" {7 b7 y4 I0 b- J4 I
modelSchedule.at$createAction (0, modelActions);+ m& F. I, F0 M, } T
+ `. _3 c6 c. U$ d' l, J; Z# b1 N3 W
return this;/ u- l: U+ b6 T# z* a) D% K
} |