HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:8 Q/ M5 P$ i4 E, n6 S
% X8 }, ? d' N0 W" y$ P
public Object buildActions () {9 K5 q" K, f# g. i7 [% s1 Z
super.buildActions();4 C% Z% _7 d. l
* V- F# X8 _2 v/ S
// Create the list of simulation actions. We put these in: Z! m; c: J; m' D7 A3 s& n
// an action group, because we want these actions to be
8 j* e) c: i$ U1 \+ d8 M7 ]- W; p // executed in a specific order, but these steps should5 Z5 ~: _2 ~8 j, T% g6 g1 S3 {
// take no (simulated) time. The M(foo) means "The message* J; z3 L0 ]0 Q# |8 o
// called <foo>". You can send a message To a particular4 Q h( x& q% `/ Y* T) b5 O
// object, or ForEach object in a collection.1 K- n5 R# i: o! D7 E# z
- v/ k; f2 Q4 h$ K
// Note we update the heatspace in two phases: first run* i+ c7 ?3 I% @0 ^
// diffusion, then run "updateWorld" to actually enact the
# _+ W) q, B" Y" {( b // changes the heatbugs have made. The ordering here is# m2 y* [" j3 |0 j
// significant!
3 h& d/ r6 [' F/ d2 T; g! B 3 W! w* l5 u4 v3 [
// Note also, that with the additional; B$ x5 L0 |) h* s) [# A; a
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. d* [3 |2 T+ `/ X+ N6 E // randomize the order in which the bugs actually run6 t/ j$ ~+ Q3 I+ k- h/ g
// their step rule. This has the effect of removing any& w5 R6 [ t* E' Q9 I1 u
// systematic bias in the iteration throught the heatbug
! j* Y) c( Q) g9 m // list from timestep to timestep% i; R& w/ ^3 s7 B# m7 S: x( K/ u
# z5 P4 {$ f+ t
// By default, all `createActionForEach' modelActions have
" _' W3 L- ~' j+ A6 k. g+ ~ // a default order of `Sequential', which means that the
, k. L' m; W+ x( h# {8 q3 a4 t5 i // order of iteration through the `heatbugList' will be# H- W! F: F8 F; c' s7 I3 u8 L/ R1 B
// identical (assuming the list order is not changed$ M* Y. a5 `5 }3 y6 d
// indirectly by some other process).7 N1 Z. o; s V& k
- e; e' \9 [: n! ~6 q+ R6 a7 i
modelActions = new ActionGroupImpl (getZone ());
6 b7 a4 ?5 B f' p, I4 e
) \/ j! |3 Y% \0 `* V( ` try {% w7 \3 R9 B; b# c
modelActions.createActionTo$message
# @9 Y# P+ |0 d0 P (heat, new Selector (heat.getClass (), "stepRule", false));
# O: V0 D z" j: C } catch (Exception e) {
& m4 ]' H: Q0 g% t System.err.println ("Exception stepRule: " + e.getMessage ());7 m+ M9 y' D' K+ M9 y0 u5 n
}/ [1 m6 B9 c( ~* W* L6 M
4 G1 d8 l' a# x3 i r4 R: p
try {
. C3 m0 x1 a: k, K A Heatbug proto = (Heatbug) heatbugList.get (0);1 q2 p2 k7 F D! [2 I) Q8 a v
Selector sel = # v3 U/ O- C+ N! O( s/ z* G
new Selector (proto.getClass (), "heatbugStep", false);. R5 c, i1 i/ A6 s; T/ v
actionForEach =
# M1 q$ G+ a% Q2 ]3 `9 o9 } modelActions.createFActionForEachHomogeneous$call' o v3 {- m9 I; X
(heatbugList,
: o& ~2 U+ ~: B" |/ h new FCallImpl (this, proto, sel,: |# K: ~, \7 c. A; i9 `8 }
new FArgumentsImpl (this, sel)));2 e( D/ r1 ^5 G& j2 ]: v+ A
} catch (Exception e) {
0 O# [& _1 d$ e6 g1 y' {# H3 y e.printStackTrace (System.err);# A! h8 q7 S# N/ V3 I
}
. Q0 m' ]! e# n7 U; h; C
/ L0 n! D" d. l syncUpdateOrder ();2 a: o# a, N9 q" {( ~& _
5 O: \0 L# T4 _+ b1 q
try {
: g9 p8 t" X7 A( B: u' T modelActions.createActionTo$message
7 G4 K: }, f) O& R- n6 ^3 ^: F. n; o( I (heat, new Selector (heat.getClass (), "updateLattice", false));# J1 q3 l* w" O N& g5 O
} catch (Exception e) {) [2 u: q, Q0 w) v% {8 R
System.err.println("Exception updateLattice: " + e.getMessage ());
6 @1 }3 ^& K3 R/ }/ E2 E }; {5 c7 z; W' z1 G6 Q
! j$ r; g. X6 M, X1 t // Then we create a schedule that executes the
+ d+ l0 p! u+ S) M5 ^) Z& g, M8 J // modelActions. modelActions is an ActionGroup, by itself it) X% j0 f) c3 I) ?8 I' x: }
// has no notion of time. In order to have it executed in
) Z5 Z; y* m _ // time, we create a Schedule that says to use the( Q0 s0 Q2 ~. ^" p
// modelActions ActionGroup at particular times. This3 }! L% f' g9 Q) e! I& _5 V; a
// schedule has a repeat interval of 1, it will loop every) J) ~2 p) c H2 N) C
// time step. The action is executed at time 0 relative to/ S4 J( ]& c# i3 Q! L
// the beginning of the loop.
8 }9 J& w% F$ C& ?5 O% M# F0 Z5 w) o c/ x* i
// This is a simple schedule, with only one action that is5 ~4 D3 _ C' I6 `5 D% b2 o
// just repeated every time. See jmousetrap for more/ w* ^% X$ @( A2 D/ B3 F* U
// complicated schedules.& O! u/ F5 y7 h) F( ?( ?! ?3 o7 m
; F! c1 J/ R$ [. O. T modelSchedule = new ScheduleImpl (getZone (), 1);
! X h6 z. ]- F+ u8 a modelSchedule.at$createAction (0, modelActions);
& J* g- O b* c, X6 j# {/ g
6 U+ Z, R" r8 l F; i# g/ ~: q return this;
4 F* R4 E# \3 d3 l) A } |