HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:9 k5 E( H( Y w N M
* z# u5 u Y1 g" }- I public Object buildActions () {
8 N8 q/ B8 M% g' V. a: y super.buildActions();
1 W' Q. T3 L/ A4 m" J, f% r 6 A2 ^4 u( e& X. P
// Create the list of simulation actions. We put these in
6 i: e) q/ u% ~5 l# M8 M // an action group, because we want these actions to be& u9 H% l: y7 w E3 i
// executed in a specific order, but these steps should
" P8 t4 w% t% c$ v& @4 p // take no (simulated) time. The M(foo) means "The message
* }5 Z: u8 I8 X3 [ // called <foo>". You can send a message To a particular
( u+ R, z2 E- v9 g# }4 P // object, or ForEach object in a collection.8 o2 S- o) d( \2 v# Z* |
+ [+ @) l& J: D. y) V" D' G+ ` // Note we update the heatspace in two phases: first run& s2 z: J$ R/ T, K8 [
// diffusion, then run "updateWorld" to actually enact the
7 l' y0 q- Y+ b8 F6 p0 S8 M // changes the heatbugs have made. The ordering here is' Z$ C' H; r- c& F1 f
// significant!1 X1 N! p& f0 H0 D" O. G: U( M
0 w# ]6 E a% \ R // Note also, that with the additional5 i, w$ N0 g' ?% Q/ E+ {
// `randomizeHeatbugUpdateOrder' Boolean flag we can
, a/ p% H* q7 n9 A; e2 v // randomize the order in which the bugs actually run
7 L3 ?/ @) t. ]& o8 I) h* m // their step rule. This has the effect of removing any* k7 Z) M- X! X% {: T
// systematic bias in the iteration throught the heatbug$ [% l# @( b. p. K
// list from timestep to timestep+ M$ c" g" c* G, h- v r4 ~
/ J& I+ r. X& V. |1 h' ~
// By default, all `createActionForEach' modelActions have. \' T5 b9 J6 m' A9 M2 j
// a default order of `Sequential', which means that the
0 s F i' F$ x7 G // order of iteration through the `heatbugList' will be: Q& ~ j7 C/ {: x, J
// identical (assuming the list order is not changed
; m" u% I9 b! }8 m1 a9 N // indirectly by some other process).
. _9 l$ G) S5 v
9 o2 [5 R' Y/ H. _- p7 } modelActions = new ActionGroupImpl (getZone ());6 F9 g0 B' U* P8 I4 R
1 A6 i/ E6 W" c
try {
# O: A, L: v( c) U; ? modelActions.createActionTo$message3 N% B" a; w$ m( w2 O
(heat, new Selector (heat.getClass (), "stepRule", false));9 Z. c+ r- T3 A
} catch (Exception e) {
5 O" K; V$ k, {% Q7 P0 m1 H0 _ System.err.println ("Exception stepRule: " + e.getMessage ());& r$ L9 w0 x7 f6 Z- L# g8 r
}
& C ^! N; i; U# ]3 S2 ?- Z" e- w. ~6 j7 E5 c( h/ M
try {
! z/ \# i: j! H, a: f Heatbug proto = (Heatbug) heatbugList.get (0);
/ i: n# {9 ^: y; c Selector sel = , k. ]' v/ z* i7 l! o
new Selector (proto.getClass (), "heatbugStep", false);
: t0 t7 {) ]+ z actionForEach =
, J* t$ C& }9 p' |& i* q modelActions.createFActionForEachHomogeneous$call. W& z; h+ ^$ \. _6 n9 y( q
(heatbugList,. i: `& Y9 m# I! _ a
new FCallImpl (this, proto, sel,
" u' R$ L1 P! I/ {3 c new FArgumentsImpl (this, sel)));
$ l# ~& O9 _ W5 d: ? } catch (Exception e) {. `4 V" j3 J; {" B* E
e.printStackTrace (System.err);
" A4 j q3 B. u N7 \% Z }
& N' T6 v9 i% b! z0 ^. u
, m3 I) w! N4 F% X; }7 q syncUpdateOrder ();
' P# [5 G. o, R1 |* o, `
. y3 B/ i8 h* s) I7 h2 y try {
6 b" F4 l* d: h! [* p" P0 @9 s modelActions.createActionTo$message
2 ~, f. A/ q4 U% Y* W: C (heat, new Selector (heat.getClass (), "updateLattice", false));2 e! I* ^2 @" B& d2 h
} catch (Exception e) {( W e4 z' M8 {8 P/ O! U' c
System.err.println("Exception updateLattice: " + e.getMessage ());
2 G; u, E) B) l/ q+ G8 n }
+ ^- K( |# j/ h, y, i3 W1 J$ p + w4 T+ J+ e6 x# t" u
// Then we create a schedule that executes the
4 D% J* P i0 d* d! Z+ ^& O: b& [& o; r // modelActions. modelActions is an ActionGroup, by itself it- y* Z# R9 `, o
// has no notion of time. In order to have it executed in2 g- b o- b, x5 o% k- g
// time, we create a Schedule that says to use the
0 I" H/ A# N; _# t // modelActions ActionGroup at particular times. This# S- T7 Z; V$ `2 J$ W5 M
// schedule has a repeat interval of 1, it will loop every Z1 g0 C# s4 f: L. Y8 e
// time step. The action is executed at time 0 relative to
2 o9 d1 b: V# l( W D# H // the beginning of the loop.
2 ^0 f% H. D9 A) r2 r0 `- I; u1 V2 d$ N: M: X8 a' k$ s+ [
// This is a simple schedule, with only one action that is
/ j; [! U5 Z9 c7 u; x // just repeated every time. See jmousetrap for more& S/ _* k2 K$ Y2 i. a
// complicated schedules.7 f2 Z8 B: k i) L$ J' z# a
2 [ C T1 y+ w9 M: b! F; f modelSchedule = new ScheduleImpl (getZone (), 1);
- ~4 Y( o4 e/ [5 g1 P" } modelSchedule.at$createAction (0, modelActions);5 A f( }! z7 A' `6 z
6 l+ W9 X: V4 N5 l. P3 z5 M
return this;
6 B s4 U2 \; G$ _" ]8 o3 e+ U9 g } |