HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:, g' X3 v+ u7 J; _# r6 T) Y. I w0 O" g
! o* X) V- v8 y5 |9 q5 i- o3 p. C
public Object buildActions () {. P* S ]$ z( `- F* [/ y' \2 S
super.buildActions();
* k8 j& [6 H. d7 v- G1 T% d8 [ * A% }& b. a! V- v( r9 g# @- o
// Create the list of simulation actions. We put these in+ N2 E. Y% k4 m
// an action group, because we want these actions to be: n6 F! N- `% |4 r; w0 v- I$ D
// executed in a specific order, but these steps should3 K/ y4 u2 P0 J: a! n; L2 G
// take no (simulated) time. The M(foo) means "The message, Z# U9 C' n' [/ I4 t2 [
// called <foo>". You can send a message To a particular
# `0 _6 s( i1 y# c( Z+ S; V // object, or ForEach object in a collection.2 o& Y" ^: o9 ~6 W& M
* G& E6 p7 T$ [4 q6 T) K // Note we update the heatspace in two phases: first run9 u ]' S! v& t& e
// diffusion, then run "updateWorld" to actually enact the
8 i$ H3 C! P( S1 |2 f6 f- W // changes the heatbugs have made. The ordering here is8 E P7 k' v& }: M- R, F: f* a
// significant!
% G) w/ u- f3 ^) p0 }
% ~3 u( u: }% B' \) M // Note also, that with the additional
7 x2 ~ J( |1 L* E. C! h: u // `randomizeHeatbugUpdateOrder' Boolean flag we can3 H5 [. j2 {! @; L) c
// randomize the order in which the bugs actually run2 a+ W0 ^! l5 i8 f( \. y
// their step rule. This has the effect of removing any' M6 x. m4 z0 r0 m# ?' J
// systematic bias in the iteration throught the heatbug( k! y' t- i2 c }
// list from timestep to timestep
2 z' \. w8 h& g3 `9 @) A
1 {" ]% Y3 f+ @$ h1 e% F // By default, all `createActionForEach' modelActions have# Q& T8 b, f# S
// a default order of `Sequential', which means that the
! i( b' Z9 M8 ?3 t1 B // order of iteration through the `heatbugList' will be
) s: T2 N" p; A$ `" E+ g0 _7 a) L // identical (assuming the list order is not changed
( _ w! z: C4 P- X+ ] // indirectly by some other process)., a. u7 ~) ^$ g& b' p
0 ~' q, |0 }4 r& V+ W- h1 Z
modelActions = new ActionGroupImpl (getZone ());9 ~' B/ k* e8 Z5 Y: _
$ @# H3 G \# \
try {
4 y, b# v9 o7 I0 p) E7 l* b8 s; C modelActions.createActionTo$message" z# _' _( x( b, A) W2 n2 d
(heat, new Selector (heat.getClass (), "stepRule", false));: {0 q* e) h, E$ y
} catch (Exception e) {2 Q, L7 G7 x' B( Q# }1 E$ d, f/ F
System.err.println ("Exception stepRule: " + e.getMessage ());
- T( u2 w+ a+ \8 j1 s1 y/ R: ? }- l. v9 V( V; T+ Y1 c
# r) w" U t8 O
try {! r7 ?8 V* j: e4 U$ ^
Heatbug proto = (Heatbug) heatbugList.get (0);7 u/ W! ~. s0 \8 \) r
Selector sel = 7 n: w. k( R" t, G( S
new Selector (proto.getClass (), "heatbugStep", false);5 @6 ^. S3 k* d+ a- y
actionForEach =
; S; j9 q% W% {1 p" d0 e modelActions.createFActionForEachHomogeneous$call2 X* h# a7 ~" C% u4 A0 F( X
(heatbugList,3 I# W' U) {6 ?
new FCallImpl (this, proto, sel,4 Q6 z: d3 U8 c
new FArgumentsImpl (this, sel)));
* _5 I9 i: a1 p+ B- U } catch (Exception e) {
6 h1 K/ u# K# \( H: Z& t! S) p e.printStackTrace (System.err);
$ ^) ], _7 f8 b# N8 `! f1 Z+ e- P }7 R& `% ?: z6 ^( Z- n3 U% h2 ]
% l. ~( f& E! ^ c# D
syncUpdateOrder ();
( W ~ s* l! e0 Q3 h* H& t
1 Q1 L9 h* L' x try {' s" ]+ k) A, c& ^ m) j# H2 C% E
modelActions.createActionTo$message
G1 ]7 z! d) R& P7 B- S (heat, new Selector (heat.getClass (), "updateLattice", false));4 }( }# @ r/ V9 q4 i
} catch (Exception e) {
8 c; F ^ f" Q) M; T* t System.err.println("Exception updateLattice: " + e.getMessage ());
! c/ {" ?3 `7 Y/ g" ]2 ]4 o }, t: f/ Q9 O, E9 t
8 p ?& {5 I- \$ O+ b2 T: e
// Then we create a schedule that executes the
5 l; B$ y5 [! R! L& ~3 O( z: y" P // modelActions. modelActions is an ActionGroup, by itself it
! N: \: h. w$ v$ z; Q // has no notion of time. In order to have it executed in
4 m! T$ B; ~7 N2 X1 s6 o; i$ z8 A // time, we create a Schedule that says to use the
0 y( _, N$ V/ P& z // modelActions ActionGroup at particular times. This& I, z# P5 Z- m q6 v
// schedule has a repeat interval of 1, it will loop every, p6 Y |0 p, `# @: Q3 J2 N: x
// time step. The action is executed at time 0 relative to. M- m% C+ A1 e" m8 ~( `
// the beginning of the loop.- R/ ]( N4 R% C) N: V& _
/ f9 K0 W( \* T4 M. V, S1 b l6 A8 C
// This is a simple schedule, with only one action that is
% M$ u" ~2 D( ~3 Q2 F // just repeated every time. See jmousetrap for more( D7 W3 ?7 j: j" f- _' _
// complicated schedules.
& B$ k, J; V5 D& ^8 \ ' h) W6 F3 z" |& l) J% {( p
modelSchedule = new ScheduleImpl (getZone (), 1);% w: M# H" c5 U" r- E
modelSchedule.at$createAction (0, modelActions);
" v) w% L5 m& j8 V5 o' n ! g: a, w" i. g5 @" F5 L* q
return this;% ~0 h7 i2 R% w7 t& r" ]6 M3 R8 O
} |