HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
/ ?- d' E7 E( @* u* e" K4 `. H$ f4 k9 R k4 f
public Object buildActions () {& e! x( p: C* _+ g9 ~ m d; N
super.buildActions(); G2 g0 C' b$ K$ Q0 N, N; L
4 U% r; y0 G! t8 ^! G2 [9 r
// Create the list of simulation actions. We put these in
* O1 |0 ^/ C0 g4 B [ // an action group, because we want these actions to be
3 M$ X+ u# L) }% i% @7 \ // executed in a specific order, but these steps should6 e7 o2 u6 Q7 t( `8 L0 O
// take no (simulated) time. The M(foo) means "The message( E1 H6 m3 }4 [6 G
// called <foo>". You can send a message To a particular
1 u7 o, ] }3 `( S F0 e8 w. [ t$ B x // object, or ForEach object in a collection.
+ g: }, n. C# s1 x! t( \0 ~6 A1 S 4 C: ?5 Q. {7 q1 H$ ]* z D) W* y
// Note we update the heatspace in two phases: first run
( G' O. `0 w' U) Y // diffusion, then run "updateWorld" to actually enact the
- w# I% q: N+ N# y- n2 s8 f. N8 p // changes the heatbugs have made. The ordering here is9 Q( m' ~8 W2 g! S
// significant!
3 I' V1 R) y6 F0 X8 j; n 4 Z7 }9 e- L. U* r
// Note also, that with the additional
$ T; p/ d4 a1 O' ? // `randomizeHeatbugUpdateOrder' Boolean flag we can* n$ s7 d: S _! I' m; v
// randomize the order in which the bugs actually run& [3 a+ L+ _5 V
// their step rule. This has the effect of removing any
- Q7 |2 R2 O" r, H: ~ // systematic bias in the iteration throught the heatbug3 N+ A, Q& Q1 m, X4 l+ z1 t8 U" e
// list from timestep to timestep5 m* ~4 }& C! r8 n/ ]/ V. A. E( f, t
: z7 w' c S8 Q- L# |! B: \# |
// By default, all `createActionForEach' modelActions have
" a! l2 u& i* j+ x( _ // a default order of `Sequential', which means that the9 U' {1 {/ f+ H+ l4 S2 e
// order of iteration through the `heatbugList' will be9 z8 F0 A' N6 ?+ S+ L
// identical (assuming the list order is not changed
3 ]# `7 n5 l b# A( W1 a4 s U* f( N // indirectly by some other process).1 W; `" U N1 _* |9 w# [8 b
8 h. v: D$ v" U" U5 S) l! t4 T; S. i
modelActions = new ActionGroupImpl (getZone ());4 V; z, {9 R2 j" K" l
9 B- L. W/ p- E! S, E+ D
try {- N' D. D) Z: ~7 J3 L" ?9 D8 Z
modelActions.createActionTo$message+ Z6 U' _ B/ y. X( E7 T( B
(heat, new Selector (heat.getClass (), "stepRule", false));; ?( c8 Z- p1 o) q/ M
} catch (Exception e) {
0 d2 T l1 C7 _9 x( S( @3 ? System.err.println ("Exception stepRule: " + e.getMessage ());
_ E, L E8 W/ B5 w! X& j }
) a# P2 q7 ], Q, v/ ^. V) H0 ?& Y8 X3 K
try {
" x# U4 j: v: h/ [1 ]) `6 f Heatbug proto = (Heatbug) heatbugList.get (0);1 P, `! f7 o5 f9 p( d
Selector sel =
2 @( [: v* `4 ^0 J7 F0 H new Selector (proto.getClass (), "heatbugStep", false);3 V& i, D) m. T. f8 m
actionForEach =
# q4 s2 m( u# V& [1 \ modelActions.createFActionForEachHomogeneous$call! Z8 p2 ^5 P$ s+ _& B8 @5 T, U
(heatbugList,
; b F4 c9 C, A. d$ m new FCallImpl (this, proto, sel,% e; X4 T1 Q3 o0 ^8 Z2 e
new FArgumentsImpl (this, sel)));% i& R. e5 ~ O- p9 w
} catch (Exception e) {( |# ` n4 O% v- T
e.printStackTrace (System.err);
& v2 r; {& c' d* O# R6 V+ u }9 V0 v7 ]. h4 ~- v
' x8 K. W2 b' p) p9 W2 B2 J syncUpdateOrder ();
& Y: C. D2 y5 K. L; E# X- e( e; {) H6 E8 x
try {
u4 Q* [" j$ v modelActions.createActionTo$message 2 m7 b9 g/ n+ a+ Z+ r
(heat, new Selector (heat.getClass (), "updateLattice", false));: V1 D8 [6 K4 H! q+ _
} catch (Exception e) {( O. _5 ~: C& v7 D) Q( N k/ D
System.err.println("Exception updateLattice: " + e.getMessage ());9 t3 S; M% J' c
}/ N: P4 T/ K9 i, G* F' r
- x4 y. y8 B+ X' P) [, \' ]# a
// Then we create a schedule that executes the- Y% x- @3 B" r; H
// modelActions. modelActions is an ActionGroup, by itself it
6 P# |+ e6 q5 J! o8 @* O // has no notion of time. In order to have it executed in
; e# D# v- w9 g; c // time, we create a Schedule that says to use the
+ D. L0 G$ p: G+ ], H2 [. S2 a // modelActions ActionGroup at particular times. This$ w! x* ~- S! Q
// schedule has a repeat interval of 1, it will loop every
3 ~" D" o" r& X1 P // time step. The action is executed at time 0 relative to9 y; @1 d+ E* O7 w% d* w0 q
// the beginning of the loop.$ Z# F/ Q' E$ J3 ~# G
9 f9 h" H" g$ v: M0 b! A& S // This is a simple schedule, with only one action that is
1 ~ o+ X- D# g& ^# B' i // just repeated every time. See jmousetrap for more
, m3 |. i% K0 n+ [/ v // complicated schedules.$ q4 }! [3 @! ^
, l( P) p* y4 ^: i8 W1 ]% X' W4 I5 N
modelSchedule = new ScheduleImpl (getZone (), 1);# \2 y" @$ C2 {! |0 H# n
modelSchedule.at$createAction (0, modelActions);
3 V9 \ X' O$ }4 {8 J
( m1 B$ ~8 F6 ~9 r& R8 x return this;+ B) p5 n$ ?; j7 d! |
} |