HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:% h% x% t' l x
4 x0 J# N8 R5 @2 d; v# b# x% g8 M2 M
public Object buildActions () {( n9 \! r3 F5 `5 X1 x, s7 [/ U
super.buildActions();
1 R8 k. o) ^' z! _
; A6 @% I+ Q5 i8 S6 D$ D4 X // Create the list of simulation actions. We put these in1 {1 L% R {3 ~
// an action group, because we want these actions to be) J) X/ B u1 G3 U9 x+ q0 Q/ n# I
// executed in a specific order, but these steps should
& W. W3 |; j' N, R3 u // take no (simulated) time. The M(foo) means "The message
0 N* G& E) S2 s // called <foo>". You can send a message To a particular
$ `7 Y! k- _0 A9 O // object, or ForEach object in a collection.! p1 N6 y. F1 {1 L# k! I8 r8 Z
9 q& R9 D) E* i* I7 Y8 ~3 T% v& u // Note we update the heatspace in two phases: first run/ O' d& f! b- T& e- U
// diffusion, then run "updateWorld" to actually enact the1 d+ u5 A/ @7 E7 A, f! _/ b; s
// changes the heatbugs have made. The ordering here is
( o9 Y) S% t7 p' s // significant!
2 D1 Y9 ^% }: l, J1 C0 S " l* g, [& J( B; Z
// Note also, that with the additional. {) o' L' o# X
// `randomizeHeatbugUpdateOrder' Boolean flag we can
( \/ W" U9 R3 Q+ c) E6 i // randomize the order in which the bugs actually run) W/ ^( m, ?! Z) e% D% W3 Q: B
// their step rule. This has the effect of removing any5 c3 \" |+ m4 E
// systematic bias in the iteration throught the heatbug
F7 h! m+ |: P# h: f // list from timestep to timestep A+ {7 C: B5 y* d9 V8 B- \
4 i+ j. b- s D. F: l) n/ Z
// By default, all `createActionForEach' modelActions have
( W: m* q% ?9 R3 Z( l4 k0 c/ g* Q // a default order of `Sequential', which means that the7 Y# ]6 A/ V( U2 s9 {
// order of iteration through the `heatbugList' will be [& [+ A$ q3 \$ I/ B2 d% w2 B, o" H- Z
// identical (assuming the list order is not changed- W2 g3 X# K3 z; s6 A+ j0 O9 X
// indirectly by some other process).
* v; i" J1 P) i
0 C+ _- d- K: i. X0 b6 _ modelActions = new ActionGroupImpl (getZone ());. `. I6 l. a; T1 o z+ b0 P0 K
- b; r& Z. d$ B8 b! n" ^) f
try {
5 ^ a1 C* q/ ` modelActions.createActionTo$message
2 X# g- B6 M, t! t9 Y (heat, new Selector (heat.getClass (), "stepRule", false));5 I+ q) C+ i+ P2 h* [
} catch (Exception e) {
9 N6 C/ F, U1 c2 ]! M8 E O System.err.println ("Exception stepRule: " + e.getMessage ());# ~% s4 ~) V; \$ i* G" F- p% {7 n
}+ S6 o( ^- b6 \" Z
) d+ Y9 }7 m3 }6 e- L try {" N. f" g2 P0 t5 ]! I
Heatbug proto = (Heatbug) heatbugList.get (0);% f4 C* F! A* G% ]
Selector sel =
3 {/ y, P* K5 X4 V. t new Selector (proto.getClass (), "heatbugStep", false);5 z& J3 n+ \' U1 M8 O+ A1 R
actionForEach =* _6 @* @' Y; ^8 @3 q) T
modelActions.createFActionForEachHomogeneous$call& T4 P* ]1 R/ z2 B Z5 q
(heatbugList,
M! ?$ s6 J, G! }9 x- U$ z new FCallImpl (this, proto, sel,& k, U2 t; ^& | K) G* _
new FArgumentsImpl (this, sel)));
$ u& w4 v# I0 v3 B; D: t, m } catch (Exception e) {
1 o# n% ?9 U( x e.printStackTrace (System.err);5 ]8 i! `3 ~# |2 l; u- c# l# D3 C
}7 d5 L P/ t& {( V5 }4 B$ k7 f7 y
6 r! u6 p/ N' h! f0 a, p- [9 c P& S
syncUpdateOrder ();
$ ~' e2 P4 n) ]/ ?4 l1 S0 u9 B8 @1 s7 R g& M5 N" n r
try {
3 F, o) B: g& B, c6 [# ^- ~ modelActions.createActionTo$message 5 f7 l; j) I# d, c P* f6 Z
(heat, new Selector (heat.getClass (), "updateLattice", false));# z- [$ S+ \! H( |, t$ Z' T
} catch (Exception e) {: L! r9 i( }3 O9 v& ?
System.err.println("Exception updateLattice: " + e.getMessage ());
$ b5 n! m6 |7 s5 U. b/ Q2 E }& L. X0 F9 X- D% q2 ~: J1 h! W$ h! G
; R& O! S0 S% A \9 J2 s1 `8 f
// Then we create a schedule that executes the* n/ m1 j) {- t6 z
// modelActions. modelActions is an ActionGroup, by itself it
* y4 |) H6 V1 o0 m! Z I // has no notion of time. In order to have it executed in. L7 [0 h* o7 q6 a$ ]$ f4 V: w* ?
// time, we create a Schedule that says to use the+ F/ r- J! g. ?# k
// modelActions ActionGroup at particular times. This
. b* Q" \9 y( v& f0 ` // schedule has a repeat interval of 1, it will loop every
/ u/ q# R8 |" D" P: X; [ // time step. The action is executed at time 0 relative to
6 l' Z3 M( a4 R, D // the beginning of the loop.
$ j! J: @; N h* [3 M* Y2 \) v& }
+ h+ o% e! F4 I- g // This is a simple schedule, with only one action that is% F. d7 K4 H3 i3 _7 G# v) D
// just repeated every time. See jmousetrap for more
+ |. K! J$ }. w g8 E5 u // complicated schedules.
- }* g# E' J3 F6 G* y4 t! o 4 R9 S7 P; u' ?) K! `" d
modelSchedule = new ScheduleImpl (getZone (), 1);8 R4 X; p2 x/ f
modelSchedule.at$createAction (0, modelActions);0 H, G# m; F8 x, k" A! l# m
8 h4 O, g; ?# l" A3 l5 _; J, s
return this;" k% G- Q$ ~' D# g
} |