HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:' t' D. _0 r( h$ s
3 u4 B- a. a% s5 a
public Object buildActions () {
6 S ?, \* [/ B/ b/ r: D& j% Q2 N super.buildActions();% S' T# P3 P! R
; ~8 b! D0 j- ~9 M
// Create the list of simulation actions. We put these in
% c1 x7 H& y) n1 b: T // an action group, because we want these actions to be
" `# z! j9 R/ N# x0 u+ q0 B // executed in a specific order, but these steps should
! _1 ^" r7 W) O) |6 g+ N G // take no (simulated) time. The M(foo) means "The message+ {. Q* A ]+ B% z; h0 m
// called <foo>". You can send a message To a particular5 i" ~* X A# K" }8 O: q) i
// object, or ForEach object in a collection.& Z& F4 R% Q L1 w7 P/ G& b# B) s
5 H; f$ T; m, }; o! m4 J // Note we update the heatspace in two phases: first run
$ E. e# o8 {- b7 [ // diffusion, then run "updateWorld" to actually enact the2 M/ M/ z5 [! Q8 Q# g8 M
// changes the heatbugs have made. The ordering here is
5 c. w$ `9 q& v4 c$ J l/ H2 w // significant!
% ~3 J. Y9 Z( |7 X8 G; }) E
" p+ r/ q% q1 [ // Note also, that with the additional
$ ?* M# b5 A( }7 v& `9 ` // `randomizeHeatbugUpdateOrder' Boolean flag we can0 V+ n2 Z: @6 u/ E- n
// randomize the order in which the bugs actually run6 g( B5 I9 q: `) t" Y# z
// their step rule. This has the effect of removing any7 B0 Y0 \/ u0 l$ e
// systematic bias in the iteration throught the heatbug
& h& i! h: R& _9 j k // list from timestep to timestep- m9 D d. f5 X+ b# l( Y
' `5 h P' q7 q // By default, all `createActionForEach' modelActions have6 s e$ v9 z! t
// a default order of `Sequential', which means that the0 n# [" Q. P$ H% f
// order of iteration through the `heatbugList' will be" o; B7 r' u, @ L' c2 V
// identical (assuming the list order is not changed- X3 j9 l J! X& ?) G7 p
// indirectly by some other process).% a$ u% e- D- E7 r0 x1 g" j0 A
* b; O$ i+ ^ Y+ e
modelActions = new ActionGroupImpl (getZone ());* ^: ]. @( `: l$ S% k% K7 S
' }1 h% G/ D$ R
try {) Z* ^/ N8 x+ r: G2 `3 g: H
modelActions.createActionTo$message
6 ]% _+ [4 ~' | (heat, new Selector (heat.getClass (), "stepRule", false));% n$ ]! C8 ~# ~% }9 g d
} catch (Exception e) {
+ r* t2 p8 n1 t3 u( |6 p System.err.println ("Exception stepRule: " + e.getMessage ());7 K; ? \, u3 |% ~4 ]
}
. _5 H) X! ~ @1 r2 K4 H4 a6 }3 z6 _! O1 w6 P$ C
try {$ F/ O+ @' Y7 y
Heatbug proto = (Heatbug) heatbugList.get (0);
& |! m4 i% Y% V# e) Q* r Selector sel = & O3 u( h& A6 o9 P
new Selector (proto.getClass (), "heatbugStep", false);
9 D' t0 ]! e" k actionForEach =
D. f3 r9 q+ @& G9 F: m, _/ V/ s modelActions.createFActionForEachHomogeneous$call# D9 Y; |/ v& _! |8 H
(heatbugList,5 {0 }/ n! |: q6 Y! J) N1 v
new FCallImpl (this, proto, sel,9 j/ A6 G3 v( ^; ]1 X. b
new FArgumentsImpl (this, sel)));
$ M A; E5 c. S2 q/ {/ I$ M } catch (Exception e) {
' @- g+ e# p) } ~. w e.printStackTrace (System.err);5 g) |+ W+ e* K8 ?3 @+ l
}
, d! ~% D0 Y# R- [* \
# D# e2 q4 e1 q$ H syncUpdateOrder ();
, x [! X' A& K" C1 M' }3 j8 F! |9 h* q0 H8 j- U9 ?4 q" u2 I
try {' k3 {5 u4 k' W
modelActions.createActionTo$message Q3 k5 s6 K( \
(heat, new Selector (heat.getClass (), "updateLattice", false));
8 y# ~- b: L0 y4 P+ d3 Y9 Q } catch (Exception e) {
( c4 q/ T# x) g( C# S( K System.err.println("Exception updateLattice: " + e.getMessage ());0 @$ d9 T6 c5 _6 ~( ^0 Y
}, L5 p+ g- N+ U: I' ^
+ `2 _& K, k' z" ^9 V% Y9 T // Then we create a schedule that executes the
n& S7 H* O7 T+ S$ V3 c2 x // modelActions. modelActions is an ActionGroup, by itself it
- f( X2 R3 \8 x6 l9 S; e // has no notion of time. In order to have it executed in5 l8 M# G9 ^: t H% A
// time, we create a Schedule that says to use the
3 c7 [% n) }1 a // modelActions ActionGroup at particular times. This
. X8 K& l8 V9 j! y/ _. ^9 q! |: \0 r // schedule has a repeat interval of 1, it will loop every' |# E Q$ _" p! N: f5 S
// time step. The action is executed at time 0 relative to
5 t5 _) {6 V" k ^; c0 ? // the beginning of the loop.( F# H# _! J: P
/ m- ^: o( K6 f // This is a simple schedule, with only one action that is! W. R1 @. S: W! w2 W. Y3 b
// just repeated every time. See jmousetrap for more5 b3 U/ S! U; F# q' o0 {! d5 e- @
// complicated schedules./ O+ {( s( O+ G! ?& P0 G7 H( J( M
! f+ R. w/ e- {6 t
modelSchedule = new ScheduleImpl (getZone (), 1);
4 `- D) i! i# B) _3 {& P7 x modelSchedule.at$createAction (0, modelActions);/ ~. m1 q, o1 K3 \
+ r9 ~1 o/ S z* P
return this;& ?3 Q0 O. X. r) h, D0 {
} |