HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; t8 w! M3 G: l% k; Q
/ O; \! Q9 S6 `$ u# C public Object buildActions () {
_8 t D* B7 y9 _6 C r2 m super.buildActions();
1 w2 ~: W; E$ n. p2 g! O) k4 _ ; l$ j, T9 }2 f' M1 O
// Create the list of simulation actions. We put these in
( Y. d, {6 ]+ H- K7 W& v" B- N // an action group, because we want these actions to be9 V5 u) m, M& w0 I% D
// executed in a specific order, but these steps should
5 _: }5 a- {+ c5 ^/ L // take no (simulated) time. The M(foo) means "The message+ G* t- A- G# ]/ _) Y, O
// called <foo>". You can send a message To a particular
1 s: x4 U0 Y- j1 ^5 K // object, or ForEach object in a collection.
! N) T1 y6 s5 { |/ R
: |3 _ l ~/ [ // Note we update the heatspace in two phases: first run
" k; o; h0 a: d // diffusion, then run "updateWorld" to actually enact the# S4 i5 X7 x0 H* ^ B$ O
// changes the heatbugs have made. The ordering here is0 o) y+ X, T! x. U7 N& C% G
// significant!, Y/ m& {! I6 t! Z
8 `1 T: Z+ a1 M& U+ _
// Note also, that with the additional0 x/ o! d% t5 N. G" Z6 D5 [% |
// `randomizeHeatbugUpdateOrder' Boolean flag we can
! `2 _3 W( P8 r9 k! v9 \3 F6 m // randomize the order in which the bugs actually run
# R; h. O- p U+ R4 {0 V! _ w // their step rule. This has the effect of removing any
5 i3 i0 C. W) B( u0 V+ o. [- ?0 I // systematic bias in the iteration throught the heatbug
' o1 W. o2 U1 B6 Y! g1 v$ a // list from timestep to timestep7 z7 ]6 M, M- m1 f3 M
! ^5 Z) m, v+ @2 p/ G d) H) X- U
// By default, all `createActionForEach' modelActions have# X) K4 s; h3 l0 J3 |( G
// a default order of `Sequential', which means that the
: _ g0 D# d+ V+ y/ l' S6 | // order of iteration through the `heatbugList' will be
/ y8 s: G6 K X/ p2 D; g, V // identical (assuming the list order is not changed
9 R* b3 E7 K6 w% p1 w% H8 F2 h // indirectly by some other process).
5 o1 _6 f# Y$ h0 }( u2 O
. ]: f6 o$ U& H) A( V6 |6 V modelActions = new ActionGroupImpl (getZone ());: O8 I0 c7 I1 _( ]) q s. C
' F2 L* ^3 C: W& E: F8 Y6 C& I6 y try {
+ E! N" K- O/ \4 p1 A! l1 `, s modelActions.createActionTo$message1 E. T! Q: ?5 }! j t3 F
(heat, new Selector (heat.getClass (), "stepRule", false));
% z& U" |- M& M8 ^( r } catch (Exception e) {! Q2 S# k. D8 I& W& V- |
System.err.println ("Exception stepRule: " + e.getMessage ());
& q$ F6 {6 G& D. l6 y }( U( ~( B3 y" F% I! a
& m1 |* R! e C; d try {
. m+ C6 b' g- {# J Heatbug proto = (Heatbug) heatbugList.get (0);" Q D% X5 e4 X4 a4 U5 Z. B1 I% W
Selector sel = $ f1 f/ X v9 L2 n- c7 I5 M* U4 K
new Selector (proto.getClass (), "heatbugStep", false);6 |- ^6 l& V- Z% v+ g0 `
actionForEach =& j1 t9 A# d) E$ s
modelActions.createFActionForEachHomogeneous$call0 O M) j C, x$ h& T
(heatbugList,# ?6 J, r8 z5 [; _4 _" S4 ^
new FCallImpl (this, proto, sel,9 H4 p8 _6 f- X f( H/ l' Y
new FArgumentsImpl (this, sel)));4 ?/ S! k6 \$ U! z0 @ Z& p% a5 e
} catch (Exception e) {% ?* [9 P' Z( | o) B
e.printStackTrace (System.err);3 F2 D# [6 K2 T1 j; y3 o
}
7 k* y( M3 J& U; u' d3 t% m 3 V, _* P9 w8 `* }& J' t' a
syncUpdateOrder ();( O1 s# B9 U3 t* l% f8 l* @
9 j( r% x z- {6 j4 K4 e) z try {
& k- v' T: w6 b7 H modelActions.createActionTo$message 8 A7 z* u( \( A0 v$ d3 Z
(heat, new Selector (heat.getClass (), "updateLattice", false));- x' v. b+ v8 V$ ~! y
} catch (Exception e) {1 w- c4 |9 M8 c8 c) G7 E1 [! C
System.err.println("Exception updateLattice: " + e.getMessage ());3 \9 x; j2 L; O; m# a
}- ^, b4 @4 H7 w* N7 z7 {& \
+ V+ V- V1 m# z- Y3 g( d% I3 h {! i
// Then we create a schedule that executes the+ k! L4 ?2 ]0 x/ B% a1 [
// modelActions. modelActions is an ActionGroup, by itself it# T# ?$ F9 f/ o3 S: Z7 G
// has no notion of time. In order to have it executed in' B" S& ^& }3 w" y7 F
// time, we create a Schedule that says to use the
2 ^8 @/ F! i8 X // modelActions ActionGroup at particular times. This
2 c" c! _# X; G/ P // schedule has a repeat interval of 1, it will loop every( F) Q" t/ ~( C; _( u6 B
// time step. The action is executed at time 0 relative to: \1 A2 v" ]0 H F7 O
// the beginning of the loop.
# [3 Y2 q& f8 X' x- Q- ]( @2 Y
( P0 f1 x0 ^! T- P8 O5 k // This is a simple schedule, with only one action that is# ^5 v3 _+ U; Z$ p& i. l
// just repeated every time. See jmousetrap for more
" `# d7 j) u2 ~; d( k7 G // complicated schedules.3 Q2 K7 U4 f4 n0 Z% T& m
% [( u- B' d" K% d" C8 v% K7 @7 |
modelSchedule = new ScheduleImpl (getZone (), 1);2 X B* q$ T. l7 I3 j
modelSchedule.at$createAction (0, modelActions);
* k4 i5 u: E: j0 Z# E8 T 2 _* R+ y% E, b1 @" G t
return this;
# b4 G7 s' R; I& B0 c } |