HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:
) N" \) q K" x5 P- w. l
6 p& ~( N$ T* a. L public Object buildActions () { |1 G# }0 f9 {, `
super.buildActions();
8 \7 M3 I( M- R& |6 u ; }% [1 c$ U: e
// Create the list of simulation actions. We put these in
% O- s1 A4 q* c; n9 h2 T7 E9 ? // an action group, because we want these actions to be% [$ h8 {$ D' [% @2 |
// executed in a specific order, but these steps should
) e/ R w6 v# Z" u0 _. w& M // take no (simulated) time. The M(foo) means "The message, z3 I4 @2 F% X3 O* C
// called <foo>". You can send a message To a particular
$ k! ^1 P2 \1 c" M1 R4 C) u1 _ // object, or ForEach object in a collection.1 K) ?0 X: j& j3 o4 u G
1 m+ F, ^2 p2 J3 R! y6 Q+ Z! T& O
// Note we update the heatspace in two phases: first run& e4 {. `0 L# B/ P
// diffusion, then run "updateWorld" to actually enact the
; j) e" U9 J' q // changes the heatbugs have made. The ordering here is4 ~' N5 Y' X9 k" U
// significant!. {: A2 M+ c" v/ R# u0 ], b& W4 H
1 a( H5 V5 |5 @/ N+ N Y: C# Z
// Note also, that with the additional
$ K/ I |8 J) |6 h: R( m' O& m // `randomizeHeatbugUpdateOrder' Boolean flag we can+ e: P7 }4 p9 h6 @
// randomize the order in which the bugs actually run# J8 h9 M5 Y3 c0 R/ [
// their step rule. This has the effect of removing any; \4 A; g/ `% M1 x6 z2 E _
// systematic bias in the iteration throught the heatbug# p, T* ~1 ^; B: x
// list from timestep to timestep
. v' q; [) g+ f( } ! Y- h1 M& {9 ]- x8 S- B/ r
// By default, all `createActionForEach' modelActions have
2 C- i; v( g! G& X // a default order of `Sequential', which means that the6 b3 I' ]0 n5 ^, @, g5 K, F6 K4 g
// order of iteration through the `heatbugList' will be$ C" G( P4 M0 a( d- Q2 {
// identical (assuming the list order is not changed
5 a4 w: B( c4 O // indirectly by some other process).
7 j, o+ }( U* R2 g
# w8 |" R- t; ~$ Z- i modelActions = new ActionGroupImpl (getZone ());
# N D+ D2 Y# a& V. Y9 l# J. i5 h& `' V! ^1 s' E% u
try {! `- B" z% c8 @) Q% s$ m
modelActions.createActionTo$message* Y& n7 \! R+ m6 M
(heat, new Selector (heat.getClass (), "stepRule", false));/ E' J$ B8 o8 r* v
} catch (Exception e) {: a% q3 v3 E1 t# Y3 [- Q
System.err.println ("Exception stepRule: " + e.getMessage ());
; {! u" j, V: N2 }8 U( Y3 L4 W }
1 u5 Z5 O6 G& Y, D: ~$ B- Z$ [" |8 I# l
try {
! N" S& A7 M9 L [1 Q: i, T- L Heatbug proto = (Heatbug) heatbugList.get (0);, K! ?- ]( P. s8 o! f/ P! ^, I4 z0 {$ c
Selector sel = ! ]8 _; v" m: G3 U: s# a P9 f( K$ s. Y
new Selector (proto.getClass (), "heatbugStep", false);
9 W1 R$ T/ c1 l0 {- D& p! b actionForEach =
3 ~. w9 L+ M& F& u+ M modelActions.createFActionForEachHomogeneous$call8 V7 ^6 Q& y! `
(heatbugList,, S7 s' X) O. q( u) d
new FCallImpl (this, proto, sel,# u9 m1 |' u+ E
new FArgumentsImpl (this, sel)));) r3 V+ b# z' Y# g. A1 z5 U) f
} catch (Exception e) {
1 \' Q% h H& P5 h e.printStackTrace (System.err);1 A H( O) d8 l9 K: h* E, L
}6 g, F0 @# p& t7 T# J. N
8 R) d/ t3 R; F' f) ^) g- Y
syncUpdateOrder ();7 O* r: v( M) b* j
* v6 u. d1 t" c' k& Y- Q try {7 u6 A8 z' I0 D9 G
modelActions.createActionTo$message
: K% Q6 p- ]9 n (heat, new Selector (heat.getClass (), "updateLattice", false));& ?3 E# @& }' u6 l8 F
} catch (Exception e) {& R2 w7 w) l4 L; {: s `: U
System.err.println("Exception updateLattice: " + e.getMessage ());
! A0 U& a( o5 e }* I5 }$ [8 W2 Q6 W6 Q
+ X" R- ]- n! W, o' U
// Then we create a schedule that executes the
% P, l- K3 T! S( \" I // modelActions. modelActions is an ActionGroup, by itself it3 N! O" l* `1 L7 x8 j7 b% h0 `& H
// has no notion of time. In order to have it executed in1 G& f: N# v& b( t/ k
// time, we create a Schedule that says to use the' x) i) c. v) n- [) X2 }3 v+ E
// modelActions ActionGroup at particular times. This
+ n, e4 O, Q9 Q, K" B G# m4 L // schedule has a repeat interval of 1, it will loop every; W( [# W& s0 @& h
// time step. The action is executed at time 0 relative to
5 s3 X" [0 x8 D // the beginning of the loop.
7 R' Y. L9 a' i# t* Z. X1 W$ W# g& F4 ^2 i2 J
// This is a simple schedule, with only one action that is
' b6 T9 F8 S5 | // just repeated every time. See jmousetrap for more* `2 J$ A; b4 M1 {, Y( L4 K+ Y0 M* u
// complicated schedules.1 e: C! }. @6 J' Z+ ?
! |: o9 m8 F. E, Y0 D modelSchedule = new ScheduleImpl (getZone (), 1);
/ g6 x# L* w0 i0 S0 L- A1 V1 B7 U2 B modelSchedule.at$createAction (0, modelActions);: _& m' z* B% P; M/ V, ]
- [/ O; H- }' ^) K return this;
}( j; Y$ l$ J! W- L" T) V* ] } |