HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
7 M, P$ j# i n: w- W2 b
& E6 j6 P, H+ l$ p+ K public Object buildActions () {
0 U) x3 H& G+ ?/ o" E; @ super.buildActions();7 ]& G* P/ c W0 c% J
! o* o% j! d3 B6 s" ~9 o9 e5 W$ l
// Create the list of simulation actions. We put these in
# d/ p3 j* q* E4 [. M // an action group, because we want these actions to be- Z9 [% b8 [8 ~5 k3 y
// executed in a specific order, but these steps should, j2 O6 ?! z g" G" W
// take no (simulated) time. The M(foo) means "The message
1 |5 o: z9 _% a e // called <foo>". You can send a message To a particular
4 F; ^, L& \; r4 ] a$ X // object, or ForEach object in a collection.
2 V" f1 N4 {& n9 ?, g* d
! ^& y" Y6 N9 r! |2 z // Note we update the heatspace in two phases: first run N+ v+ \! o% u
// diffusion, then run "updateWorld" to actually enact the
$ L4 K/ m9 @- ? g' B5 M // changes the heatbugs have made. The ordering here is& n8 j& n5 `9 s2 Z0 m
// significant!
$ n3 c$ d: T7 r: L1 a ' i: J4 e/ w8 O, G1 s7 w
// Note also, that with the additional) l6 m& W; e$ ?" S6 L, N$ B* j
// `randomizeHeatbugUpdateOrder' Boolean flag we can
1 ~) o/ p( G ]" o/ n // randomize the order in which the bugs actually run @/ z2 F/ V$ j O4 ~; I3 k
// their step rule. This has the effect of removing any
: w3 P0 h: L9 H* m. b7 h9 E // systematic bias in the iteration throught the heatbug
1 H6 [9 B( G# g5 X- k! U // list from timestep to timestep; g% }. t- Y. O
0 y+ k0 ~1 r. Y; O9 z+ T
// By default, all `createActionForEach' modelActions have
# _. ]) `" k: u+ D7 q // a default order of `Sequential', which means that the
' g# I8 V0 K! p+ C; o // order of iteration through the `heatbugList' will be
: C- l0 n5 j/ K& l+ ^# O: S6 R // identical (assuming the list order is not changed
1 Q+ i+ W0 ^& X/ \ // indirectly by some other process).
) j* U6 G0 d. J% t/ U( V: K - f9 G$ z5 E5 j n4 t
modelActions = new ActionGroupImpl (getZone ());
* f4 l0 N! `. q- x$ x: T: _" \; Y4 \+ A
try {
3 b; F' w7 q: |' \! _# v modelActions.createActionTo$message, J$ o2 B: l. R t; N4 s$ K$ j# n+ ?
(heat, new Selector (heat.getClass (), "stepRule", false)); r- T, q5 |! t u& k
} catch (Exception e) {* g# q8 B1 r- S0 a6 r! a/ d
System.err.println ("Exception stepRule: " + e.getMessage ());
0 x0 b0 H; X6 {0 M2 e }
. I' }0 y% o# K
0 S- {5 I3 ?& c0 ]1 f Q' Y try {
& M& Q1 B4 g* N! S) d Heatbug proto = (Heatbug) heatbugList.get (0);
r7 ^' L0 u- s& _( j3 D: e; I Selector sel = 0 W/ A9 X. G$ l" l- k$ B5 X
new Selector (proto.getClass (), "heatbugStep", false);9 q" I4 U5 E. b3 r9 q
actionForEach =5 W3 K- T L ?4 {3 `
modelActions.createFActionForEachHomogeneous$call) x0 }1 W/ C- T, k
(heatbugList,+ o0 S- K# _& l2 ^! H
new FCallImpl (this, proto, sel,( P: q8 R1 j/ J2 ?9 n f4 ]
new FArgumentsImpl (this, sel)));: h4 m4 x+ P. F* J& T: f6 \
} catch (Exception e) {
6 C8 D7 ]8 W) T, l0 ?, w# j. V1 L e.printStackTrace (System.err);9 r( }* {2 W8 @) n' ~
}
& t/ I! y5 B4 I8 a. _; m2 ^ ; ]2 K z6 N* c
syncUpdateOrder ();7 U( O+ P# Q' b/ p, }
# k$ t; H2 n( l% P9 R" k try {
# K, B- R' W: v modelActions.createActionTo$message
. u% O! p6 C. L6 H' {2 h Y/ l (heat, new Selector (heat.getClass (), "updateLattice", false));6 {" j, [8 ?& l6 @/ d% P
} catch (Exception e) {2 h4 D2 l5 T% k$ F/ H
System.err.println("Exception updateLattice: " + e.getMessage ());
4 j. A+ W/ V. e l6 c+ U }* C0 O3 | B0 h- }& q+ c4 W: E% X
$ o3 l1 a; D. f2 R8 Y
// Then we create a schedule that executes the
( u, ~: q7 H2 O; W // modelActions. modelActions is an ActionGroup, by itself it. M/ X$ Z6 s/ V% {- ?" }- A
// has no notion of time. In order to have it executed in
# R( I7 E6 [! `- b5 l // time, we create a Schedule that says to use the- I* @+ s% H. L% Z- n
// modelActions ActionGroup at particular times. This/ ~) L1 i7 U/ D V2 ~* N
// schedule has a repeat interval of 1, it will loop every
2 O% j6 n- o1 |& S, M // time step. The action is executed at time 0 relative to
' Q3 c/ }; _+ X0 j# Q // the beginning of the loop.
% a' t4 V" F. E
1 I( j6 E' j; Z: n // This is a simple schedule, with only one action that is
5 E6 B, V1 \& O [* R j( d // just repeated every time. See jmousetrap for more
. X6 N3 _4 k: D: f3 e/ g9 X // complicated schedules.
# Z& ]" N; H- N. q8 C/ N9 } . b; [! j, C$ t2 G
modelSchedule = new ScheduleImpl (getZone (), 1);
% i5 q- i f- m% ? modelSchedule.at$createAction (0, modelActions);
9 I# T& m. N# \6 f, s: k
% L, T! e" O F return this;
7 H9 q! v* _- m+ f) b0 T } |