HeatbugModelSwarm中buildActions部分,3个try分别是做什么?查了下refbook-java-2.2,解释太简略,还是不懂,高手指点,谢谢!代码如下:5 i$ ?9 r( b. J: ?
k+ E! o9 w) m1 l( V/ Z
public Object buildActions () {
& @) Z& |) j/ F s super.buildActions();
e2 k( l/ v. e 8 e. V! U+ F2 j6 p6 j9 L
// Create the list of simulation actions. We put these in
. O$ @& |+ }8 @5 K! U+ _$ U // an action group, because we want these actions to be+ s* A& u4 s3 R6 F5 y% Y
// executed in a specific order, but these steps should( d! ~( } G( H- ~/ X% Y b7 b
// take no (simulated) time. The M(foo) means "The message
- ^2 t1 X V J. R // called <foo>". You can send a message To a particular
- B' y' R9 F- _( O# n0 f // object, or ForEach object in a collection.
A: i) S. M3 M* A 2 J0 b6 ?# }2 V- M! y I. j3 }
// Note we update the heatspace in two phases: first run w/ v. }$ H/ f
// diffusion, then run "updateWorld" to actually enact the
% }8 O5 V1 {. D2 p3 |: r! D5 F // changes the heatbugs have made. The ordering here is
4 l4 U n8 _ U3 |( a // significant!: s) v' C7 O) N$ ^" s8 c4 b4 c9 M
3 g5 }& Y& X* N" E. Q/ N; F, y
// Note also, that with the additional
. H2 Y1 \7 v. [* ~- } // `randomizeHeatbugUpdateOrder' Boolean flag we can
* t& s; X3 C# t( B# W/ O$ K // randomize the order in which the bugs actually run
$ @3 V/ R4 Y, {& b // their step rule. This has the effect of removing any, }1 }) z. h$ H
// systematic bias in the iteration throught the heatbug
$ M3 c T, z, C, F* c% A // list from timestep to timestep9 Y; A7 L. f, a* k/ B. s+ e& v# W
" M: T) I: X/ C // By default, all `createActionForEach' modelActions have
: f) l7 r* _9 v+ A3 s. u8 R ^ // a default order of `Sequential', which means that the
% \1 q7 U0 H( ~0 K5 [! i1 s/ b // order of iteration through the `heatbugList' will be, ~; P" S9 i) c* l; Z
// identical (assuming the list order is not changed! O2 ], W5 I- i) _
// indirectly by some other process).
4 c4 d0 M6 J% \1 F2 p
& B' G+ G8 l; C; S9 j, P0 i( N modelActions = new ActionGroupImpl (getZone ());
/ z. r- `! x D$ f0 k# b5 a6 p- p( G% ?
try {
5 t1 p/ E5 ^/ i( R' g1 U' B+ r modelActions.createActionTo$message: D/ K% F J% O* i7 S
(heat, new Selector (heat.getClass (), "stepRule", false));. S2 d9 s( m+ R; V/ E j
} catch (Exception e) {
+ r9 F9 S! V y System.err.println ("Exception stepRule: " + e.getMessage ());
+ B! s6 M* a6 j6 z5 a }# S% T6 t) C* C
8 G" m7 D- B% K# J' D& ?+ i
try {2 m6 w/ T/ v) v# K0 i% H
Heatbug proto = (Heatbug) heatbugList.get (0);
! B0 u+ {% C0 W& K3 B; J. f+ O Selector sel = 0 }: X: m( P6 v; ?
new Selector (proto.getClass (), "heatbugStep", false);9 g# n- n" \& W" M O( {9 G
actionForEach =; A6 Y" X3 H- Y; ~& s m2 P! u0 ]6 r
modelActions.createFActionForEachHomogeneous$call
* |+ k' A+ ~0 E$ c& j0 J (heatbugList,
0 d) y) {# h( }+ V. B" { new FCallImpl (this, proto, sel,
/ U, Y( f$ G# a5 U E new FArgumentsImpl (this, sel)));
4 k9 F( N$ l M' F; c0 | } catch (Exception e) {
! u# j0 M* o2 N0 b# i- o e.printStackTrace (System.err);! C; n$ ^4 k6 @5 ~
}
* k4 [$ R$ c; a- M0 U9 r, L0 ]
5 P, e+ w# p# }2 s: C8 b: L7 E/ J syncUpdateOrder ();5 E; c7 m7 |6 w/ |7 l
2 ^" i% N" m* D0 }5 F4 L) { try {
8 F- H9 ~- n3 f modelActions.createActionTo$message
# h. p3 @. |) a4 ~: m; ` (heat, new Selector (heat.getClass (), "updateLattice", false));
9 B% Y+ |% O% E: T4 D& X" z0 H; B9 u } catch (Exception e) {1 ?/ f+ o$ f& e; F- `! y* c/ w: b" V
System.err.println("Exception updateLattice: " + e.getMessage ());
' K) F$ S0 k, v }
3 h1 }! u9 {5 l/ c; c% ]' J( k4 X( a
$ u0 k0 b5 L; x6 v/ \- }9 K // Then we create a schedule that executes the
+ z+ X* F8 g0 {: F7 A; ~, [ // modelActions. modelActions is an ActionGroup, by itself it
9 U2 R/ N4 j+ _' E* Z3 [ // has no notion of time. In order to have it executed in$ v0 y* H! M5 ]5 g. A! k; X4 ]
// time, we create a Schedule that says to use the
+ Y0 S2 s* z! F; m2 r1 q // modelActions ActionGroup at particular times. This+ Y. J; f/ |" S4 [1 b
// schedule has a repeat interval of 1, it will loop every* m! B \6 N( z8 ?% ?! L2 Y' E
// time step. The action is executed at time 0 relative to( P% P$ g6 w" V5 }! F
// the beginning of the loop.
6 S& x- r6 @6 [
( d7 s( `, {' r/ W9 V // This is a simple schedule, with only one action that is% X& S0 C+ s' V3 y9 T4 z8 [
// just repeated every time. See jmousetrap for more
9 C7 Z) n: `9 q9 [ // complicated schedules.
- n2 g |% H$ L7 E
& F8 }/ ]" }' R) M modelSchedule = new ScheduleImpl (getZone (), 1);
; D9 P& I+ m+ Y, F. {5 D; k, K modelSchedule.at$createAction (0, modelActions);& t0 `. e# x; s: X
1 ]/ ~% u! `) @0 E% d$ i3 c
return this;/ y: W' J3 d( z$ j4 f6 [
} |