HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
. k! \1 u# \* a( a
$ O* p8 F) I6 @# B; N public Object buildActions () {8 `- x6 s& ~, v7 ?4 m+ R0 D7 M
super.buildActions();0 H4 Z- e; l( o' V0 v
- j7 ~0 @! y1 g9 w
// Create the list of simulation actions. We put these in% _* D! x+ J' e2 M
// an action group, because we want these actions to be
& \4 Z( y; Y% R, V! ?' r // executed in a specific order, but these steps should! Q* ^' S! ~8 Z8 x4 d% \6 L( `- o
// take no (simulated) time. The M(foo) means "The message$ z5 p( W& G# O% m
// called <foo>". You can send a message To a particular
( f; ?/ J( v$ @ // object, or ForEach object in a collection.6 t4 A6 }0 Q6 q
& c, S3 r A6 F8 b) F& S: V6 v& H
// Note we update the heatspace in two phases: first run
/ Z7 [( t1 ^+ l8 b // diffusion, then run "updateWorld" to actually enact the
& M5 x3 {1 s5 n; ] // changes the heatbugs have made. The ordering here is
& C4 L; @) o& p7 S+ c8 t // significant!
* B L# C8 z+ B4 k1 c2 J0 {7 `/ f
5 D! m) x. N! z, C* w$ q6 h // Note also, that with the additional0 K, T; n( W/ X: A2 U) E: g
// `randomizeHeatbugUpdateOrder' Boolean flag we can0 G4 f/ j; X7 t! _. |
// randomize the order in which the bugs actually run* g4 C; \6 V1 S4 ], X5 |+ t
// their step rule. This has the effect of removing any0 ]+ o2 T$ x5 i7 }' J3 g+ q$ v
// systematic bias in the iteration throught the heatbug" p- \4 E2 |2 s" l# R8 O; D
// list from timestep to timestep3 @: ?8 d1 I$ r
" Y' J {& p9 v* \9 i, B) Z) u, [; u0 A
// By default, all `createActionForEach' modelActions have
% Y# T8 u6 ~6 J: @8 `- X6 { // a default order of `Sequential', which means that the
: `" L& k v4 |% V7 ^2 u // order of iteration through the `heatbugList' will be# l! Z( m0 J# X% o/ C) m
// identical (assuming the list order is not changed
+ B3 C6 o) Q( t& e1 i // indirectly by some other process).9 W2 Y: r; c5 o) u+ J
! x$ ], q, `" `8 R* M modelActions = new ActionGroupImpl (getZone ());( l% s; J; t! k# W. Z; ~
8 T: l# D4 k9 U3 T+ i4 u6 F" ^! L! N
try {; k( o& _$ A+ t3 _6 C+ b
modelActions.createActionTo$message
% l. r% r- T/ a' M3 H5 O (heat, new Selector (heat.getClass (), "stepRule", false));# B. k) h5 n7 m3 |; r- l( ]
} catch (Exception e) {
9 a. K: r4 A" r) ~$ q0 s8 _) @( y. _ System.err.println ("Exception stepRule: " + e.getMessage ());0 k) ^- L2 u) [; L3 m
}
/ M8 l2 b3 O- ^- r. K) ?' w8 q2 S2 X8 _- o/ O
try {
- K' ^& ^5 D5 q9 Y* Y1 A Heatbug proto = (Heatbug) heatbugList.get (0);3 d2 G$ ?! ?* j- @
Selector sel =
6 q% {: _. b2 k; z$ S$ B/ l new Selector (proto.getClass (), "heatbugStep", false);
5 G9 _# W, ~$ d7 A% N2 X; ^ actionForEach =
( M+ b2 d* N$ f& s5 W modelActions.createFActionForEachHomogeneous$call
6 G- s/ K" A9 Z: h3 y7 W1 G% U) |# H (heatbugList,
/ k0 b [$ @. F9 h4 t, Z- T6 \ h5 b new FCallImpl (this, proto, sel,+ ]/ B1 E* i5 j9 p& Z B
new FArgumentsImpl (this, sel)));
2 d6 P. G! G1 D% e } catch (Exception e) {
! i# i$ v. E0 g( I e.printStackTrace (System.err);
$ ^" @% g- B; n }! {' \6 n" }" q s ^
2 v) I" `1 |# ]4 F; Z: O0 R @ syncUpdateOrder ();
1 e. l8 i& D% t" C- ?. i( ?9 v( m# R' h7 d/ {! u4 s3 I, c7 _& T- f
try {/ H+ H6 j( d: w5 r" L; b
modelActions.createActionTo$message
& G3 \4 |2 ~' D5 r (heat, new Selector (heat.getClass (), "updateLattice", false));
8 B( l2 x {- M } catch (Exception e) {3 ]7 n) E! W# Z; W: Y" {
System.err.println("Exception updateLattice: " + e.getMessage ());1 l; i8 Q8 O s
}' M1 S ^1 O6 a
8 S7 z5 w7 X7 w' _ // Then we create a schedule that executes the
: H: U- s( F, o& o" A# m3 E // modelActions. modelActions is an ActionGroup, by itself it$ b( \8 ~( h- h: s/ H7 \
// has no notion of time. In order to have it executed in! c' I9 G* x) G* p
// time, we create a Schedule that says to use the/ }+ O7 n+ }' i7 T; A
// modelActions ActionGroup at particular times. This
( n: G" @# h* ?& w4 J // schedule has a repeat interval of 1, it will loop every
: s. `) _5 ^. Z! _( Z# \) J // time step. The action is executed at time 0 relative to2 y( g4 Z8 n1 }
// the beginning of the loop.
8 e: l& |8 i8 Q4 i6 ]! Q7 E. X
6 z1 T0 z, W1 q& m5 L // This is a simple schedule, with only one action that is/ _* [$ V8 P) q) }
// just repeated every time. See jmousetrap for more9 e8 ]. J& C+ @
// complicated schedules.
9 d; d7 }- a3 N- z ( s! }; Y9 O) ?" [7 A) k
modelSchedule = new ScheduleImpl (getZone (), 1);/ o8 _& u: i9 w3 v; S( J
modelSchedule.at$createAction (0, modelActions);2 p0 z7 }3 n& \4 @/ p3 @
8 i1 h, p3 d" C7 w5 n0 ?
return this;4 S& M! \8 |6 d
} |