HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
# R5 L+ l# B f1 v- {3 i$ u! `0 B2 y3 [/ r, I5 `
public Object buildActions () {
$ m# ]# U# `# q9 s! N [ super.buildActions();
0 q5 A' f M' w3 j 6 C: @9 t K" Y/ E, T3 f& X
// Create the list of simulation actions. We put these in4 Q& Z& B6 _4 T9 V4 E
// an action group, because we want these actions to be
6 r) U; }6 X5 N8 }' Q; y. c6 i: i // executed in a specific order, but these steps should
/ h" f7 I6 q( R4 J( p // take no (simulated) time. The M(foo) means "The message
5 u: O( P# M* b. r% N // called <foo>". You can send a message To a particular }: m4 `; [$ R
// object, or ForEach object in a collection.& L1 N% g0 k; o* U& p/ h
" k( q/ g# h J: R9 I // Note we update the heatspace in two phases: first run
. Y* d) q, e" q2 A' f3 D, q // diffusion, then run "updateWorld" to actually enact the
& T% I# q, H: F e$ ]+ C, ~ // changes the heatbugs have made. The ordering here is5 K1 r \( K* `+ A
// significant!3 w9 Y f3 p6 R# _6 \' K
# B% C! |: ^' v* M& c( h6 B1 B
// Note also, that with the additional4 x, ^0 M+ J1 t1 Q' d
// `randomizeHeatbugUpdateOrder' Boolean flag we can; Y- c: R9 d0 w
// randomize the order in which the bugs actually run2 x6 L* s- I& _1 E9 L" s6 ~8 M j% g
// their step rule. This has the effect of removing any
3 `3 v5 y0 v- ~$ z+ Q" y // systematic bias in the iteration throught the heatbug+ Z! ?9 _+ w. L, m
// list from timestep to timestep
; }, c- d* J: v Z 6 o) q6 L4 J; o( R( ]: r
// By default, all `createActionForEach' modelActions have
$ y1 h" E. Z, g$ v; l- Q6 n& o // a default order of `Sequential', which means that the
, M9 q% H: D. B2 P // order of iteration through the `heatbugList' will be9 F+ u A% @$ i2 p' Q# ~
// identical (assuming the list order is not changed0 ^6 i7 k9 k9 Z! Y& ?6 `4 m( O
// indirectly by some other process).5 F$ V& {& Y/ a! Q, a* \
( y8 g, }6 z+ w2 Z% j8 @$ ?+ o modelActions = new ActionGroupImpl (getZone ());. o$ U8 b9 s5 _0 ]
5 l Q, p& V5 t" q) X. Q
try {
8 n. p+ h) n1 C3 s modelActions.createActionTo$message) y& C+ J% m3 `& L/ [
(heat, new Selector (heat.getClass (), "stepRule", false));
6 n/ ~& g& B! R- k/ Y+ g } catch (Exception e) {3 i2 D" y/ [" R F
System.err.println ("Exception stepRule: " + e.getMessage ());
! Y- `& |0 ^1 j& U( i7 r& x }$ E z7 Y6 n; ~* a$ m$ S
V( A/ C& ^0 J- _( r7 n6 y try {' g. M; a$ s. E& P
Heatbug proto = (Heatbug) heatbugList.get (0);* e4 m0 F7 d/ |+ M
Selector sel =
- A* ]" ]# C) s9 r S new Selector (proto.getClass (), "heatbugStep", false);8 X6 _& S/ M. ~! U. W4 T: U- T- i
actionForEach =
- Q6 ~& a/ `* n2 t- Y5 |/ f$ z modelActions.createFActionForEachHomogeneous$call
- m) e7 I r7 y, u# ?: p( B (heatbugList,) u1 \8 | j* L Q! w1 h$ a9 p# i
new FCallImpl (this, proto, sel,
# I o, ?0 c3 s8 X new FArgumentsImpl (this, sel)));/ y0 \( U4 w# ^, {+ R, e( z
} catch (Exception e) {
2 \& k2 `% D6 X9 { e.printStackTrace (System.err);0 V% O! B; |7 r$ N' p8 O3 B, @
}
0 g# n8 V3 \) X5 [
6 J! `" l ^! |- I; K8 K' u$ I syncUpdateOrder ();. X% l# V8 B* W& T
# |9 x/ ^( g7 X' q try {
2 J9 c+ m- D, |* s7 ~ modelActions.createActionTo$message 8 m* G1 c& F9 H' J ]) q
(heat, new Selector (heat.getClass (), "updateLattice", false));
) q7 T8 n/ C# n9 w } catch (Exception e) {5 d* O& _, b1 e' C; ^! J
System.err.println("Exception updateLattice: " + e.getMessage ());, G/ C1 i" ]! [% y. H
}
+ E5 F! A5 |/ [- D5 v
! {& y2 e' R3 K4 n // Then we create a schedule that executes the
5 c& P( Q- e( U1 x" h // modelActions. modelActions is an ActionGroup, by itself it2 W+ B, n0 z+ P% L# r
// has no notion of time. In order to have it executed in; r: g5 V4 j: ~
// time, we create a Schedule that says to use the
3 Y: s5 P* b4 D3 N% Z& I // modelActions ActionGroup at particular times. This$ _; C# L9 q/ V
// schedule has a repeat interval of 1, it will loop every
% F7 M# [, U* R! k q5 E // time step. The action is executed at time 0 relative to) f* ]& y( f! _+ o0 n
// the beginning of the loop.$ a9 Z% |5 h1 J8 Z
# s( j. n3 A) N2 s8 @ // This is a simple schedule, with only one action that is
3 e y" c0 o; p3 @! _ // just repeated every time. See jmousetrap for more- Z/ `5 T, o; H2 V
// complicated schedules.
3 g3 B5 T) {+ a! h& `) H2 M8 S . j% B0 ]. q8 ?) H. j9 `
modelSchedule = new ScheduleImpl (getZone (), 1);1 j% [ u; L' m8 X
modelSchedule.at$createAction (0, modelActions);9 d+ P5 b9 d3 R2 k7 |
, Y8 M! S- f5 F6 ^. t
return this;
% t3 v: ~# B6 f2 w$ L% { } |