HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:: e) t" k8 {; H
7 t4 R/ j$ ^7 ]& S+ k/ K& t
public Object buildActions () {
4 `8 ?2 L2 v! e* {2 V super.buildActions();* v% {* w! ^& y" b/ x) O
1 m# [$ {6 f+ p // Create the list of simulation actions. We put these in
% A# H% I) V1 k I- Q* D. Y // an action group, because we want these actions to be
1 w% {3 B; {2 k- w // executed in a specific order, but these steps should
. a) J' N( T* y. J v' V: ^ F // take no (simulated) time. The M(foo) means "The message
% G, |; x1 l! [0 d* |0 | // called <foo>". You can send a message To a particular8 I2 U; p" ^" J8 c7 j+ \
// object, or ForEach object in a collection.
( M c- ?! [5 P/ W* P! y" C + [$ }+ Z" T/ I/ L. p
// Note we update the heatspace in two phases: first run: S/ o6 a5 l0 h, Y3 O) J0 ^$ G
// diffusion, then run "updateWorld" to actually enact the. B# T* q( S/ C! m
// changes the heatbugs have made. The ordering here is4 X: j' i+ d; Y$ V4 S( e+ p
// significant!% g2 t/ _1 u% u1 M1 r7 D# Z
0 ~, d6 o. z% b# E& G! B
// Note also, that with the additional4 @! b' M. h$ G) {* c5 B; b% Q
// `randomizeHeatbugUpdateOrder' Boolean flag we can; P: v6 W3 X8 S: G& M$ H) o m+ |
// randomize the order in which the bugs actually run
+ Z! K7 Q( G, D: e // their step rule. This has the effect of removing any
* `' y2 D4 Q1 ?9 @ // systematic bias in the iteration throught the heatbug
% E& o! Y9 P F# x" Y% f // list from timestep to timestep0 X% M4 w8 L$ N$ i/ v
f' c9 ?: M+ ~) w# n3 k // By default, all `createActionForEach' modelActions have( I+ R/ f; B$ g/ @& b: B7 S
// a default order of `Sequential', which means that the# ]# [% n/ e# c5 x: f
// order of iteration through the `heatbugList' will be
& o; d* `) A Z4 r // identical (assuming the list order is not changed
5 l7 l! t. f; t/ a- M% R( _ // indirectly by some other process)./ R6 b) j9 R# l; u3 |' p
) H4 r- D4 ^! {; H
modelActions = new ActionGroupImpl (getZone ());% M$ Q: w( b+ t; y
! ~6 o% n! ` o) Y
try {
2 a) Y2 U5 J$ t; P _0 B- \ modelActions.createActionTo$message( @% g0 |2 }. S+ X# \
(heat, new Selector (heat.getClass (), "stepRule", false));/ w, K5 q& p8 i
} catch (Exception e) {
2 ?+ H2 @1 P' U% v' Y. M System.err.println ("Exception stepRule: " + e.getMessage ());3 Q" q3 a8 U% Q* L! T7 O
}9 H; V, l0 `) i( h% g2 Z
$ G) C( T/ j" r7 m9 ~, C3 F, e try {
, g; E; _( b! a) C Heatbug proto = (Heatbug) heatbugList.get (0);9 M N6 u. m3 Q. e! W) s7 w: z8 o
Selector sel = 8 K: L; a& C- J: ]& P6 v2 ?5 m3 H
new Selector (proto.getClass (), "heatbugStep", false);
# \: H; v% v; b" r( B actionForEach =# e! V/ [+ U% g* O4 j" Y
modelActions.createFActionForEachHomogeneous$call
% l3 C/ s( J9 ` (heatbugList,
* r5 t0 A- f% y: b- L$ z/ [5 p new FCallImpl (this, proto, sel,' a0 V. n0 S6 ?; e& w
new FArgumentsImpl (this, sel)));; f0 [& Y7 D1 K5 ^+ N
} catch (Exception e) {+ Q% _2 P/ F# V9 l6 I' B! L* G: c
e.printStackTrace (System.err);$ l) G. A& ?6 L8 g: [
}
* g( s" |- }5 v; T0 Z& X
3 m8 u, B# Z9 R" M8 } B% A syncUpdateOrder ();9 A7 [9 ~, e- T" m
/ Z7 `$ {& q4 Q! }- L m
try {
" u! }( I6 x! [! K) Q5 V$ Q modelActions.createActionTo$message / |8 I) i4 j. o6 g
(heat, new Selector (heat.getClass (), "updateLattice", false));8 X$ f3 J% p; R8 u1 m9 M
} catch (Exception e) {- R3 ?2 E6 v% U c9 B1 A
System.err.println("Exception updateLattice: " + e.getMessage ());
2 y# h! A1 H5 v4 V! } }
- f( y- A' G. q( I2 t, _7 D( _; ~ $ R9 m* n! f" X( d! o/ m2 N2 `
// Then we create a schedule that executes the7 ~. a/ c: v" }1 C
// modelActions. modelActions is an ActionGroup, by itself it
- f0 }0 j5 W1 p // has no notion of time. In order to have it executed in
( E( O6 ^* j$ X. X // time, we create a Schedule that says to use the- Z8 s, J& S: O: |- |
// modelActions ActionGroup at particular times. This7 @( B0 X, |) I$ y% t- R
// schedule has a repeat interval of 1, it will loop every
* k* P* V, M# ~ // time step. The action is executed at time 0 relative to& h! b* U, u9 M+ ^. j+ E2 N. l, j1 x7 F
// the beginning of the loop.
: q' T9 m7 K4 I5 X% H- l( }& o2 y! [* U7 x* a1 V. M$ b
// This is a simple schedule, with only one action that is
' f D% p# u; d$ Z // just repeated every time. See jmousetrap for more1 C% \! Z- n M; Z D2 k
// complicated schedules.: n7 u8 w b; K4 s$ T+ z
9 J- F2 R1 T0 d8 y: Y* w modelSchedule = new ScheduleImpl (getZone (), 1);0 L& U4 ]' j8 S/ K. f( u! }; a
modelSchedule.at$createAction (0, modelActions);8 Z$ r8 H- Q, j; }* W
2 T0 R: k% j/ C# f1 ?0 D return this;9 ? ]& P4 j5 _' \
} |