HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
9 D ]. \4 S' W5 f0 }5 b
: ^% u# I; ^; V' }8 A7 R/ k5 e8 ^) P$ C public Object buildActions () {
% g ?7 q, A& t! O5 Z5 z4 _4 o6 `1 t super.buildActions();0 m$ [9 Z8 c) Z4 n2 ^/ I
2 d/ I: f0 e, u5 P+ }. J // Create the list of simulation actions. We put these in
$ ]' w& ?: a- Q3 L5 r) ~) W // an action group, because we want these actions to be4 K. j. s' Z5 A5 k$ T+ `( m0 ~+ S
// executed in a specific order, but these steps should
* `( c3 v0 I: J2 @( V // take no (simulated) time. The M(foo) means "The message
$ q: J5 Y1 c" t3 F* s% A // called <foo>". You can send a message To a particular! ^" c( R( s; N/ o+ |4 _. J- w9 y
// object, or ForEach object in a collection.* T5 D+ R7 N% Y4 U7 r# g/ ]. d
^& s! N2 P% E3 g& e
// Note we update the heatspace in two phases: first run
# [1 t" T0 y& J! f' ~% c6 C // diffusion, then run "updateWorld" to actually enact the$ y& ~" x+ J- a5 `1 |
// changes the heatbugs have made. The ordering here is
6 }% \% x. j/ q2 v0 w // significant!
r, b; r7 Q" h: ?% G
' ?" U3 o& @1 p# A! b F // Note also, that with the additional& {& b+ f7 i) i
// `randomizeHeatbugUpdateOrder' Boolean flag we can6 \) w* F% D6 C. ?0 n6 h0 b
// randomize the order in which the bugs actually run
Z: a- f# @4 @ // their step rule. This has the effect of removing any: |8 N2 w( H! \
// systematic bias in the iteration throught the heatbug5 C3 i: F7 Z# a7 ` x5 [6 Y5 o, F9 a8 z
// list from timestep to timestep
' D8 H) T7 \9 o1 h: L! ~' b ' M- D6 N, ?" L0 z2 J+ K
// By default, all `createActionForEach' modelActions have
) t8 c( o) C& g" J! G' y // a default order of `Sequential', which means that the
5 V7 _. J; z8 h" d! K' W" V // order of iteration through the `heatbugList' will be4 V' O! V. w' I5 u1 b# |! j. y
// identical (assuming the list order is not changed, `8 ]) h5 S, }5 g. Y
// indirectly by some other process).
Z9 C9 Q1 k, K3 B7 i! U0 X- d
$ m0 ?, G# f8 z: u2 `' l modelActions = new ActionGroupImpl (getZone ());2 g8 [7 @7 ?0 l: D X* E- a& N
$ |" H/ {2 J) @; n: T5 O0 C
try {
3 m: g9 E/ @- J1 w7 ]$ i# [- c/ }: W modelActions.createActionTo$message
8 m) b. m& | J( O0 K (heat, new Selector (heat.getClass (), "stepRule", false));+ R1 b0 {7 L* ^7 s
} catch (Exception e) {# M; h- [% H/ e$ P! V
System.err.println ("Exception stepRule: " + e.getMessage ());/ k1 S6 Q3 k8 V3 j2 [4 C3 I
}( F, Y0 o) v; w
% I0 z5 o) M& a, q
try {/ G3 B0 S% D6 w! Y( a5 B" y7 c# ^
Heatbug proto = (Heatbug) heatbugList.get (0);& L4 ?' q# s& @0 ~5 u' P% {; A
Selector sel = * N' G/ I# f' @ G/ I; Y
new Selector (proto.getClass (), "heatbugStep", false);
# b5 {$ H$ |! w/ d _ actionForEach =4 g) D+ A7 ]/ i2 p- r3 c' `
modelActions.createFActionForEachHomogeneous$call
& f! R5 N+ H* j/ i g6 O (heatbugList,
5 m( a9 s: {0 b) e- v9 g new FCallImpl (this, proto, sel,
: c* P& d. {/ A8 `7 h0 o1 M new FArgumentsImpl (this, sel)));
1 P7 }: ~7 V7 N+ s' p } catch (Exception e) {( E; g8 m$ A5 Z+ Y. U
e.printStackTrace (System.err);, o6 @, P, V; f$ {3 z% a# e# `2 S
}
/ h7 q) j8 N" ^; ?9 B) g
3 ?: \ \) J2 U7 ?* I syncUpdateOrder ();: {9 p+ c ^: F0 M
' ~' E0 l: d& e
try {
7 V; {8 H: {0 V modelActions.createActionTo$message
7 m& d( U! [4 b f/ ^* c/ |, N (heat, new Selector (heat.getClass (), "updateLattice", false));8 H" i; A# T; f: x; j
} catch (Exception e) {
" |; y) \8 m3 S% \7 M System.err.println("Exception updateLattice: " + e.getMessage ());$ `. ~( T2 |5 D3 V! Y
}0 b$ J2 M: H4 L4 A
& ?6 w; d3 q& }
// Then we create a schedule that executes the
- n5 d' G5 y/ W // modelActions. modelActions is an ActionGroup, by itself it
) X5 Y: d' z0 i: h' ~% [ // has no notion of time. In order to have it executed in# g$ j( L2 a+ S9 v
// time, we create a Schedule that says to use the
" D4 p; p9 q! k, _, u // modelActions ActionGroup at particular times. This- t# R7 _5 u8 Q1 V! U3 u- z, g1 i
// schedule has a repeat interval of 1, it will loop every
7 r7 A; J ?" _ // time step. The action is executed at time 0 relative to6 J/ h6 H! Q3 r: p
// the beginning of the loop.
: E1 G- O8 S+ K/ z" O2 } b w5 s4 W. r% p
// This is a simple schedule, with only one action that is% F- }& E, Q! k) X
// just repeated every time. See jmousetrap for more/ T; c% ^) k3 d+ n' k G5 i
// complicated schedules.
0 [# o8 i l/ y! V- C8 Q : k% K2 \ y* D. U
modelSchedule = new ScheduleImpl (getZone (), 1);3 s! E4 r d8 M" Z
modelSchedule.at$createAction (0, modelActions);7 C( |3 W7 `! o. a: E
' } |& L: k" \' C4 E/ r
return this;
$ `$ B7 i% \# x } |