HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:* r; j. [: v( W
' ~ j' c3 B5 L. K- ]
public Object buildActions () {& u6 I" [ j4 |* t+ D" c
super.buildActions();
, _! F( j/ v, n F0 [1 \ 4 Q3 w0 P" a# }; y: N$ |# k
// Create the list of simulation actions. We put these in
% _6 s6 Z$ N8 ], j/ _- A4 L( t // an action group, because we want these actions to be
% @9 k) k: |0 w% R- ?, V" C // executed in a specific order, but these steps should$ X q( Z+ ~1 O1 g
// take no (simulated) time. The M(foo) means "The message
* N. T7 w4 N1 d2 y // called <foo>". You can send a message To a particular, @4 r( J1 s- f) q, {# _) i0 p0 O; t
// object, or ForEach object in a collection.3 {# w$ n. h- \- D& q
6 L) \+ @% Z% R: t/ d. G
// Note we update the heatspace in two phases: first run- C+ p( O& B- Q1 h& _9 Z
// diffusion, then run "updateWorld" to actually enact the3 w+ J: M; z- P& m
// changes the heatbugs have made. The ordering here is/ r6 ^ Y8 h5 W- r3 u7 Q
// significant!
/ n j% b1 {% ^) R+ X# H 3 n; ?8 g( o7 K
// Note also, that with the additional; T3 @& m4 T k0 n
// `randomizeHeatbugUpdateOrder' Boolean flag we can
. K6 [' s/ }. T6 ?5 S // randomize the order in which the bugs actually run8 d, ^/ q; n3 Q! J. m& H1 f- I
// their step rule. This has the effect of removing any
( r( U: d; f1 Y // systematic bias in the iteration throught the heatbug3 H/ L7 X8 f: G( L
// list from timestep to timestep
& j! j3 P) }: P& Q# B , t2 u' f: W$ k6 T4 \# c# b% R
// By default, all `createActionForEach' modelActions have
( e) {7 u. g$ [' @; _& H3 i // a default order of `Sequential', which means that the
& B' s* A$ O; z- v% W // order of iteration through the `heatbugList' will be0 K }* @7 i, s3 {, |$ c
// identical (assuming the list order is not changed
8 o# M- N" [+ ]9 k // indirectly by some other process).
2 l) g$ w4 C- z: M! ]4 r
$ z; ]7 g# U; E2 A) s+ L6 l& M modelActions = new ActionGroupImpl (getZone ());
- F. Q- b4 u4 k+ \- l; ?+ D# i9 \' X& w# r- Q7 T6 @; v& T2 d
try {% d/ n! I' y' o1 s. I
modelActions.createActionTo$message
* E- D2 v% B6 J2 {) g. N (heat, new Selector (heat.getClass (), "stepRule", false));/ p2 f# l$ K' u* z1 L K3 c
} catch (Exception e) {
- n* o ~, t$ N+ _/ b" O" K2 S: } System.err.println ("Exception stepRule: " + e.getMessage ()); k0 D+ v0 h" c/ g: G |, G: F
}
. W5 k- j5 o( ^' \6 P8 n, B! K" U6 }# F( Z& z1 K. D2 _0 C& F
try {
2 [+ h* T( ]& [! a* f Heatbug proto = (Heatbug) heatbugList.get (0);
- o; H+ I0 I. v) Z# g1 d6 j Selector sel = ; @1 z( ?% Z5 h. v( v# x
new Selector (proto.getClass (), "heatbugStep", false);
0 p9 L( Q4 S: `1 V actionForEach =
; m+ A+ G5 P& H: Z/ a+ C modelActions.createFActionForEachHomogeneous$call
9 w; a4 a5 B4 E* T! w. O" i1 S) J4 Y (heatbugList,
) I* x* F" ~- y, D6 {+ f& C new FCallImpl (this, proto, sel,5 W- V8 q+ M# z( c& ^$ V/ }
new FArgumentsImpl (this, sel)));
: d" J, A7 x9 y" ~! p1 Z } catch (Exception e) {2 @) ]0 H, F' ]0 x: c5 @
e.printStackTrace (System.err);
; R/ B! E# U; D }9 l( }6 K% l# S7 l
: R) b& c( X: A' R syncUpdateOrder ();
" D. z( c1 d2 |1 w: m( x6 K" V1 A' E# b, {$ z; X+ o
try {
1 } g5 Y( N2 l5 n `( Z& H5 W' Z modelActions.createActionTo$message
$ a! d# L: f- {' y* n4 ` (heat, new Selector (heat.getClass (), "updateLattice", false));
; |( L) S6 q) ?$ O6 c: g- D* N8 z' t } catch (Exception e) {
$ T$ q; b0 O0 ~ | System.err.println("Exception updateLattice: " + e.getMessage ());
- J0 R/ ]3 _) m' M }6 E3 Z" j! g! M
3 M+ @: R6 _! ?9 h- a' t // Then we create a schedule that executes the% M8 c/ G4 M/ u
// modelActions. modelActions is an ActionGroup, by itself it# P9 r2 {$ m4 P% C
// has no notion of time. In order to have it executed in
# Y% }1 B4 B) y s; U // time, we create a Schedule that says to use the2 R- `7 b3 ?+ O, \
// modelActions ActionGroup at particular times. This, H9 x" Q6 a) w* w a8 E( O* ~* X
// schedule has a repeat interval of 1, it will loop every
z% E! x$ j) H( e6 ] // time step. The action is executed at time 0 relative to
; @( l% K* b7 ?# |# M9 }# x // the beginning of the loop.
9 @ R7 O) c5 y
3 o4 w( B' w1 d9 `) M( f6 D: s // This is a simple schedule, with only one action that is% n+ ]. w6 C2 w. U
// just repeated every time. See jmousetrap for more# _4 X1 P. b: {% c
// complicated schedules.
/ |1 s% K& _( \
/ Z& |" s' K+ s! F modelSchedule = new ScheduleImpl (getZone (), 1); s4 J: T$ j% G) I+ S! n
modelSchedule.at$createAction (0, modelActions);5 F& _; U9 I% M
% N1 f) X& G q2 T
return this;, N- \$ @8 H0 K* Q
} |