HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:- B; k( n% R" l4 c
J. R7 Q$ i) p. [/ V0 @0 V0 k public Object buildActions () {
7 n- o! r5 _7 d. a; Z& w4 Q0 M super.buildActions();" ] G; b$ y! f! G' @1 i& N! J
- a5 t0 R- H+ d! A% F& Y // Create the list of simulation actions. We put these in
+ Q/ d* Z3 } j. H/ V1 j8 m // an action group, because we want these actions to be
* P; k8 N+ |* e( `1 i* S // executed in a specific order, but these steps should
4 p9 W# P4 `& Z9 }" K9 i+ y // take no (simulated) time. The M(foo) means "The message
" r" X% p) z# Y, P) x // called <foo>". You can send a message To a particular
' X2 X$ E( f2 @1 {5 t // object, or ForEach object in a collection.
q" L$ d$ O7 l5 ^7 |; F B* y
5 W! b! p$ s! N // Note we update the heatspace in two phases: first run$ |* u5 \/ O+ r* z
// diffusion, then run "updateWorld" to actually enact the- S6 T* d9 H1 M
// changes the heatbugs have made. The ordering here is
4 x# ?6 S7 S" O' O // significant!
4 ^/ s1 s; i7 G# u
5 C2 @7 f" @+ ~ // Note also, that with the additional# U! p- f( B3 C6 N
// `randomizeHeatbugUpdateOrder' Boolean flag we can% w. U# `9 k9 f$ W- v
// randomize the order in which the bugs actually run
- t6 r$ P# @& {) z9 X" Y // their step rule. This has the effect of removing any& Y+ F# P# w# L0 {; u5 P
// systematic bias in the iteration throught the heatbug
. Y D7 ]$ ^8 F9 }" U9 e // list from timestep to timestep6 }+ A- b3 ~; p/ l( U1 q5 S9 Z
9 \* o$ p3 J; M8 p9 X _
// By default, all `createActionForEach' modelActions have
1 W2 A1 t- L. v& @ A // a default order of `Sequential', which means that the
- T. Y- K! q- r' h7 o0 ^* o W) z // order of iteration through the `heatbugList' will be
. p! i8 {8 E2 ~# J% K E // identical (assuming the list order is not changed9 R; P3 I3 t( B/ V9 n! h
// indirectly by some other process).
9 U7 Q) }1 |1 {' p
' g$ L E4 s6 R8 e6 K. i! ? modelActions = new ActionGroupImpl (getZone ());
* |! ^1 ]: @% Y0 }$ w2 M1 Q6 p; e% B( I/ W l" T) J
try {
h7 b5 s3 S" d modelActions.createActionTo$message: H+ v+ c1 h& r4 e/ B* E9 L
(heat, new Selector (heat.getClass (), "stepRule", false));- b6 H9 @4 u) [# C, ?( h
} catch (Exception e) {
, N8 V# `0 h1 w& F. |$ [! v O System.err.println ("Exception stepRule: " + e.getMessage ());) f. x$ @( U! A+ S
}( o. Y9 {1 g6 x( A4 m$ r
D7 @2 B% _# U u$ a2 \
try {" `- U' l8 a/ A# P$ j8 c% I
Heatbug proto = (Heatbug) heatbugList.get (0);! B! P1 K/ e/ N) V% x5 b
Selector sel =
* Z6 {, o8 l9 P6 L( u; Y# |+ M2 z new Selector (proto.getClass (), "heatbugStep", false);: D+ S4 X9 g- ^0 j
actionForEach =
% d& e" p6 ~' B2 p modelActions.createFActionForEachHomogeneous$call
6 S2 f @. T+ H7 D; N& e* M' j: Q! l (heatbugList,- D c! P) w7 O7 j/ j# d( m
new FCallImpl (this, proto, sel,$ X6 B: Q5 p V0 j4 z2 x N' V
new FArgumentsImpl (this, sel)));
5 C1 g. q' S8 i4 { } catch (Exception e) {
( t/ ^. X7 J s! e9 l& A* J) M e.printStackTrace (System.err);6 ]0 E T# x5 `# o6 D
}9 O: L8 X/ m* i6 S1 K# f- P
6 g {$ ~' Z4 E
syncUpdateOrder ();
$ `! ^& Y, L% w2 `: q. r0 S8 K$ Z8 s: U4 a2 Z0 ~' n; g
try {
, t A4 q( s8 ~2 m1 I' n+ \ modelActions.createActionTo$message
. O8 g3 c, P( x (heat, new Selector (heat.getClass (), "updateLattice", false));
7 {1 q% q, N5 I A! V4 w } catch (Exception e) {
. \2 c6 H b4 E System.err.println("Exception updateLattice: " + e.getMessage ());, |' m3 z. b6 u+ r" C ?
}
* D8 r5 ?" X2 m- Z$ V: w
* |. T( E. |( s. {. u0 \ // Then we create a schedule that executes the
5 N1 j& P1 x* f0 p/ p* z! w5 y) O3 D3 P // modelActions. modelActions is an ActionGroup, by itself it
' A1 S! T8 V( A. n6 n% J // has no notion of time. In order to have it executed in" T2 Z9 N7 d( o
// time, we create a Schedule that says to use the
+ p2 [5 \' ]4 C& `# j+ P$ b // modelActions ActionGroup at particular times. This
# p* U$ q& Z9 P0 l // schedule has a repeat interval of 1, it will loop every5 ?8 _8 |3 ~) a9 {; g2 z& Y
// time step. The action is executed at time 0 relative to, l# F+ c. Y% `' q
// the beginning of the loop.6 n2 u, z/ h. D4 p
* R4 H0 p0 ^6 r( ?8 A# S
// This is a simple schedule, with only one action that is4 W; L' h" }! X9 P) v
// just repeated every time. See jmousetrap for more& H6 P9 }6 c* E6 D0 T4 b
// complicated schedules.
$ k1 j$ v% N# a* X& l; A
( |0 ?4 R! P0 d modelSchedule = new ScheduleImpl (getZone (), 1);
4 J" Q$ _ O3 X8 k; k! D modelSchedule.at$createAction (0, modelActions);0 I7 W5 _. B4 G' V
: x# ~( ?- C7 ]6 S m6 o* \ return this;
4 S" F% n. F+ {$ ] } |