HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:4 D( w; q/ K2 ^% y8 p* |9 K
' p; V1 B1 e) Y" S7 ?7 f' q6 C6 z, p public Object buildActions () {
/ h' a% X4 K# S4 e+ d* b super.buildActions();& ?; n5 u! x5 [' b
- {" g8 F6 n" q8 @
// Create the list of simulation actions. We put these in% v5 _. Q3 q6 I6 o; a. R
// an action group, because we want these actions to be0 M& I4 S6 [8 H j, a" J2 v/ M
// executed in a specific order, but these steps should9 u3 k2 @5 Y; M+ g
// take no (simulated) time. The M(foo) means "The message4 q4 k$ N' \1 p% ?. w$ G) x4 H7 c
// called <foo>". You can send a message To a particular# p/ X$ d; d3 J, y& @* j: f
// object, or ForEach object in a collection.0 U5 I8 Y1 m9 Q
" S0 @. l8 U0 e* Z* ^
// Note we update the heatspace in two phases: first run
- O0 o2 `6 X5 Z) y8 ?1 _* M // diffusion, then run "updateWorld" to actually enact the F: ~* R. R& S( B) \
// changes the heatbugs have made. The ordering here is
1 Y* z- w* Q. X& T // significant!8 Q; q; l; n3 [- R( e+ _. Z# N) ]
, d) G2 T, U& | h9 }- L
// Note also, that with the additional
! d0 ]8 ?+ F9 s) n/ f // `randomizeHeatbugUpdateOrder' Boolean flag we can$ j9 M: {6 [' T( b! `. q8 z3 ]; K
// randomize the order in which the bugs actually run
5 Z/ a! i2 o, R% }* o$ N // their step rule. This has the effect of removing any$ G: e5 P! R3 N, S6 W
// systematic bias in the iteration throught the heatbug, V4 o+ Q+ |( a# h
// list from timestep to timestep; e% @ W! X6 }' R# i5 x! I# p) T
- y; o' a& E0 K# d; t2 V
// By default, all `createActionForEach' modelActions have
; E G6 C8 g6 H/ z6 `/ G2 g# X8 I3 E, | // a default order of `Sequential', which means that the& x5 _5 p5 d! z; V$ U! f
// order of iteration through the `heatbugList' will be& ~1 U4 ?0 }1 M0 _/ j
// identical (assuming the list order is not changed. K8 f* w! W) H# ]7 M
// indirectly by some other process).
7 w& i+ r H* Z) [" D' }6 N 8 I J. P' T# a; p: Q* ^3 [/ A/ z
modelActions = new ActionGroupImpl (getZone ());
' \5 ^2 V/ n- \. `- m. v/ U- p, [- k$ y9 w' G
try {
1 G& n5 o* H9 ^$ u2 I modelActions.createActionTo$message/ P. T" [4 L4 W- A9 u
(heat, new Selector (heat.getClass (), "stepRule", false));
# g- m* M0 z. L# W z2 \ } catch (Exception e) {
( b0 q4 J( P+ y System.err.println ("Exception stepRule: " + e.getMessage ());
1 I9 @ X% a8 h8 d6 Q }
6 N- I) ~8 K; R# E7 |+ I
9 m2 D" l# m& m" ]) o, R9 ] try {+ _ b' z& C" E6 I* Z' j
Heatbug proto = (Heatbug) heatbugList.get (0);! s z& v2 `/ z+ _2 Z$ Y* b& C
Selector sel = ' T. K- `% M3 U- D
new Selector (proto.getClass (), "heatbugStep", false);
) v" C7 u9 c: t* W m% k: J, D | actionForEach =4 l6 _ i! @/ m3 [! A
modelActions.createFActionForEachHomogeneous$call% |1 n" p" t; Y. u4 e( j
(heatbugList,9 z: [' o9 Y1 ~! E7 c
new FCallImpl (this, proto, sel,
" U8 j8 C2 }3 a5 z/ q W5 F" L( O new FArgumentsImpl (this, sel)));
9 [- ^1 F# l4 ]& R& i } catch (Exception e) {
% e. ]1 D1 ^/ J/ W e.printStackTrace (System.err);
2 G9 ]7 v, X2 G5 |" H; |) R } _6 R' A( }( ~& L, e1 _
1 ? W7 v" e% ^/ I$ k# C syncUpdateOrder ();
. E' u( U) h3 @! b" I3 v/ Z& V; o: n# K3 q7 r" N. D. r
try {
$ F/ ~- J% O8 d% p" l modelActions.createActionTo$message
. \+ G6 V7 [4 F+ z3 i1 j# w" _ (heat, new Selector (heat.getClass (), "updateLattice", false));
; w) h4 O9 }/ g: [# S& u: j } catch (Exception e) {
: t, H+ o3 |- s- J5 F6 [ System.err.println("Exception updateLattice: " + e.getMessage ());. f |. S z6 h ~/ i4 g
}
. L+ P2 r4 a% S. C 1 C+ y. R" y& V0 q$ E
// Then we create a schedule that executes the% W. c2 Q* z4 r
// modelActions. modelActions is an ActionGroup, by itself it
0 r# N9 s( k7 |1 g+ l% x2 H // has no notion of time. In order to have it executed in2 Z0 M9 c2 @4 A9 J5 L( n
// time, we create a Schedule that says to use the
; {" e9 R3 O' b5 f$ F8 ~5 F8 I // modelActions ActionGroup at particular times. This
( |1 |6 t# `9 W9 l, x // schedule has a repeat interval of 1, it will loop every
L+ M) f4 u9 v2 ]( a // time step. The action is executed at time 0 relative to
+ w0 e/ i7 f7 D; S* S1 ^$ W // the beginning of the loop.: n3 F; H3 l! n" u1 n1 ]( o8 R$ t
7 @0 S! W8 B7 P" |% G( g3 Y
// This is a simple schedule, with only one action that is
: S6 [) k6 E# m5 s, i+ z, E5 X // just repeated every time. See jmousetrap for more7 c- f# r8 U2 C( L# D4 k; t
// complicated schedules.& I# Q" a: h3 G
4 u3 Y( M' X' } modelSchedule = new ScheduleImpl (getZone (), 1);0 W9 e& H9 c8 d( W1 N
modelSchedule.at$createAction (0, modelActions);" J! w: `1 [9 n
- g$ e) L# o6 E* P0 i
return this;
$ w2 e7 g3 T( h } |