HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
; [" E2 R5 n7 \9 o' K' A) B& v
# g6 \7 L, G% A1 @% x public Object buildActions () {# c3 X9 g$ j6 a" S
super.buildActions(); `0 s, V" K* K4 r. _1 {
, P: r3 _; C6 `4 V Q9 i // Create the list of simulation actions. We put these in
: t2 v# F- e( ?, _7 [4 B+ D& F9 \ // an action group, because we want these actions to be8 f: S, z, X7 ~( e
// executed in a specific order, but these steps should
& T2 ]* @# y9 A/ x# V; Y // take no (simulated) time. The M(foo) means "The message
/ e# a# Q4 R# h3 h$ r1 d // called <foo>". You can send a message To a particular; Q& P0 C s' [* ?3 c
// object, or ForEach object in a collection.8 J* m1 f& K5 J- ?" y5 C# L) b
7 C# R* m4 |: i( t // Note we update the heatspace in two phases: first run2 D2 J; w" i* H/ P1 V+ p5 W/ T# ]
// diffusion, then run "updateWorld" to actually enact the
3 P+ ?0 G; K. i8 v" E) g; X+ b2 I // changes the heatbugs have made. The ordering here is9 R: S$ r, R6 v3 B( [6 Y
// significant!0 G0 I3 O, c3 Y% w/ Z6 m
2 s2 d& u8 U3 Q3 W- z9 `
// Note also, that with the additional
/ s: _% ~4 u7 I // `randomizeHeatbugUpdateOrder' Boolean flag we can
- A6 Q/ c3 i- }" h a8 T7 Q // randomize the order in which the bugs actually run5 C8 v, z4 @& w) c7 j$ {
// their step rule. This has the effect of removing any
8 K; |3 f, z& A& \9 t/ B% O9 G // systematic bias in the iteration throught the heatbug6 l# @# l1 a* l7 x1 E+ `7 W$ n6 V
// list from timestep to timestep, N/ ^/ J( J/ B% {4 C4 X% c! J
4 B% @0 g4 b4 j$ f5 z5 J2 G/ X! K // By default, all `createActionForEach' modelActions have: p" @% R* E; d8 k$ y
// a default order of `Sequential', which means that the
+ Y& ^. H% {2 l- a // order of iteration through the `heatbugList' will be5 s# P7 `- I, }* e5 `
// identical (assuming the list order is not changed
8 {# E- N! i% D2 o+ o: y4 M* } U' K // indirectly by some other process).! I3 I8 \% h5 [
. T6 Z7 B; X/ V, d( m$ }9 F modelActions = new ActionGroupImpl (getZone ());: |1 y% `* `! c, O2 E" N/ Z
5 V4 x( E$ |/ K* P8 b$ V try {# S1 \3 A& }6 n
modelActions.createActionTo$message: M0 ?4 `, v: e# ~+ D
(heat, new Selector (heat.getClass (), "stepRule", false));9 ?1 z, `+ g h9 u _+ o! \
} catch (Exception e) {, w* g' m- P C9 s" {% I4 A
System.err.println ("Exception stepRule: " + e.getMessage ());2 r! d+ v- i* L2 {6 a6 `/ {! B
}
1 k% J4 K D* t$ k
+ K& F: P9 q. S R; W7 ~ try {
" C5 o" G4 i9 ?# K0 t2 j Heatbug proto = (Heatbug) heatbugList.get (0);
& i* x; k l: n r4 p: C# o Selector sel = 6 ?8 p: u& Z% \ ]- S' N) f" ~6 ~* K4 Z
new Selector (proto.getClass (), "heatbugStep", false);: K6 o$ b( t7 y9 m: \
actionForEach =
. a* ^( s/ k( _) } modelActions.createFActionForEachHomogeneous$call
5 r. `* w: O, A! A5 e (heatbugList,
* O% y, @- M" i Q new FCallImpl (this, proto, sel,% R9 @+ `4 {2 a8 ~
new FArgumentsImpl (this, sel)));# P9 [( u6 C' M, R2 M
} catch (Exception e) {
! I( b5 B' [; p7 ?5 [* g' G e.printStackTrace (System.err);
; u/ ?1 [5 r* ~' M- {( l }
1 i# f" w+ M' v% Z " v, K5 s$ `7 ?
syncUpdateOrder ();
6 Y3 d* ~6 Z; \4 U% Y
' C% |# f$ N: r* [/ v' Y try {
4 q u: I9 `* W modelActions.createActionTo$message - U4 z) D0 s& j/ ~: P$ p1 }
(heat, new Selector (heat.getClass (), "updateLattice", false));
) j* Q6 ~& ]# w8 p" N( { } catch (Exception e) {
3 F: A$ e" |3 F- N5 e; }* J System.err.println("Exception updateLattice: " + e.getMessage ());" C# ?! |2 D2 ]
}8 n- {& y! l$ u+ m5 s
. S# m* B0 e6 X7 `* x: h // Then we create a schedule that executes the
1 y" C- _, I% t // modelActions. modelActions is an ActionGroup, by itself it
; S9 r2 r$ o- R1 c% _ // has no notion of time. In order to have it executed in
) x4 n. W6 {3 i0 A3 V, m/ L // time, we create a Schedule that says to use the! ?5 z1 ?3 o7 W) x
// modelActions ActionGroup at particular times. This6 ~; V- O' P3 i; i4 y, h3 [( E
// schedule has a repeat interval of 1, it will loop every% W; H6 M2 E5 u0 H9 F2 ~' u- |
// time step. The action is executed at time 0 relative to5 f9 ? ^" X; O9 \$ S8 u+ ]
// the beginning of the loop.3 p; U" C5 s) e/ J# s* I; H
- K$ O: @) u( @4 _" M( U0 U. M
// This is a simple schedule, with only one action that is
, Y) A8 N% u" e8 ~ // just repeated every time. See jmousetrap for more% ~1 C; ]3 i; N; J: S- D6 h
// complicated schedules.' U8 M5 M* g9 B: k
' A/ ~/ g0 t% s2 V: Q1 _0 w
modelSchedule = new ScheduleImpl (getZone (), 1);1 A: W! I/ F( T
modelSchedule.at$createAction (0, modelActions);& P) x, T8 _5 d; F8 r
% G6 @; |& I/ q return this;% n: w. q' p+ M7 q7 e
} |